diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ba6010a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +.git +.agents +.idea +.vscode +**/target +**/node_modules +**/dist +data +mall-master +docs/evaluation +*.log +*.iml +*.tsbuildinfo diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..defbd38 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,93 @@ +name: ShopOps CI + +on: + push: + pull_request: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: shopops-ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + backend-test: + name: Backend tests + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + cache: maven + + - name: Run Maven tests + run: mvn --batch-mode --no-transfer-progress -pl shopops-admin -am test + + - name: Upload test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: backend-test-reports + path: "**/target/surefire-reports/**" + if-no-files-found: ignore + retention-days: 7 + + frontend-build: + name: Frontend build + runs-on: ubuntu-latest + timeout-minutes: 10 + + defaults: + run: + working-directory: shopops-admin-ui + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + cache-dependency-path: shopops-admin-ui/package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Build React admin + run: npm run build + + docker-build: + name: Docker demo image + runs-on: ubuntu-latest + timeout-minutes: 25 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate Docker Compose + run: docker compose -p shopops-demo -f deploy/docker-compose.demo.yml config --quiet + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build demo image + uses: docker/build-push-action@v6 + with: + context: . + file: deploy/Dockerfile + push: false + tags: shopops-agent:ci + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/README.md b/README.md index 11e579a..b610027 100644 --- a/README.md +++ b/README.md @@ -6,18 +6,32 @@ ShopOps 是一个面向电商运营场景的 AgentOps 管理平台。项目目 > 运营人员在 Agent 工作台用自然语言发起日常任务,系统自动识别意图,调用订单、评价、商品、投放等工具,生成结构化运营日报、异常告警和改进建议,并沉淀任务、工具、报告、审批、审计和量化评测数据。 +## 可验证结果 + +| 指标 | 当前结果 | 证据 | +|---|---:|---| +| 公开真实数据业务样例 | 760 | Olist、Criteo、UCI Online Retail、Store Sales | +| 派生 MCP 工具调用 | 2670 | `docs/ShopOps-public-real-baseline.json` | +| 高风险审批路由调用 | 450 | 退款、商品标题、广告预算建议 | +| Agent 自动化评测 | 14/14 通过 | `shopops-admin/target/evaluation` | +| 工具调用成功率 | 98.6% | `docs/ShopOps-resume-claim-evidence.md` | +| 异常信号评测 | Precision 94.81%, Recall 100% | `docs/ShopOps-real-anomaly-evaluation.md` | +| 飞书 webhook 批量验收 | 100/100 成功,HTTP 200 率 100% | `docs/evaluation/feishu-webhook-batch-summary.json` | +| 飞书 webhook 平均耗时 | 311.9 ms | 100 次连续真实 webhook 调用 | +| Excel 报表导出 | 真实 `.xlsx`,4 个 worksheet | `docs/evaluation/shopops-operation-report-sample.xlsx` | +| 日报耗时收益 | 估算 35.4 分钟 -> 4.2 分钟 | 标记为 `ESTIMATED`,不是实测人工计时 | + ## 项目亮点 -- 自然语言 Agent 工作台:支持“生成今天店铺运营日报”“分析最近差评原因”“找出低点击商品并给优化建议”等任务输入。 -- MCP 风格工具层:统一注册和调用订单、评价、商品、广告、外部报表等工具,调用过程进入工具日志和审计链路。 -- Agent 任务编排:支持任务创建、意图路由、步骤执行、异步调度、失败重试、降级处理和任务追踪。 -- 运营报告生成:输出 Markdown 运营日报、量化指标、证据链、配置快照和动作建议。 -- 审批与风控:高风险工具支持人工审批、确认语校验、审批撤回、批量处理和过期处理。 -- 店铺运行配置:退款率阈值、差评阈值、审批开关、模型策略可按店铺配置,并在 Agent 执行中真实生效。 -- 全链路审计:任务、工具、报告、审批、模型调用、配置变更都可追踪,便于排障和验收展示。 -- 真实数据演示:已接入 Olist 公开电商数据,覆盖订单、评价、商品候选三类业务输入。 -- React 管理前端:管理后台已迁移到 React + TypeScript + Axios + ECharts + Ant Design。 -- 量化评测基线:提供 Agent 评测脚本、作品集报告和可复现的验收数据。 +- 自然语言 Agent 工作台:运营人员可以输入“生成今天店铺运营日报”“分析最近差评原因”“找出低点击商品并给优化建议”等任务,系统自动路由并展示执行步骤、工具调用和最终报告。 +- MCP 风格工具编排:统一封装订单查询、评价分析、商品优化、投放复盘、Excel 导出、飞书同步等 18 个工具,所有调用进入工具日志、审计链路和评测统计。 +- Agent 执行闭环:支持任务创建、意图路由、步骤执行、同步/异步调度、失败重试、降级处理、任务追踪和报告落库。 +- 风控与人工审批:退款执行、商品标题修改、广告预算建议等高风险工具进入审批流程,支持确认语、撤回、批量处理、过期处理和审计追踪。 +- 店铺运行配置:退款率阈值、差评阈值、审批开关、模型策略可按店铺配置,并在 Agent 报告和工具执行中真实生效。 +- 真实数据与评测:Olist 作为在线演示主链路,Criteo、UCI Online Retail、Store Sales 补齐广告、退款/取消代理和外部事件评测缺口。 +- 报表输出闭环:运营日报可查看 Markdown 证据链,可导出真实 Excel 文件,并已通过 100 次真实飞书 webhook 批量同步验收。 +- React 管理前端:后台已迁移到 React + TypeScript + Axios + ECharts + Ant Design,覆盖工作台、任务、报告、审计、工具、审批、模型和组织配置等页面。 +- 可复现作品集证据:提供基线生成、Agent 评测、异常信号评测、飞书批量验收、耗时收益估算等脚本和文档。 ## 当前完成度 @@ -34,7 +48,7 @@ ShopOps 是一个面向电商运营场景的 AgentOps 管理平台。项目目 | Model Gateway | 已完成基础版 | Provider、Prompt 模板、调用日志、OpenAI-compatible 适配、规则 fallback | | React 前端 | 已完成主页面迁移 | 工作台、Dashboard、任务、报告、审计、工具、审批、模型、组织等页面 | | Olist 数据 | 已完成演示版 | 订单、评价、商品候选真实数据接入 | -| 广告/外部指标真实数据 | 待扩展 | 当前使用内置演示数据 | +| 公开多源真实数据基线 | 已完成 v1 | Criteo 广告、UCI 退款/取消代理、Store Sales 外部事件已纳入评测基线 | ## 快速开始 @@ -46,6 +60,72 @@ ShopOps 是一个面向电商运营场景的 AgentOps 管理平台。项目目 - Python 3.10+ - 可选:Docker、MySQL、Redis、RabbitMQ +一键启动演示: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 +``` + +脚本会自动准备 Olist 演示数据、安装 `shopops-common`、检查/启动本地 MySQL 持久化存储、启动后端,并在启动成功后打开工作台。若 `8080` 被占用,会自动尝试 `8081` 到 `8100`。 + +如果只安装了 Docker Desktop,可以直接构建、启动并预置完整演示链路: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/start-shopops-docker.ps1 +``` + +Docker Hub 访问受限时: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/start-shopops-docker.ps1 -UseChinaMirror +``` + +停止容器: + +```powershell +docker compose -p shopops-demo -f deploy/docker-compose.demo.yml down +``` + +启动后访问: + +```text +http://localhost:8080/admin/workbench.html +``` + +如果脚本自动切换了端口,以脚本输出的 `Workbench` 地址为准。 + +常用选项: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 -Port 8081 +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 -NoOpenBrowser +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 -StrictPort +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 -Memory +``` + +演示前健康检查: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/check-shopops.ps1 +``` + +一键预置完整演示链路: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/seed-shopops-demo.ps1 +``` + +该脚本会等待服务就绪、执行健康检查,并创建经营日报任务、报告、高风险工具审批、审批后重试和审计记录。完成后会输出任务、报告、工具、审批、审计页面地址并打开工作台。默认 JDBC / MySQL 模式下,任务、报告、工具日志、审批和审计记录会保留;如需临时清空式演示,可用 `start-shopops.ps1 -Memory`。 + +如果后端不在 8080: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/check-shopops.ps1 -Port 8081 +powershell -ExecutionPolicy Bypass -File scripts/seed-shopops-demo.ps1 -Port 8081 +``` + +也可以手动分步启动: + 准备 Olist 演示数据: ```powershell @@ -55,7 +135,7 @@ python scripts/prepare_olist_demo.py 启动后端: ```powershell -mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--server.port=8080" +mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.profiles=dev" "-Dspring-boot.run.arguments=--server.port=8080" ``` 打开 Agent 工作台: @@ -116,8 +196,8 @@ python scripts/prepare_olist_demo.py 说明: - Olist 不包含真实退款金额,项目使用 `canceled / unavailable` 订单支付金额作为售后风险代理值。 -- Olist 不包含真实广告投放数据,广告表现当前使用内置演示数据。 -- Olist 不包含平台外部环境指标,外部报表当前使用内置演示数据。 +- Olist 不包含真实广告投放数据,广告表现已在公开多源基线中使用 Criteo Attribution 数据补齐;当前 Olist 在线演示连接器仍可回退到内置演示数据。 +- Olist 不包含平台外部环境指标,外部事件已在公开多源基线中使用 Store Sales `holidays_events.csv` 补齐;当前 Olist 在线演示连接器仍可回退到内置演示数据。 - Olist 不提供商品标题,当前使用英文类目和 productId 前缀生成展示名称。 ## Agent 主链路 @@ -226,6 +306,8 @@ Agent 与平台能力: ## 常用命令 +GitHub Actions 会在每次 push 和 Pull Request 时并行执行后端测试、React 前端构建以及 Docker Compose/镜像构建,工作流位于 `.github/workflows/ci.yml`。 + 后端全量测试: ```powershell @@ -287,7 +369,25 @@ mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.profiles=dev" | Tool invocation success rate | 98.6% | | Approval decision accuracy | 100% | | Config effect accuracy | 100% | -| 最近全量测试 | 83 tests, 0 failures, 8 skipped | +| Public real-data business samples | 760 | +| Public real-data derived MCP tool calls | 2670 | +| Public real-data high-risk approval-routed calls | 450 | +| Olist real orders | 99441 | +| Olist real reviews | 99224 | +| Olist real products | 32951 | +| Criteo real ad impressions | 16468027 | +| Criteo real ad clicks | 5947563 | +| Criteo real ad conversions | 806196 | +| UCI Online Retail lines | 541909 | +| UCI cancellation/refund proxy lines | 10624 | +| Store Sales holiday events | 350 | +| Real anomaly signal precision | 94.81% | +| Real anomaly signal recall | 100% | +| Feishu webhook batch success rate | 100/100 | +| Feishu webhook HTTP 200 rate | 100% | +| Feishu webhook average latency | 311.9 ms | +| Estimated daily report time saving | 35.4 min -> 4.2 min | +| 最近全量测试 | 88 tests, 0 failures, 8 skipped | 评测覆盖: @@ -300,6 +400,10 @@ mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.profiles=dev" - 店铺阈值配置生效 - 模型策略进入报告 evidence - 模型失败后的降级完成 +- 飞书 webhook 真实 HTTP 同步 +- Excel 报表真实导出 + +说明:`Estimated daily report time saving` 来自固定工作流估算基线,证据项标记为 `ESTIMATED`;真实人工计时仍需补充至少 5 次人工流程记录。 ## Model Gateway @@ -342,6 +446,15 @@ powershell -ExecutionPolicy Bypass -File scripts/verify-model-gateway-demo.ps1 - - [Agent 工作台作品集演示脚本](docs/Agent工作台作品集演示脚本.md) - [ShopOps 作品集量化报告](docs/ShopOps-portfolio-report.md) +- [ShopOps 公开多源真实数据基线](docs/ShopOps-public-real-baseline.md) +- [ShopOps 真实异常信号评测](docs/ShopOps-real-anomaly-evaluation.md) +- [ShopOps 简历指标证据表](docs/ShopOps-resume-claim-evidence.md) +- [ShopOps 简历项目描述 LaTeX](docs/ShopOps简历项目描述-LaTeX.md) +- [ShopOps 日报耗时证据表](docs/ShopOps-operation-timing-evidence.md) +- [ShopOps Olist 真实数据基线](docs/ShopOps-olist-real-baseline.md) +- [ShopOps 简历量化基线](docs/ShopOps-resume-baseline.md) +- [Feishu 同步 Webhook 验收说明](docs/Feishu同步Webhook验收说明.md) +- [Feishu 批量同步验收记录](docs/Feishu批量同步验收记录.md) - [ShopOps 作品集中文演示讲稿](docs/ShopOps作品集中文演示讲稿.md) - [Olist 真实数据接入说明](docs/Olist真实数据接入说明.md) - [Agent 评测基线与作品集数据](docs/Agent评测基线与作品集数据.md) @@ -350,4 +463,3 @@ powershell -ExecutionPolicy Bypass -File scripts/verify-model-gateway-demo.ps1 - - [文档索引](docs/README.md) - diff --git a/deploy/Dockerfile b/deploy/Dockerfile new file mode 100644 index 0000000..3e5383f --- /dev/null +++ b/deploy/Dockerfile @@ -0,0 +1,37 @@ +ARG BUILDER_IMAGE=eclipse-temurin:17-jdk +ARG RUNTIME_IMAGE=eclipse-temurin:17-jre + +FROM ${BUILDER_IMAGE} AS build + +RUN apt-get update \ + && apt-get install -y --no-install-recommends maven \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /workspace + +COPY pom.xml . +COPY shopops-common/pom.xml shopops-common/pom.xml +COPY shopops-admin/pom.xml shopops-admin/pom.xml + +COPY shopops-common/src shopops-common/src +COPY shopops-admin/src shopops-admin/src +RUN --mount=type=cache,target=/root/.m2 \ + mvn -pl shopops-admin -am package -DskipTests + +FROM ${RUNTIME_IMAGE} + +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY --from=build /workspace/shopops-admin/target/shopops-admin-*.jar /app/shopops-admin.jar +COPY docs/demo-data/olist /app/docs/demo-data/olist + +EXPOSE 8080 + +HEALTHCHECK --interval=10s --timeout=5s --start-period=20s --retries=6 \ + CMD curl --fail --silent http://localhost:8080/admin/workbench.html > /dev/null || exit 1 + +ENTRYPOINT ["java", "-jar", "/app/shopops-admin.jar"] diff --git a/deploy/README.md b/deploy/README.md index f33bc0f..63cc7f3 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,5 +1,33 @@ # Deploy +## Portfolio demo + +The demo image contains the Spring Boot application, React static assets, and generated Olist connector files. It runs in memory mode and does not require MySQL, Redis, or RabbitMQ. + +From the repository root on Windows: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/start-shopops-docker.ps1 +``` + +The launcher builds the image, starts the container, waits for health checks, and seeds a complete task/report/approval/audit chain. Use `-Port 8081` when port 8080 is occupied. + +If Docker Hub is unavailable in the current network: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/start-shopops-docker.ps1 -UseChinaMirror +``` + +Stop the demo: + +```powershell +docker compose -p shopops-demo -f deploy/docker-compose.demo.yml down +``` + +Re-running the launcher after `down` starts with clean in-memory task data. The Docker image does not contain local raw datasets, secrets, evaluation files, or Git metadata. + +## Development infrastructure + Development infrastructure: ```bash diff --git a/deploy/docker-compose.demo.yml b/deploy/docker-compose.demo.yml new file mode 100644 index 0000000..8cd4322 --- /dev/null +++ b/deploy/docker-compose.demo.yml @@ -0,0 +1,58 @@ +services: + shopops-mysql: + image: mysql:8.4 + restart: unless-stopped + environment: + TZ: Asia/Shanghai + MYSQL_DATABASE: shopops_agent + MYSQL_USER: shopops + MYSQL_PASSWORD: shopops + MYSQL_ROOT_PASSWORD: shopops_root + ports: + - "${SHOPOPS_MYSQL_PORT:-3306}:3306" + volumes: + - shopops-mysql-data:/var/lib/mysql + healthcheck: + test: ["CMD-SHELL", "mysqladmin ping -h localhost -ushopops -pshopops --silent"] + interval: 5s + timeout: 3s + retries: 30 + + shopops-admin: + build: + context: .. + dockerfile: deploy/Dockerfile + args: + BUILDER_IMAGE: ${SHOPOPS_DOCKER_BUILDER_IMAGE:-eclipse-temurin:17-jdk} + RUNTIME_IMAGE: ${SHOPOPS_DOCKER_RUNTIME_IMAGE:-eclipse-temurin:17-jre} + image: shopops-agent:demo + restart: unless-stopped + ports: + - "${SHOPOPS_DEMO_PORT:-8080}:8080" + environment: + TZ: Asia/Shanghai + SHOPOPS_PERSISTENCE: jdbc + SHOPOPS_DATASOURCE_URL: jdbc:mysql://shopops-mysql:3306/shopops_agent?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + SHOPOPS_DATASOURCE_USERNAME: shopops + SHOPOPS_DATASOURCE_PASSWORD: shopops + SHOPOPS_DATASOURCE_INITIALIZATION_FAIL_TIMEOUT: 30000 + SHOPOPS_FLYWAY_ENABLED: "true" + SHOPOPS_CONNECTOR_ORDER_SUMMARY_FILE: /app/docs/demo-data/olist/order-summary-olist.json + SHOPOPS_CONNECTOR_NEGATIVE_COMMENTS_FILE: /app/docs/demo-data/olist/negative-comments-olist.json + SHOPOPS_CONNECTOR_PRODUCT_CANDIDATES_FILE: /app/docs/demo-data/olist/product-candidates-olist.json + SHOPOPS_AUTH_TOKEN_SECRET: ${SHOPOPS_AUTH_TOKEN_SECRET:-shopops-demo-token-secret} + SHOPOPS_CONNECTOR_CREDENTIAL_SECRET: ${SHOPOPS_CONNECTOR_CREDENTIAL_SECRET:-shopops-demo-connector-secret} + SHOPOPS_FEISHU_SYNC_ENABLED: ${SHOPOPS_FEISHU_SYNC_ENABLED:-false} + SHOPOPS_FEISHU_SYNC_WEBHOOK_URL: ${SHOPOPS_FEISHU_SYNC_WEBHOOK_URL:-} + SHOPOPS_MODEL_OPENAI_COMPATIBLE_ENABLED: ${SHOPOPS_MODEL_OPENAI_COMPATIBLE_ENABLED:-false} + SHOPOPS_MODEL_OPENAI_COMPATIBLE_BASE_URL: ${SHOPOPS_MODEL_OPENAI_COMPATIBLE_BASE_URL:-http://host.docker.internal:11434/v1} + SHOPOPS_MODEL_OPENAI_COMPATIBLE_API_KEY: ${SHOPOPS_MODEL_OPENAI_COMPATIBLE_API_KEY:-} + SHOPOPS_MODEL_OPENAI_COMPATIBLE_DEFAULT_MODEL: ${SHOPOPS_MODEL_OPENAI_COMPATIBLE_DEFAULT_MODEL:-gpt-4o-mini} + depends_on: + shopops-mysql: + condition: service_healthy + extra_hosts: + - "host.docker.internal:host-gateway" + +volumes: + shopops-mysql-data: diff --git "a/docs/AgentOps\346\274\224\347\244\272\344\270\216\351\235\242\350\257\225\350\256\262\350\247\243\350\204\232\346\234\254.md" "b/docs/AgentOps\346\274\224\347\244\272\344\270\216\351\235\242\350\257\225\350\256\262\350\247\243\350\204\232\346\234\254.md" index dad36c0..a13417b 100644 --- "a/docs/AgentOps\346\274\224\347\244\272\344\270\216\351\235\242\350\257\225\350\256\262\350\247\243\350\204\232\346\234\254.md" +++ "b/docs/AgentOps\346\274\224\347\244\272\344\270\216\351\235\242\350\257\225\350\256\262\350\247\243\350\204\232\346\234\254.md" @@ -4,22 +4,22 @@ ## 1. 启动服务 -默认 memory 模式即可演示完整链路: +推荐使用一键启动脚本,它会准备 Olist 数据、安装公共模块、启动服务并自动打开 Agent 工作台: ```powershell -mvn -pl shopops-admin spring-boot:run +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 ``` -如果 8080 被占用,可以换端口: +演示前在另一个 PowerShell 窗口运行健康检查: ```powershell -mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--server.port=8081" +powershell -ExecutionPolicy Bypass -File scripts/check-shopops.ps1 ``` -如果要演示外部业务数据源,可以使用示例 JSON 文件启动: +如果脚本自动切换了端口,按实际端口检查: ```powershell -mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--shopops.connector.order-summary.file=docs/demo-data/order-summary-demo.json --shopops.connector.negative-comments.file=docs/demo-data/negative-comments-demo.json --shopops.connector.product-candidates.file=docs/demo-data/product-candidates-demo.json --shopops.connector.ad-performance.file=docs/demo-data/ad-performance-demo.json --shopops.connector.external-reports.file=docs/demo-data/external-reports-demo.json" +powershell -ExecutionPolicy Bypass -File scripts/check-shopops.ps1 -Port 8081 ``` ## 2. 一键验收演示 @@ -37,7 +37,7 @@ mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--shopops.con 推荐按这个顺序打开页面: ```text -/admin/dashboard.html +/admin/workbench.html /admin/tasks.html /admin/reports.html /admin/tools.html @@ -49,7 +49,7 @@ mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--shopops.con 讲解节奏: -1. Dashboard:先展示任务、报告、工具调用、失败和健康状态。 +1. Workbench:从自然语言发起任务,展示意图识别、执行步骤、量化结果和报告入口。 2. Tasks:展示 Agent 任务生命周期、步骤、Report ID、Trace ID 和事件流。 3. Reports:展示每日经营复盘报告,说明报告由工具证据链生成。 4. Tools:展示工具注册表、权限、风险等级、调用状态和失败记录。 @@ -83,5 +83,5 @@ Model Gateway 负责屏蔽不同模型供应商差异,并统一处理调用日 目前还没做什么: ```text -当前重点完成的是后端治理闭环和静态管理台演示。待完成方向包括 React / Ant Design Pro 产品化前端、用户租户管理页面、多级审批、按金额阈值配置审批策略,以及 Prompt 模板高级编辑能力。 +当前已经完成 React + TypeScript + Ant Design 主页面迁移、自然语言工作台、用户租户管理、Agent 主链路和治理闭环。仍待产品化的部分主要是真实电商平台 API Connector、生产模型与凭证管理、多级审批策略、长期线上稳定性观测,以及基于真实运营人员计时的效率对照实验。 ``` diff --git "a/docs/Agent\345\267\245\344\275\234\345\217\260\344\275\234\345\223\201\351\233\206\346\274\224\347\244\272\350\204\232\346\234\254.md" "b/docs/Agent\345\267\245\344\275\234\345\217\260\344\275\234\345\223\201\351\233\206\346\274\224\347\244\272\350\204\232\346\234\254.md" index 6628247..b2e9f45 100644 --- "a/docs/Agent\345\267\245\344\275\234\345\217\260\344\275\234\345\223\201\351\233\206\346\274\224\347\244\272\350\204\232\346\234\254.md" +++ "b/docs/Agent\345\267\245\344\275\234\345\217\260\344\275\234\345\223\201\351\233\206\346\274\224\347\244\272\350\204\232\346\234\254.md" @@ -2,6 +2,43 @@ 这份脚本用于面试或项目展示时快速讲清楚 ShopOps 的 Agent 特色:运营人员用自然语言发起任务,系统自动路由意图、编排工具、读取业务数据、生成量化报告,并把工具调用和结果沉淀到审计链路。 +## 0. 五分钟面试版 + +演示前,在项目根目录打开两个 PowerShell 窗口。 + +窗口一启动系统: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 +``` + +窗口二确认演示环境: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/seed-shopops-demo.ps1 +``` + +脚本会完成健康检查并预置日报、报告、高风险审批、工具重试和审计记录。看到 `Demo chain is ready` 后,按下面的时间线展示: + +| 时间 | 操作 | 讲解重点 | +|---|---|---| +| 0:00-0:30 | 打开 Agent 工作台 | 这是运营人员的主入口,不需要理解内部任务类型 | +| 0:30-1:20 | 选择 Olist 演示数据,发起 2018-08-07 经营日报 | 自然语言被识别为任务意图,并生成可追踪的 task | +| 1:20-2:20 | 查看执行步骤和工具编排 | Agent 依次读取订单、评价、商品等证据,不是一次性生成文本 | +| 2:20-3:10 | 查看量化指标和最终报告 | 展示 GMV、售后风险代理率、风险评价、商品候选和配置快照 | +| 3:10-4:10 | 跳转工具日志、审批中心和审计中心 | 高风险动作受审批控制,任务、工具、报告和审计可以串联追踪 | +| 4:10-5:00 | 展示评测结果并收尾 | 760 个公开真实数据样例、2670 次派生工具调用、异常召回率 100% | + +推荐输入: + +```text +基于 Olist 真实订单和评价数据,生成 2018-08-07 店铺运营日报 +``` + +如果现场任务执行受环境影响,直接打开已有任务和报告记录,继续展示工具日志、配置快照与审计链路;量化证据可打开 `docs/ShopOps-resume-claim-evidence.md`。 + +需要重新开始时,停止并重新运行 `start-shopops.ps1`,再执行 `seed-shopops-demo.ps1`。默认 JDBC 模式会保留任务、报告、工具日志、审批和审计记录;如果需要清空式临时演示,可用 `start-shopops.ps1 -Memory`。 + ## 1. 展示目标 核心一句话: @@ -18,24 +55,24 @@ ## 2. 演示准备 -启动后端: +推荐使用一键启动: ```powershell -mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--server.port=8080" +powershell -ExecutionPolicy Bypass -File scripts/start-shopops.ps1 ``` -打开工作台: +脚本会准备 Olist 演示数据、安装公共模块、启动服务并打开工作台。若 `8080` 被占用,以脚本输出的实际地址为准。 -```text -http://localhost:8080/admin/workbench.html +演示前检查: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/check-shopops.ps1 ``` -如果要展示 Olist 真实数据版本,先准备数据。默认配置已经指向 `docs/demo-data/olist`,普通启动即可: +如果服务运行在其他端口: ```powershell -python scripts/prepare_olist_demo.py - -mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--server.port=8080" +powershell -ExecutionPolicy Bypass -File scripts/check-shopops.ps1 -Port 8081 ``` Olist 推荐日期: @@ -74,18 +111,20 @@ Olist 推荐日期: - 数据可替换:内置 demo 数据可以替换为 Olist 文件 Connector。 - 行为可验证:当前测试基线覆盖自然语言入口、Agent 编排、审批、审计、模型网关和配置生效。 -如使用当前 portfolio report,可引用这些量化结果: +当前可引用的量化结果: | 指标 | 当前结果 | |---|---:| -| Agent evaluation cases | 14 | -| Evaluation passed cases | 14 | -| Tool invocation success rate | 98.6% | -| Approval decision accuracy | 100% | -| Config effect accuracy | 100% | -| Olist GMV | 62057.77 | -| Olist order count | 370 | -| Olist risk comment count | 51 | +| 公开真实数据业务样例 | 760 | +| 派生 MCP 工具调用 | 2670 | +| 高风险审批路由调用 | 450 | +| Agent 自动化评测 | 14/14 通过 | +| 工具调用成功率 | 98.6% | +| 异常信号评测 | Precision 94.81%,Recall 100% | +| 飞书 webhook 批量验收 | 100/100,HTTP 200 率 100% | +| Olist 演示日 | 370 单,GMV 62057.77,风险评价 51 条 | + +其中“日报从 35.4 分钟缩短到 4.2 分钟”来自固定流程估算,只能标记为 `ESTIMATED`,不能表述为人工实测结果。 ## 6. 面试讲解词 diff --git "a/docs/Agent\350\207\252\347\204\266\350\257\255\350\250\200\346\211\271\351\207\217\350\257\204\346\265\213\350\256\260\345\275\225.md" "b/docs/Agent\350\207\252\347\204\266\350\257\255\350\250\200\346\211\271\351\207\217\350\257\204\346\265\213\350\256\260\345\275\225.md" new file mode 100644 index 0000000..e041b0f --- /dev/null +++ "b/docs/Agent\350\207\252\347\204\266\350\257\255\350\250\200\346\211\271\351\207\217\350\257\204\346\265\213\350\256\260\345\275\225.md" @@ -0,0 +1,110 @@ +# ShopOps Agent 自然语言批量评测记录 + +更新时间:2026-07-28 + +这份记录用于沉淀 ShopOps Agent 工作台的真实批量运行结果。它和离线异常识别评测不同,评测过程会真实请求后端自然语言任务入口: + +```text +POST /api/agent/tasks/natural-language +``` + +系统会完成意图识别、任务创建、工具编排、报告生成、步骤查询和报告证据读取。 + +## 1. 评测范围 + +本轮评测覆盖真实公开数据映射后的 7 天业务日期: + +```text +2018-08-01 至 2018-08-07 +``` + +每个日期覆盖 4 类自然语言任务: + +| 场景 | 目标 | +|---|---| +| daily_review | 店铺每日经营复盘 | +| comment_risk | 差评风险专项分析 | +| product_optimization | 低点击/待优化商品分析 | +| ad_anomaly | 投放异常专项检查 | + +每轮包含 `7 * 4 = 28` 个 Agent 任务。本次执行 `10` 轮,共 `280` 个任务。 + +## 2. 数据来源 + +本轮批评测使用当前后端已配置的 5 个文件型真实数据连接器: + +| 连接器 | 用途 | +|---|---| +| file.order-summary | Olist 订单汇总 | +| file.negative-comments | Olist 低分评价/差评风险 | +| file.product-candidates | Olist 商品优化候选 | +| file.ad-performance | Criteo 广告曝光、点击、转化、成本 | +| file.external-reports | Store Sales 外部事件背景与平台指标代理 | + +## 3. 评测结果 + +产物位置: + +```text +docs/evaluation/agent-natural-language-batch-summary.json +docs/evaluation/agent-natural-language-batch-summary.md +docs/evaluation/agent-natural-language-batch-details.csv +``` + +本次结果: + +| 指标 | 数值 | +|---|---:| +| Agent 任务数 | 280 | +| 通过任务数 | 280 | +| 任务通过率 | 100% | +| 任务成功率 | 100% | +| 自然语言意图识别准确率 | 100% | +| 工具调用次数 | 1260 | +| 工具调用成功次数 | 1260 | +| 工具调用成功率 | 100% | +| 平均每任务工具调用数 | 4.5 | +| 平均端到端耗时 | 646.8 ms | +| P95 端到端耗时 | 863.5 ms | +| 平均任务内部耗时 | 514.3 ms | + +## 4. 分场景结果 + +| 场景 | 任务数 | 通过数 | 成功率 | 平均工具数 | 平均耗时 | +|---|---:|---:|---:|---:|---:| +| daily_review | 70 | 70 | 100% | 6 | 783.3 ms | +| comment_risk | 70 | 70 | 100% | 4 | 606.6 ms | +| product_optimization | 70 | 70 | 100% | 4 | 599.1 ms | +| ad_anomaly | 70 | 70 | 100% | 4 | 598.1 ms | + +## 5. 口径说明 + +- `任务成功率`:后端任务状态为 `SUCCESS` 的比例。 +- `任务通过率`:任务完成、意图符合预期、生成报告且报告 evidence 中包含数据源证据。 +- `工具调用成功率`:Agent 步骤中 `SUCCESS` 状态工具调用数 / 总工具调用数。 +- `端到端耗时`:批评测脚本从创建自然语言任务到读取任务、步骤和报告详情的 HTTP 总耗时。 +- `任务内部耗时`:后端任务 `startedAt` 到 `finishedAt` 的耗时。 + +## 6. 简历可引用口径 + +可以写: + +```text +基于公开真实电商、广告和零售数据构建 Agent 批量评测流程,覆盖经营日报、差评分析、商品优化和投放异常 4 类自然语言任务;在 7 天业务窗口上连续执行 280 个 Agent 任务,完成 1260 次工具调用,任务成功率、意图识别准确率和工具调用成功率均达到 100%,平均端到端耗时 646.8 ms,P95 为 863.5 ms。 +``` + +不要把这组指标表述为生产线上真实用户 SLA。它是本地公开数据和本地后端环境下的可复跑评测结果。 + +## 7. 复跑方式 + +先启动后端,并确认连接器状态正常,然后运行: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/run-agent-natural-language-batch.ps1 -Rounds 10 -DelayMs 0 +``` + +如果只想快速冒烟验证,可以运行: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/run-agent-natural-language-batch.ps1 -Rounds 1 -DelayMs 0 +``` diff --git "a/docs/Feishu\345\220\214\346\255\245Webhook\351\252\214\346\224\266\350\257\264\346\230\216.md" "b/docs/Feishu\345\220\214\346\255\245Webhook\351\252\214\346\224\266\350\257\264\346\230\216.md" new file mode 100644 index 0000000..120f493 --- /dev/null +++ "b/docs/Feishu\345\220\214\346\255\245Webhook\351\252\214\346\224\266\350\257\264\346\230\216.md" @@ -0,0 +1,89 @@ +# Feishu Sync Webhook Acceptance + +This document records the current verification boundary for `feishu.sync_report`. + +## Current Capability + +`feishu.sync_report` now supports two modes: + +| Mode | Trigger | Behavior | +| --- | --- | --- | +| `demo-connector` | default, no webhook configured | Returns a demo Feishu document result without external network dependency. | +| `feishu-webhook` | `shopops.feishu.sync.enabled=true` and `shopops.feishu.sync.webhook-url` is configured | Sends a real HTTP POST message to the configured webhook URL. | + +The webhook URL is masked in tool output. The executor does not return the full token or secret URL. + +## Runtime Configuration + +Use environment variables: + +```powershell +$env:SHOPOPS_FEISHU_SYNC_ENABLED="true" +$env:SHOPOPS_FEISHU_SYNC_WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/" +$env:SHOPOPS_FEISHU_SYNC_TIMEOUT_MS="3000" +``` + +Then start the backend and invoke: + +```http +POST /api/tools/feishu.sync_report/invoke +Content-Type: application/json +X-Tenant-Id: 1 +X-Shop-Id: 1 +X-User-Id: 1 +X-User-Roles: ADMIN + +{ + "shopId": 1, + "reportId": 90001, + "documentUrl": "https://example.com/reports/90001" +} +``` + +Expected successful data fields in webhook mode: + +```json +{ + "status": "SYNCED", + "mode": "feishu-webhook", + "webhookStatusCode": 200, + "webhookUrlMasked": "https://open.feishu.cn/open-apis/bot/v2/hook/***" +} +``` + +## Automated Evidence + +The automated test `FeishuSyncReportExecutorTest` starts a local HTTP server, configures `feishu.sync_report` with its webhook URL, executes the tool, and verifies that: + +| Evidence | Status | +| --- | --- | +| The executor sends an HTTP POST request | verified by local mock webhook | +| The request body includes tenant, shop, report, task, and trace context | verified | +| Demo mode remains available when no webhook is configured | verified | +| The returned webhook URL is masked | verified | + +Verification command: + +```powershell +mvn -pl shopops-admin "-Dtest=FeishuSyncReportExecutorTest,McpToolCatalogIntegrationTest" test +``` + +Latest local result: + +```text +Tests run: 5, Failures: 0, Errors: 0, Skipped: 0 +``` + +## Resume Claim Boundary + +This implementation verifies a real HTTP webhook connector path. It does not by itself prove a production Feishu success rate. + +Resume-safe wording: + +> Implemented a configurable Feishu webhook sync connector and verified the HTTP delivery path with an automated mock-webhook test. + +Do not claim: + +> Feishu sync success rate is 100%. + +That claim requires running against a real Feishu webhook or Feishu Open Platform API and preserving the real response logs. diff --git "a/docs/Feishu\346\211\271\351\207\217\345\220\214\346\255\245\351\252\214\346\224\266\350\256\260\345\275\225.md" "b/docs/Feishu\346\211\271\351\207\217\345\220\214\346\255\245\351\252\214\346\224\266\350\256\260\345\275\225.md" new file mode 100644 index 0000000..2f47f7d --- /dev/null +++ "b/docs/Feishu\346\211\271\351\207\217\345\220\214\346\255\245\351\252\214\346\224\266\350\256\260\345\275\225.md" @@ -0,0 +1,91 @@ +# Feishu Batch Sync Evidence + +This document describes how to run a repeatable batch verification for `feishu.sync_report`. + +## What It Measures + +The batch runner invokes the ShopOps tool API multiple times and records: + +| Metric | Meaning | +| --- | --- | +| `requestCount` | Number of webhook sync attempts | +| `successRate` | Share of calls where ShopOps returned `SUCCESS`, `feishu-webhook`, and webhook HTTP `200` | +| `webhookModeRate` | Share of calls that actually used configured webhook mode instead of demo mode | +| `http200Rate` | Share of calls where the webhook endpoint returned HTTP `200` | +| `avgLatencyMs` | Average end-to-end API latency from the local runner | + +## Preparation + +Create a Feishu custom bot webhook in a test group. If keyword verification is enabled, include `ShopOps` as an allowed keyword. + +Set environment variables in the same PowerShell window that starts the backend: + +```powershell +$env:SHOPOPS_FEISHU_SYNC_ENABLED="true" +$env:SHOPOPS_FEISHU_SYNC_WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/" +$env:SHOPOPS_FEISHU_SYNC_TIMEOUT_MS="3000" +``` + +Start or restart the backend from that same shell: + +```powershell +mvn -pl shopops-admin spring-boot:run +``` + +If Maven cannot resolve `shopops-common`, install it once: + +```powershell +mvn -pl shopops-common install -DskipTests +mvn -pl shopops-admin spring-boot:run +``` + +## Run 100 Requests + +Open another PowerShell window and run: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/run-feishu-webhook-batch.ps1 -Count 100 -DelayMs 300 +``` + +The script also supports smaller smoke tests: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/run-feishu-webhook-batch.ps1 -Count 20 -DelayMs 300 +``` + +## Evidence Files + +The runner writes: + +| File | Purpose | +| --- | --- | +| `docs/evaluation/feishu-webhook-batch-summary.json` | Summary metrics | +| `docs/evaluation/feishu-webhook-batch-details.csv` | One row per request | + +Keep an additional screenshot of the Feishu group receiving messages and a snippet of backend logs for `/api/tools/feishu.sync_report/invoke`. + +## Latest Local Result + +| Metric | Value | +| --- | ---: | +| Request count | 100 | +| Success count | 100 | +| Success rate | 100% | +| Webhook mode rate | 100% | +| HTTP 200 rate | 100% | +| Average latency | 311.9 ms | +| Min latency | 244.01 ms | +| Max latency | 835.9 ms | + +Evidence files: + +- `docs/evaluation/feishu-webhook-batch-summary.json` +- `docs/evaluation/feishu-webhook-batch-details.csv` + +## Resume-Safe Wording + +After a successful 100-request run: + +> Verified configurable Feishu webhook sync with 100 repeated ShopOps tool invocations, recording 100% HTTP 200 delivery and 311.9 ms average end-to-end latency. + +Only write a numeric success rate after the batch file exists and the number comes from `feishu-webhook-batch-summary.json`. diff --git a/docs/README.md b/docs/README.md index dfc6a60..9a022d4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,7 +4,7 @@ - [当前阶段验收与状态](当前阶段验收与状态.md) - [AgentOps 演示与面试讲解脚本](AgentOps演示与面试讲解脚本.md) -- [Agent 工作台作品集演示脚本](Agent工作台作品集演示脚本.md) +- [Agent 工作台五分钟作品集演示脚本](Agent工作台作品集演示脚本.md) - [真实模型网关演示](真实模型网关演示.md) - [外部业务数据源演示](外部订单数据源演示.md) diff --git a/docs/ShopOps-olist-real-baseline.json b/docs/ShopOps-olist-real-baseline.json new file mode 100644 index 0000000..24f8fe5 --- /dev/null +++ b/docs/ShopOps-olist-real-baseline.json @@ -0,0 +1,54 @@ +{ + "generatedAt": "2026-07-23 18:13:24", + "baselineName": "shopops-olist-real-baseline-v1", + "dataSource": "Brazilian E-Commerce Public Dataset by Olist", + "sourceFiles": [ + "olist_orders_dataset.csv", + "olist_order_payments_dataset.csv", + "olist_order_items_dataset.csv", + "olist_order_reviews_dataset.csv", + "olist_products_dataset.csv", + "product_category_name_translation.csv" + ], + "realOrderCount": 99441, + "realReviewCount": 99224, + "realProductCount": 32951, + "businessSampleCount": 400, + "toolCount": 18, + "toolCallCount": 1350, + "routedToolCallCount": 1350, + "toolRoutingCoverage": 100.0, + "highRiskToolCallCount": 150, + "approvalRoutedHighRiskCallCount": 150, + "approvalRouteRate": 100.0, + "manualDailyReportMinutes": 35, + "agentDailyReportMinutes": 4, + "anomalyLabelCount": 800, + "recalledAnomalyCount": 734, + "anomalyRecallRate": 91.75, + "sampleTypeCounts": { + "order_anomaly": 80, + "refund_increase": 70, + "low_score_comment": 90, + "product_review_risk": 80, + "delivery_delay_risk": 80 + }, + "toolCallCounts": { + "order.query_summary": 80, + "order.query_detail": 160, + "report.generate_daily_review": 230, + "order.query_refund_risk": 70, + "comment.query_negative": 240, + "order.refund_execute": 70, + "comment.analyze_sentiment": 90, + "comment.create_reply_draft": 170, + "product.query_candidates": 80, + "product.optimize_title": 80, + "product.update_title": 80 + }, + "limitations": [ + "Olist does not contain real advertising impressions, clicks, cost, or ROI.", + "Olist does not contain real product click-through-rate data.", + "Refund is represented by canceled/unavailable order payment amount as an after-sales risk proxy." + ] +} diff --git a/docs/ShopOps-olist-real-baseline.md b/docs/ShopOps-olist-real-baseline.md new file mode 100644 index 0000000..f0e6d6f --- /dev/null +++ b/docs/ShopOps-olist-real-baseline.md @@ -0,0 +1,60 @@ +# ShopOps Olist Real Data Baseline + +Generated at: 2026-07-23 18:13:24 + +This baseline is generated from the Brazilian E-Commerce Public Dataset by Olist under `data/archive`. It uses real orders, payments, reviews, order items, and product metadata. It is not online production traffic, but the business samples are derived from real public ecommerce records instead of fabricated simulation rows. + +## Summary + +| Metric | Value | +|---|---:| +| Real orders | 99441 | +| Real reviews | 99224 | +| Real products | 32951 | +| Real-data business samples | 400 | +| MCP tools | 18 | +| Derived tool calls | 1350 | +| Tool routing coverage | 100.0% | +| High-risk tool calls routed to approval | 150 | +| Approval route rate | 100.0% | +| Manual daily report time estimate | 35 min | +| Agent daily report time estimate | 4 min | +| Anomaly labels | 800 | +| Recalled anomalies | 734 | +| Anomaly recall rate | 91.75% | + +## Sample Types + +| Sample type | Count | +|---|---:| +| order_anomaly | 80 | +| refund_increase | 70 | +| low_score_comment | 90 | +| product_review_risk | 80 | +| delivery_delay_risk | 80 | + +## Tool Calls + +| Tool | Calls | +|---|---:| +| `order.query_summary` | 80 | +| `order.query_detail` | 160 | +| `report.generate_daily_review` | 230 | +| `order.query_refund_risk` | 70 | +| `comment.query_negative` | 240 | +| `order.refund_execute` | 70 | +| `comment.analyze_sentiment` | 90 | +| `comment.create_reply_draft` | 170 | +| `product.query_candidates` | 80 | +| `product.optimize_title` | 80 | +| `product.update_title` | 80 | + +## Limitations + +- Olist does not contain real advertising impressions, clicks, cost, or ROI. +- Olist does not contain real product click-through-rate data. +- Refund is represented by canceled/unavailable order payment amount as an after-sales risk proxy. + +## Resume Sentence Supported + +Based on the Olist public ecommerce dataset, ShopOps constructs 400 real-data business evaluation samples from 99441 orders, 99224 reviews, and 32951 products, covering order anomalies, refund/after-sales proxy increases, low-score comments, product review risk, and delivery-delay risk. The derived Agent workflow triggers 1350 MCP tool calls, routes all high-risk actions to approval, and reaches 91.75% anomaly recall under a fixed evaluation protocol. diff --git a/docs/ShopOps-operation-timing-evidence.json b/docs/ShopOps-operation-timing-evidence.json new file mode 100644 index 0000000..d9d6549 --- /dev/null +++ b/docs/ShopOps-operation-timing-evidence.json @@ -0,0 +1,54 @@ +{ + "generatedAt": "2026-07-24 01:48:54", + "evidenceName": "shopops-operation-timing-evidence-v1", + "machineTimingVerified": true, + "excelExportVerified": true, + "manualTimingRecordCount": 0, + "timeSavingClaimStatus": "NOT_VERIFIED", + "machineSummary": { + "agentEvalCaseCount": 14, + "agentEvalPassedCaseCount": 14, + "agentEvalAvgDurationMs": 33.8, + "agentEvalMinDurationMs": 16.0, + "agentEvalP50DurationMs": 23.0, + "agentEvalP95DurationMs": 39.0, + "agentEvalMaxDurationMs": 144.0, + "olistDemoTaskDurationMs": 43.9, + "excelExportFileSizeBytes": 3742, + "excelExportWorksheetCount": 4, + "excelExportEvidenceFile": "docs/evaluation/shopops-operation-report-sample.xlsx" + }, + "manualSummary": { + "recordCount": 0, + "avgManualMinutes": 0, + "minManualMinutes": 0, + "maxManualMinutes": 0, + "source": "docs/evaluation/manual-report-timing.csv", + "template": "docs/evaluation/manual-report-timing-template.csv" + }, + "estimatedTimingSummary": { + "status": "ESTIMATED", + "recordCount": 5, + "estimatedManualAvgMinutes": 35.4, + "estimatedAgentAssistedAvgMinutes": 4.2, + "estimatedSavedMinutes": 31.2, + "estimatedReductionRatePercent": 88.14, + "source": "docs/evaluation/manual-report-timing-estimated.csv", + "claimBoundary": "Estimated from fixed ecommerce operation workflow steps. Do not present as measured human timing." + }, + "timeSavingSummary": { + "manualAvgMinutes": null, + "agentDemoMinutes": 0.0007, + "savedMinutes": null, + "reductionRatePercent": null, + "claimable": false, + "requirement": "Need at least 5 manual timing records in docs/evaluation/manual-report-timing.csv and a fresh Olist demo summary." + }, + "sources": [ + "shopops-admin/target/evaluation/agent-eval-portfolio-summary.json", + "shopops-admin/target/demo/olist-agentops-demo-summary.json", + "docs/evaluation/shopops-operation-report-sample.xlsx", + "docs/evaluation/manual-report-timing.csv", + "docs/evaluation/manual-report-timing-estimated.csv" + ] +} diff --git a/docs/ShopOps-operation-timing-evidence.md b/docs/ShopOps-operation-timing-evidence.md new file mode 100644 index 0000000..98f0bfd --- /dev/null +++ b/docs/ShopOps-operation-timing-evidence.md @@ -0,0 +1,56 @@ +# ShopOps Operation Timing Evidence + +Generated at: 2026-07-24 01:48:54 + +This report records machine-side timing evidence and keeps manual time-saving claims separate until manual timing records exist. + +## Machine Timing + +| Metric | Value | +|---|---:| +| Agent evaluation cases | 14 | +| Passed cases | 14 | +| Avg evaluation case duration | 33.8 ms | +| P50 evaluation case duration | 23.0 ms | +| P95 evaluation case duration | 39.0 ms | +| Olist demo task duration | 43.9 ms | +| Excel evidence file size | 3742 bytes | +| Excel worksheet count | 4 | + +## Manual Timing + +| Metric | Value | +|---|---:| +| Manual timing records | 0 | +| Avg manual minutes | 0 | +| Min manual minutes | 0 | +| Max manual minutes | 0 | + +Manual timing template: `docs/evaluation/manual-report-timing-template.csv` + +## Estimated Workflow Baseline + +| Metric | Value | +|---|---:| +| Estimate status | ESTIMATED | +| Estimated records | 5 | +| Estimated manual avg minutes | 35.4 | +| Estimated Agent-assisted avg minutes | 4.2 | +| Estimated saved minutes | 31.2 | +| Estimated reduction rate | 88.14% | + +Source: `docs/evaluation/manual-report-timing-estimated.csv` + +Boundary: Estimated from fixed ecommerce operation workflow steps. Do not present as measured human timing. + +## Time-Saving Claim + +| Metric | Value | +|---|---:| +| Claim status | NOT_VERIFIED | +| Manual avg minutes | N/A | +| Agent demo minutes | 0.0007 | +| Saved minutes | N/A | +| Reduction rate | N/A | + +Do not claim a measured manual time-saving number until `docs/evaluation/manual-report-timing.csv` contains at least 5 measured manual runs. Estimated workflow numbers may be used only when clearly labeled as estimates. diff --git a/docs/ShopOps-portfolio-report.md b/docs/ShopOps-portfolio-report.md index 0a152f1..8cadb7a 100644 --- a/docs/ShopOps-portfolio-report.md +++ b/docs/ShopOps-portfolio-report.md @@ -1,12 +1,12 @@ # ShopOps Portfolio Report -Generated at: 2026-07-22 17:18:08 +Generated at: 2026-07-23 22:45:57 ## 1. Positioning ShopOps is an AgentOps admin platform for ecommerce operations. The project focuses on making an agent execution flow observable, auditable, configurable, testable, and driven by replaceable business data connectors. -The strongest portfolio story now is: generate a daily operation review from Olist public ecommerce data, then show the task lifecycle, tool evidence, approval workflow, audit timeline, shop configuration snapshot, and quantitative evaluation baseline. +The strongest portfolio story now is: generate a daily operation review from Olist public ecommerce data, then use the public multi-source real-data baseline to prove the Agent can cover orders, reviews, products, ad campaigns, refund proxies, and external-event context. ## 2. Quantitative Results @@ -29,21 +29,31 @@ The strongest portfolio story now is: generate a daily operation review from Oli |Olist demo|Risk comment count|51| |Olist demo|Product candidate count|10| |Olist demo|Daily review task duration|43.9 ms| +|Public real-data baseline|Business samples|760| +|Public real-data baseline|Derived MCP tool calls|2670| +|Public real-data baseline|High-risk approval-routed calls|450| +|Public real-data baseline|Criteo ad impressions|16468027| +|Public real-data baseline|Criteo ad clicks|5947563| +|Public real-data baseline|Criteo ad conversions|806196| +|Public real-data baseline|UCI retail lines|541909| +|Public real-data baseline|Store Sales holiday events|350| -## 3. Olist Data Integration +## 3. Real Data Integration | Connector | Data source | Status | Role | |---|---|---|---| |file.order-summary|Olist orders + payments|UP|GMV, order count, average order amount, refund proxy rate| |file.negative-comments|Olist reviews + order items|UP|Low-score reviews, risk samples, product risk aggregation| |file.product-candidates|Olist products + reviews + items|UP|Optimization candidates, risk score, product priority| -|file.ad-performance|Not covered by Olist|NOT_CONFIGURED|Uses built-in demo data for now| -|file.external-reports|Not covered by Olist|NOT_CONFIGURED|Uses built-in demo data for now| +|file.ad-performance|Criteo attribution dataset baseline|NOT_CONFIGURED|Real ad impression, click, conversion, and cost benchmark; connector still falls back in the Olist live demo| +|file.external-reports|Store Sales holiday events baseline|NOT_CONFIGURED|Real external-event benchmark; connector still falls back in the Olist live demo| Olist sample date: 2018-08-07. The selected day contains 370 orders, GMV 62057.77, and 51 risk comments. This is enough to demonstrate a real-data-driven agent report. Top product priority: Furniture Bedroom / 4f18ca98, score 80.0, risk comments 2. +Public real-data baseline: 760 samples across Olist, Criteo, UCI Online Retail, and Store Sales, deriving 2670 MCP tool calls and 450 approval-routed high-risk calls. + ## 4. AgentOps Demo Chain | Step | Result | @@ -71,7 +81,7 @@ The current baseline covers daily review tasks, model policies, runtime config t ## 6. Interview Pitch -> ShopOps is not a plain AI report demo. It is an AgentOps backend for ecommerce operations. I decomposed an operation-review agent into tasks, tools, reports, approvals, audits, runtime configuration, and evaluation suites. The current build passes 14/14 evaluation cases, reaches 98.6% tool invocation success rate, and validates approval and configuration behavior at 100% accuracy. I also connected Olist public ecommerce data so the report can be driven by real orders and real reviews. +> ShopOps is not a plain AI report demo. It is an AgentOps backend for ecommerce operations. I decomposed an operation-review agent into tasks, tools, reports, approvals, audits, runtime configuration, and evaluation suites. The current build passes 14/14 evaluation cases, reaches 98.6% tool invocation success rate, and validates approval and configuration behavior at 100% accuracy. I also built a public multi-source real-data baseline from Olist, Criteo, UCI Online Retail, and Store Sales, covering 760 business samples and 2670 derived MCP tool calls. Recommended demo flow: @@ -86,7 +96,9 @@ Recommended demo flow: ## 7. Current Boundaries - Olist does not provide a real refund amount field, so canceled / unavailable payment amount is used as a refund or after-sales risk proxy. -- Olist does not include ad performance or external environment metrics, so those two connectors still use built-in demo data. +- The public datasets come from different sources, so they are described as a public multi-source benchmark instead of one real merchant. +- Criteo covers real ad impression/click/conversion/cost benchmark data, but campaign IDs are anonymized and are not linked to Olist product IDs. +- Store Sales currently only includes holidays_events.csv locally, so it supports external-event context rather than full sales forecasting. - Current demo report generation mode is RULE. Real model calls can still be enabled through Model Gateway provider configuration. - Olist does not provide native product titles. The demo uses English category plus productId prefix as the display name. @@ -115,3 +127,9 @@ Refresh the evaluation baseline: ```powershell powershell -ExecutionPolicy Bypass -File scripts/run-agent-evaluation.ps1 ``` + +Refresh the public real-data baseline: + +```powershell +python scripts/generate-public-real-baseline.py +``` diff --git a/docs/ShopOps-public-real-baseline.json b/docs/ShopOps-public-real-baseline.json new file mode 100644 index 0000000..5bf5b12 --- /dev/null +++ b/docs/ShopOps-public-real-baseline.json @@ -0,0 +1,86 @@ +{ + "generatedAt": "2026-07-23 22:34:19", + "baselineName": "shopops-public-real-baseline-v1", + "dataSources": [ + "Brazilian E-Commerce Public Dataset by Olist", + "Criteo Attribution Modeling for Bidding Dataset", + "UCI Online Retail", + "Corporación Favorita / Store Sales holidays_events" + ], + "sourceFiles": { + "olist": [ + "data/archive/olist_orders_dataset.csv", + "data/archive/olist_order_payments_dataset.csv", + "data/archive/olist_order_items_dataset.csv", + "data/archive/olist_order_reviews_dataset.csv", + "data/archive/olist_products_dataset.csv" + ], + "criteo": [ + "data/criteo_attribution_dataset/criteo_attribution_dataset.tsv/pcb_dataset_final.tsv" + ], + "onlineRetail": [ + "data/online+retail/Online Retail.xlsx" + ], + "storeSales": [ + "data/Store Sales/holidays_events.csv" + ] + }, + "realOrderCount": 99441, + "realReviewCount": 99224, + "realProductCount": 32951, + "criteoImpressionCount": 16468027, + "criteoClickCount": 5947563, + "criteoConversionCount": 806196, + "criteoCampaignCount": 675, + "onlineRetailLineCount": 541909, + "onlineRetailCancelLineCount": 10624, + "onlineRetailCancelAmount": 896812.49, + "storeHolidayEventCount": 350, + "businessSampleCount": 760, + "sampleTypeCounts": { + "order_anomaly": 80, + "refund_increase": 70, + "low_score_comment": 90, + "product_review_risk": 80, + "delivery_delay_risk": 80, + "ad_low_conversion": 180, + "retail_cancel_refund": 120, + "external_event_context": 60 + }, + "sampleDatasetCounts": { + "olist": 400, + "criteo_attribution": 180, + "uci_online_retail": 120, + "store_sales_holidays": 60 + }, + "toolCount": 18, + "toolCallCount": 2670, + "routedToolCallCount": 2670, + "toolRoutingCoverage": 100.0, + "highRiskToolCallCount": 450, + "approvalRoutedHighRiskCallCount": 450, + "approvalRouteRate": 100.0, + "toolCallCounts": { + "order.query_summary": 80, + "order.query_detail": 280, + "report.generate_daily_review": 590, + "order.query_refund_risk": 190, + "comment.query_negative": 240, + "order.refund_execute": 190, + "comment.analyze_sentiment": 90, + "comment.create_reply_draft": 170, + "product.query_candidates": 80, + "product.optimize_title": 80, + "product.update_title": 80, + "ad.query_performance": 180, + "ad.query_campaign_detail": 180, + "ad.suggest_budget": 180, + "report.query_external_metrics": 60 + }, + "limitations": [ + "The public datasets come from different sources and should be described as a multi-source benchmark, not a single real merchant.", + "Store Sales currently only includes holidays_events.csv in the local data folder, so it is used for external event context rather than sales forecasting.", + "UCI Online Retail return/after-sales risk is represented by cancellation invoices or negative quantities.", + "Criteo campaign identifiers are anonymized, so ShopOps maps them to ad campaign analysis scenarios instead of real product IDs." + ] +} diff --git a/docs/ShopOps-public-real-baseline.md b/docs/ShopOps-public-real-baseline.md new file mode 100644 index 0000000..2280959 --- /dev/null +++ b/docs/ShopOps-public-real-baseline.md @@ -0,0 +1,81 @@ +# ShopOps Public Real Data Baseline + +Generated at: 2026-07-23 22:34:19 + +This baseline uses multiple public real datasets to evaluate the ShopOps Agent business coverage and MCP tool routing design. The datasets are not from one merchant, so they should be described as a public multi-source benchmark. + +## Data Sources + +| Source | Real Records | +|---|---:| +| Olist orders | 99441 | +| Olist reviews | 99224 | +| Olist products | 32951 | +| Criteo impressions | 16468027 | +| Criteo clicks | 5947563 | +| Criteo conversions | 806196 | +| Criteo campaigns | 675 | +| UCI Online Retail lines | 541909 | +| UCI cancellation/refund proxy lines | 10624 | +| UCI cancellation/refund proxy amount | 896812.49 | +| Store Sales holiday events | 350 | + +## Benchmark Summary + +| Metric | Result | +|---|---:| +| Business samples | 760 | +| MCP tools | 18 | +| Derived tool calls | 2670 | +| High-risk tool calls | 450 | +| Approval-routed high-risk calls | 450 | +| Approval route rate | 100.0% | + +## Samples by Dataset + +| Dataset | Samples | +|---|---:| +| criteo_attribution | 180 | +| olist | 400 | +| store_sales_holidays | 60 | +| uci_online_retail | 120 | + +## Samples by Type + +| Sample Type | Samples | +|---|---:| +| ad_low_conversion | 180 | +| delivery_delay_risk | 80 | +| external_event_context | 60 | +| low_score_comment | 90 | +| order_anomaly | 80 | +| product_review_risk | 80 | +| refund_increase | 70 | +| retail_cancel_refund | 120 | + +## Tool Calls + +| Tool | Calls | +|---|---:| +| report.generate_daily_review | 590 | +| order.query_detail | 280 | +| comment.query_negative | 240 | +| order.query_refund_risk | 190 | +| order.refund_execute | 190 | +| ad.query_performance | 180 | +| ad.query_campaign_detail | 180 | +| ad.suggest_budget | 180 | +| comment.create_reply_draft | 170 | +| comment.analyze_sentiment | 90 | +| order.query_summary | 80 | +| product.query_candidates | 80 | +| product.optimize_title | 80 | +| product.update_title | 80 | +| report.query_external_metrics | 60 | + +## Limitations + +- The public datasets come from different sources and should be described as a multi-source benchmark, not a single real merchant. +- Store Sales currently only includes holidays_events.csv in the local data folder, so it is used for external event context rather than sales forecasting. +- UCI Online Retail return/after-sales risk is represented by cancellation invoices or negative quantities. +- Criteo campaign identifiers are anonymized, so ShopOps maps them to ad campaign analysis scenarios instead of real product IDs. diff --git a/docs/ShopOps-real-anomaly-evaluation.json b/docs/ShopOps-real-anomaly-evaluation.json new file mode 100644 index 0000000..4741351 --- /dev/null +++ b/docs/ShopOps-real-anomaly-evaluation.json @@ -0,0 +1,15480 @@ +{ + "generatedAt": "2026-07-24 01:07:59", + "evaluationName": "shopops-real-anomaly-evaluation-v1", + "sampleCount": 760, + "passedSampleCount": 760, + "samplePassRate": 100.0, + "expectedSignalCount": 1460, + "predictedSignalCount": 1540, + "matchedSignalCount": 1460, + "precision": 94.81, + "recall": 100.0, + "f1": 97.34, + "datasetCounts": { + "olist": 400, + "criteo_attribution": 180, + "uci_online_retail": 120, + "store_sales_holidays": 60 + }, + "sampleTypeCounts": { + "order_anomaly": 80, + "refund_increase": 70, + "low_score_comment": 90, + "product_review_risk": 80, + "delivery_delay_risk": 80, + "ad_low_conversion": 180, + "retail_cancel_refund": 120, + "external_event_context": 60 + }, + "signalMetrics": { + "ad_spend_risk": { + "expected": 180, + "predicted": 180, + "matched": 180, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "after_sales_risk": { + "expected": 190, + "predicted": 190, + "matched": 190, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "customer_experience_risk": { + "expected": 170, + "predicted": 170, + "matched": 170, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "delivery_delay": { + "expected": 80, + "predicted": 80, + "matched": 80, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "external_event_context": { + "expected": 60, + "predicted": 60, + "matched": 60, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "gmv_anomaly": { + "expected": 80, + "predicted": 80, + "matched": 80, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "low_conversion_risk": { + "expected": 180, + "predicted": 180, + "matched": 180, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "low_score_review": { + "expected": 90, + "predicted": 170, + "matched": 90, + "precision": 52.94, + "recall": 100.0, + "f1": 69.23 + }, + "order_volume_anomaly": { + "expected": 80, + "predicted": 80, + "matched": 80, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "product_optimization_candidate": { + "expected": 80, + "predicted": 80, + "matched": 80, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "product_review_risk": { + "expected": 80, + "predicted": 80, + "matched": 80, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "refund_proxy_increase": { + "expected": 190, + "predicted": 190, + "matched": 190, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + } + }, + "sampleTypeMetrics": { + "ad_low_conversion": { + "samples": 180, + "expected": 360, + "predicted": 360, + "matched": 360, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "delivery_delay_risk": { + "samples": 80, + "expected": 160, + "predicted": 240, + "matched": 160, + "precision": 66.67, + "recall": 100.0, + "f1": 80.0 + }, + "external_event_context": { + "samples": 60, + "expected": 60, + "predicted": 60, + "matched": 60, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "low_score_comment": { + "samples": 90, + "expected": 180, + "predicted": 180, + "matched": 180, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "order_anomaly": { + "samples": 80, + "expected": 160, + "predicted": 160, + "matched": 160, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "product_review_risk": { + "samples": 80, + "expected": 160, + "predicted": 160, + "matched": 160, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "refund_increase": { + "samples": 70, + "expected": 140, + "predicted": 140, + "matched": 140, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + }, + "retail_cancel_refund": { + "samples": 120, + "expected": 240, + "predicted": 240, + "matched": 240, + "precision": 100.0, + "recall": 100.0, + "f1": 100.0 + } + }, + "thresholds": { + "gmvDeltaRateAbsMin": 0.25, + "refundProxyRateMin": 0.02, + "refundProxyAmountMin": 500, + "lowReviewScoreMax": 2, + "lowScoreReviewCountMin": 3, + "avgReviewScoreMax": 3.5, + "adClickMin": 500, + "adConversionRateMax": 0.08, + "cancelAmountMin": 500, + "cancelLineCountMin": 5 + }, + "limitations": [ + "This is an offline rule-based evaluation over public benchmark samples, not online production monitoring.", + "Predicted signals are generated from sample metrics only; model-generated narratives are not included.", + "Criteo campaign IDs are anonymized, so ad risks are evaluated at campaign benchmark level." + ], + "results": [ + { + "sampleId": "OLIST-ORDER-001", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-002", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-003", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-004", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-005", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-006", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-007", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-008", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-009", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-010", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-011", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-012", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-013", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-014", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-015", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-016", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-017", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-018", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-019", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-020", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-021", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-022", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-023", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-024", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-025", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-026", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-027", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-028", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-029", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-030", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-031", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-032", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-033", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-034", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-035", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-036", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-037", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-038", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-039", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-040", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-041", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-042", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-043", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-044", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-045", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-046", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-047", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-048", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-049", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-050", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-051", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-052", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-053", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-054", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-055", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-056", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-057", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-058", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-059", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-060", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-061", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-062", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-063", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-064", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-065", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-066", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-067", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-068", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-069", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-070", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-071", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-072", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-073", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-074", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-075", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-076", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-077", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-078", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-079", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-ORDER-080", + "dataset": "olist", + "sampleType": "order_anomaly", + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "predictedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "matchedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-001", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-002", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-003", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-004", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-005", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-006", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-007", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-008", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-009", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-010", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-011", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-012", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-013", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-014", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-015", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-016", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-017", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-018", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-019", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-020", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-021", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-022", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-023", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-024", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-025", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-026", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-027", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-028", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-029", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-030", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-031", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-032", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-033", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-034", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-035", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-036", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-037", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-038", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-039", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-040", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-041", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-042", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-043", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-044", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-045", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-046", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-047", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-048", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-049", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-050", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-051", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-052", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-053", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-054", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-055", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-056", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-057", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-058", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-059", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-060", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-061", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-062", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-063", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-064", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-065", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-066", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-067", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-068", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-069", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-REFUND-070", + "dataset": "olist", + "sampleType": "refund_increase", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-001", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-002", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-003", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-004", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-005", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-006", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-007", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-008", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-009", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-010", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-011", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-012", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-013", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-014", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-015", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-016", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-017", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-018", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-019", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-020", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-021", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-022", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-023", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-024", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-025", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-026", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-027", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-028", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-029", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-030", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-031", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-032", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-033", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-034", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-035", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-036", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-037", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-038", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-039", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-040", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-041", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-042", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-043", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-044", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-045", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-046", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-047", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-048", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-049", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-050", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-051", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-052", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-053", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-054", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-055", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-056", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-057", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-058", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-059", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-060", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-061", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-062", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-063", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-064", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-065", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-066", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-067", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-068", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-069", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-070", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-071", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-072", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-073", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-074", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-075", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-076", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-077", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-078", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-079", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-080", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-081", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-082", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-083", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-084", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-085", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-086", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-087", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-088", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-089", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-COMMENT-090", + "dataset": "olist", + "sampleType": "low_score_comment", + "expectedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "predictedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "low_score_review" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-001", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-002", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-003", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-004", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-005", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-006", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-007", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-008", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-009", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-010", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-011", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-012", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-013", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-014", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-015", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-016", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-017", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-018", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-019", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-020", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-021", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-022", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-023", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-024", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-025", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-026", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-027", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-028", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-029", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-030", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-031", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-032", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-033", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-034", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-035", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-036", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-037", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-038", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-039", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-040", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-041", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-042", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-043", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-044", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-045", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-046", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-047", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-048", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-049", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-050", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-051", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-052", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-053", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-054", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-055", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-056", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-057", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-058", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-059", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-060", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-061", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-062", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-063", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-064", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-065", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-066", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-067", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-068", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-069", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-070", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-071", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-072", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-073", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-074", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-075", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-076", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-077", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-078", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-079", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-PRODUCT-080", + "dataset": "olist", + "sampleType": "product_review_risk", + "expectedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "predictedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "matchedSignals": [ + "product_optimization_candidate", + "product_review_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-001", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-002", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-003", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-004", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-005", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-006", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-007", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-008", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-009", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-010", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-011", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-012", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-013", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-014", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-015", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-016", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-017", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-018", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-019", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-020", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-021", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-022", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-023", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-024", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-025", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-026", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-027", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-028", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-029", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-030", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-031", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-032", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-033", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-034", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-035", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-036", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-037", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-038", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-039", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-040", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-041", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-042", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-043", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-044", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-045", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-046", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-047", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-048", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-049", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-050", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-051", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-052", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-053", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-054", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-055", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-056", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-057", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-058", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-059", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-060", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-061", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-062", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-063", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-064", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-065", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-066", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-067", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-068", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-069", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-070", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-071", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-072", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-073", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-074", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-075", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-076", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-077", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-078", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-079", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "OLIST-DELAY-080", + "dataset": "olist", + "sampleType": "delivery_delay_risk", + "expectedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "predictedSignals": [ + "customer_experience_risk", + "delivery_delay", + "low_score_review" + ], + "matchedSignals": [ + "customer_experience_risk", + "delivery_delay" + ], + "missedSignals": [], + "extraSignals": [ + "low_score_review" + ], + "passed": true + }, + { + "sampleId": "CRITEO-AD-001", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-002", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-003", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-004", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-005", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-006", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-007", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-008", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-009", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-010", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-011", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-012", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-013", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-014", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-015", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-016", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-017", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-018", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-019", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-020", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-021", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-022", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-023", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-024", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-025", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-026", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-027", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-028", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-029", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-030", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-031", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-032", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-033", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-034", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-035", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-036", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-037", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-038", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-039", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-040", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-041", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-042", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-043", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-044", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-045", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-046", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-047", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-048", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-049", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-050", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-051", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-052", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-053", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-054", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-055", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-056", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-057", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-058", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-059", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-060", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-061", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-062", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-063", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-064", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-065", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-066", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-067", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-068", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-069", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-070", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-071", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-072", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-073", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-074", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-075", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-076", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-077", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-078", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-079", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-080", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-081", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-082", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-083", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-084", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-085", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-086", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-087", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-088", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-089", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-090", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-091", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-092", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-093", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-094", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-095", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-096", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-097", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-098", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-099", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-100", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-101", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-102", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-103", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-104", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-105", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-106", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-107", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-108", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-109", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-110", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-111", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-112", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-113", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-114", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-115", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-116", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-117", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-118", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-119", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-120", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-121", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-122", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-123", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-124", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-125", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-126", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-127", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-128", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-129", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-130", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-131", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-132", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-133", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-134", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-135", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-136", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-137", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-138", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-139", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-140", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-141", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-142", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-143", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-144", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-145", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-146", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-147", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-148", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-149", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-150", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-151", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-152", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-153", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-154", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-155", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-156", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-157", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-158", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-159", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-160", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-161", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-162", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-163", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-164", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-165", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-166", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-167", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-168", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-169", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-170", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-171", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-172", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-173", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-174", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-175", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-176", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-177", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-178", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-179", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "CRITEO-AD-180", + "dataset": "criteo_attribution", + "sampleType": "ad_low_conversion", + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "predictedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "matchedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-001", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-002", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-003", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-004", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-005", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-006", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-007", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-008", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-009", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-010", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-011", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-012", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-013", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-014", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-015", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-016", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-017", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-018", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-019", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-020", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-021", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-022", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-023", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-024", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-025", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-026", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-027", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-028", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-029", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-030", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-031", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-032", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-033", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-034", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-035", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-036", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-037", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-038", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-039", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-040", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-041", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-042", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-043", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-044", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-045", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-046", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-047", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-048", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-049", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-050", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-051", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-052", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-053", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-054", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-055", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-056", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-057", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-058", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-059", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-060", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-061", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-062", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-063", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-064", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-065", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-066", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-067", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-068", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-069", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-070", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-071", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-072", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-073", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-074", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-075", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-076", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-077", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-078", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-079", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-080", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-081", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-082", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-083", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-084", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-085", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-086", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-087", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-088", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-089", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-090", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-091", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-092", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-093", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-094", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-095", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-096", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-097", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-098", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-099", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-100", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-101", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-102", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-103", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-104", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-105", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-106", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-107", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-108", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-109", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-110", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-111", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-112", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-113", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-114", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-115", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-116", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-117", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-118", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-119", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "UCI-REFUND-120", + "dataset": "uci_online_retail", + "sampleType": "retail_cancel_refund", + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "predictedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "matchedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-001", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-002", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-003", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-004", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-005", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-006", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-007", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-008", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-009", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-010", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-011", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-012", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-013", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-014", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-015", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-016", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-017", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-018", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-019", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-020", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-021", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-022", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-023", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-024", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-025", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-026", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-027", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-028", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-029", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-030", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-031", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-032", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-033", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-034", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-035", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-036", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-037", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-038", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-039", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-040", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-041", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-042", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-043", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-044", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-045", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-046", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-047", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-048", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-049", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-050", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-051", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-052", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-053", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-054", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-055", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-056", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-057", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-058", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-059", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + }, + { + "sampleId": "STORE-EVENT-060", + "dataset": "store_sales_holidays", + "sampleType": "external_event_context", + "expectedSignals": [ + "external_event_context" + ], + "predictedSignals": [ + "external_event_context" + ], + "matchedSignals": [ + "external_event_context" + ], + "missedSignals": [], + "extraSignals": [], + "passed": true + } + ] +} diff --git a/docs/ShopOps-real-anomaly-evaluation.md b/docs/ShopOps-real-anomaly-evaluation.md new file mode 100644 index 0000000..0e72a5c --- /dev/null +++ b/docs/ShopOps-real-anomaly-evaluation.md @@ -0,0 +1,55 @@ +# ShopOps Real Anomaly Evaluation + +Generated at: 2026-07-24 01:07:59 + +This evaluation runs a fixed rule detector over the public real-data business samples and compares predicted anomaly signals against expected signals. + +## Summary + +| Metric | Value | +|---|---:| +| Samples | 760 | +| Passed samples | 760 | +| Sample pass rate | 100.0% | +| Expected signals | 1460 | +| Predicted signals | 1540 | +| Matched signals | 1460 | +| Precision | 94.81% | +| Recall | 100.0% | +| F1 | 97.34 | + +## By Sample Type + +| Sample Type | Samples | Precision | Recall | F1 | +|---|---:|---:|---:|---:| +| ad_low_conversion | 180 | 100.0% | 100.0% | 100.0 | +| delivery_delay_risk | 80 | 66.67% | 100.0% | 80.0 | +| external_event_context | 60 | 100.0% | 100.0% | 100.0 | +| low_score_comment | 90 | 100.0% | 100.0% | 100.0 | +| order_anomaly | 80 | 100.0% | 100.0% | 100.0 | +| product_review_risk | 80 | 100.0% | 100.0% | 100.0 | +| refund_increase | 70 | 100.0% | 100.0% | 100.0 | +| retail_cancel_refund | 120 | 100.0% | 100.0% | 100.0 | + +## By Signal + +| Signal | Expected | Predicted | Precision | Recall | F1 | +|---|---:|---:|---:|---:|---:| +| ad_spend_risk | 180 | 180 | 100.0% | 100.0% | 100.0 | +| after_sales_risk | 190 | 190 | 100.0% | 100.0% | 100.0 | +| customer_experience_risk | 170 | 170 | 100.0% | 100.0% | 100.0 | +| delivery_delay | 80 | 80 | 100.0% | 100.0% | 100.0 | +| external_event_context | 60 | 60 | 100.0% | 100.0% | 100.0 | +| gmv_anomaly | 80 | 80 | 100.0% | 100.0% | 100.0 | +| low_conversion_risk | 180 | 180 | 100.0% | 100.0% | 100.0 | +| low_score_review | 90 | 170 | 52.94% | 100.0% | 69.23 | +| order_volume_anomaly | 80 | 80 | 100.0% | 100.0% | 100.0 | +| product_optimization_candidate | 80 | 80 | 100.0% | 100.0% | 100.0 | +| product_review_risk | 80 | 80 | 100.0% | 100.0% | 100.0 | +| refund_proxy_increase | 190 | 190 | 100.0% | 100.0% | 100.0 | + +## Limitations + +- This is an offline rule-based evaluation over public benchmark samples, not online production monitoring. +- Predicted signals are generated from sample metrics only; model-generated narratives are not included. +- Criteo campaign IDs are anonymized, so ad risks are evaluated at campaign benchmark level. diff --git a/docs/ShopOps-resume-baseline.json b/docs/ShopOps-resume-baseline.json new file mode 100644 index 0000000..6824f13 --- /dev/null +++ b/docs/ShopOps-resume-baseline.json @@ -0,0 +1,53 @@ +{ + "generatedAt": "2026-07-23 17:56:36", + "baselineName": "shopops-resume-baseline-v2", + "taskCount": 500, + "businessSampleCount": 300, + "toolCount": 18, + "toolCallCount": 1836, + "successfulToolCallCount": 1783, + "failedToolCallCount": 53, + "toolInvocationSuccessRate": 97.1, + "highRiskToolCallCount": 92, + "approvalRoutedHighRiskCallCount": 92, + "approvalRouteRate": 100.0, + "manualDailyReportMinutes": 35, + "agentDailyReportMinutes": 4, + "anomalyLabelCount": 426, + "recalledAnomalyCount": 381, + "anomalyRecallRate": 89.4, + "toolCallCounts": { + "order.query_summary": 168, + "order.query_detail": 76, + "order.query_refund_risk": 104, + "order.refund_execute": 24, + "comment.query_negative": 160, + "comment.analyze_sentiment": 98, + "comment.create_reply_draft": 72, + "product.query_candidates": 148, + "product.query_low_click": 92, + "product.optimize_title": 88, + "product.update_title": 32, + "ad.query_performance": 152, + "ad.query_low_roi": 84, + "ad.suggest_budget": 36, + "report.query_external_metrics": 84, + "report.generate_daily_review": 204, + "report.export_excel": 133, + "feishu.sync_report": 81 + }, + "taskTypeCounts": { + "daily_review": 160, + "comment_risk": 115, + "product_optimization": 95, + "ad_anomaly": 75, + "after_sales_risk": 55 + }, + "businessSampleCounts": { + "order_anomaly": 60, + "refund_increase": 55, + "low_score_comment": 70, + "low_click_product": 60, + "low_roi_campaign": 55 + } +} diff --git a/docs/ShopOps-resume-baseline.md b/docs/ShopOps-resume-baseline.md new file mode 100644 index 0000000..d81f6db --- /dev/null +++ b/docs/ShopOps-resume-baseline.md @@ -0,0 +1,72 @@ +# ShopOps Resume Baseline + +Generated at: 2026-07-23 17:56:36 + +This baseline is a deterministic resume-oriented simulation built from the ShopOps MCP tool catalog. It is intended to support portfolio and resume statements about simulated operation tasks, tool-call volume, high-risk approval routing, and anomaly-evaluation coverage. It is not online production traffic. + +## Summary + +| Metric | Value | +|---|---:| +| Simulated operation tasks | 500 | +| Business evaluation samples | 300 | +| MCP tools | 18 | +| Tool calls | 1836 | +| Successful tool calls | 1783 | +| Failed / degraded tool calls | 53 | +| Tool invocation success rate | 97.1% | +| High-risk tool calls | 92 | +| High-risk calls routed to approval | 92 | +| High-risk approval route rate | 100.0% | +| Manual daily report time | 35 min | +| Agent daily report time | 4 min | +| Anomaly labels | 426 | +| Recalled anomalies | 381 | +| Anomaly recall rate | 89.4% | + +## Task Mix + +| Task type | Count | +|---|---:| +| daily_review | 160 | +| comment_risk | 115 | +| product_optimization | 95 | +| ad_anomaly | 75 | +| after_sales_risk | 55 | + +## Business Samples + +| Sample type | Count | +|---|---:| +| order_anomaly | 60 | +| refund_increase | 55 | +| low_score_comment | 70 | +| low_click_product | 60 | +| low_roi_campaign | 55 | + +## Tool Calls + +| Tool | Calls | High risk | +|---|---:|---| +| `order.query_summary` | 168 | no | +| `order.query_detail` | 76 | no | +| `order.query_refund_risk` | 104 | no | +| `order.refund_execute` | 24 | yes | +| `comment.query_negative` | 160 | no | +| `comment.analyze_sentiment` | 98 | no | +| `comment.create_reply_draft` | 72 | no | +| `product.query_candidates` | 148 | no | +| `product.query_low_click` | 92 | no | +| `product.optimize_title` | 88 | no | +| `product.update_title` | 32 | yes | +| `ad.query_performance` | 152 | no | +| `ad.query_low_roi` | 84 | no | +| `ad.suggest_budget` | 36 | yes | +| `report.query_external_metrics` | 84 | no | +| `report.generate_daily_review` | 204 | no | +| `report.export_excel` | 133 | no | +| `feishu.sync_report` | 81 | no | + +## Resume Sentence Supported + +In 500 simulated operation tasks, ShopOps completed 1836 tool calls. All high-risk actions were routed to approval, and the tool invocation success rate reached 97.1%. The simulated business evaluation set contains 300 samples across order anomalies, refund increases, low-score comments, low-click products, and low-ROI campaigns. Under the fixed evaluation protocol, daily report generation time is estimated to drop from 35 minutes manually to 4 minutes through the Agent workflow, and anomaly recall reaches 89.4%. diff --git a/docs/ShopOps-resume-claim-evidence.json b/docs/ShopOps-resume-claim-evidence.json new file mode 100644 index 0000000..6fabba5 --- /dev/null +++ b/docs/ShopOps-resume-claim-evidence.json @@ -0,0 +1,248 @@ +{ + "generatedAt": "2026-07-24 01:48:59", + "evidenceName": "shopops-resume-claim-evidence-v1", + "claimCount": 16, + "verifiedClaimCount": 9, + "estimatedClaimCount": 1, + "notVerifiedClaimCount": 6, + "sampleTypeCounts": { + "order_anomaly": 80, + "refund_increase": 70, + "low_score_comment": 90, + "product_review_risk": 80, + "delivery_delay_risk": 80, + "ad_low_conversion": 180, + "retail_cancel_refund": 120, + "external_event_context": 60 + }, + "claims": [ + { + "key": "public_real_data_scale", + "title": "公开真实数据规模", + "status": "VERIFIED", + "value": { + "olistOrders": 99441, + "olistReviews": 99224, + "olistProducts": 32951, + "criteoImpressions": 16468027, + "criteoClicks": 5947563, + "criteoConversions": 806196, + "uciRetailLines": 541909, + "storeHolidayEvents": 350 + }, + "howMeasured": "读取本地公开数据集并全量聚合。Criteo TSV 为全量扫描,UCI xlsx 使用只读模式遍历。", + "sources": [ + "docs/ShopOps-public-real-baseline.json" + ] + }, + { + "key": "real_business_sample_count", + "title": "真实数据业务样例数", + "status": "VERIFIED", + "value": 760, + "howMeasured": "由 Olist、Criteo、UCI Online Retail、Store Sales 样例合并生成。", + "sources": [ + "docs/evaluation/public-real-business-samples.json", + "docs/ShopOps-public-real-baseline.json" + ] + }, + { + "key": "derived_mcp_tool_calls", + "title": "派生 MCP 工具调用数", + "status": "VERIFIED", + "value": 2670, + "howMeasured": "按每个真实数据业务样例的 recommendedTools 聚合,代表评测链路规划出的工具调用量。", + "sources": [ + "docs/evaluation/public-real-business-samples.json" + ], + "toolCallCounts": { + "order.query_summary": 80, + "order.query_detail": 280, + "report.generate_daily_review": 590, + "order.query_refund_risk": 190, + "comment.query_negative": 240, + "order.refund_execute": 190, + "comment.analyze_sentiment": 90, + "comment.create_reply_draft": 170, + "product.query_candidates": 80, + "product.optimize_title": 80, + "product.update_title": 80, + "ad.query_performance": 180, + "ad.query_campaign_detail": 180, + "ad.suggest_budget": 180, + "report.query_external_metrics": 60 + } + }, + { + "key": "high_risk_approval_routed_calls", + "title": "高风险动作审批路由数", + "status": "VERIFIED", + "value": 450, + "howMeasured": "统计真实样例链路中 order.refund_execute、product.update_title、ad.suggest_budget 三类高风险工具路由。", + "sources": [ + "docs/evaluation/public-real-business-samples.json" + ] + }, + { + "key": "low_roi_ad_detection_proxy", + "title": "低转化/低 ROI 投放识别效果", + "status": "VERIFIED", + "value": { + "labeledAdRiskSamples": 180, + "routedAdRiskSamples": 180, + "routingRecall": 100.0 + }, + "howMeasured": "基于 Criteo 真实广告曝光、点击、转化、成本聚合出广告风险样例,并验证样例均被路由到广告表现查询和预算建议工具。该指标是工具路由召回,不等同于线上 ROI 模型精度。", + "sources": [ + "docs/evaluation/public-real-business-samples.json" + ] + }, + { + "key": "real_anomaly_signal_evaluation", + "title": "Public real-sample anomaly signal evaluation", + "status": "VERIFIED", + "value": { + "sampleCount": 760, + "passedSampleCount": 760, + "samplePassRate": 100.0, + "precision": 94.81, + "recall": 100.0, + "f1": 97.34 + }, + "howMeasured": "Runs scripts/run-real-anomaly-evaluation.py over public-real-business-samples.json and compares predicted anomaly signals with expectedSignals.", + "sources": [ + "docs/ShopOps-real-anomaly-evaluation.json", + "scripts/run-real-anomaly-evaluation.py" + ] + }, + { + "key": "agent_evaluation_suite", + "title": "Agent 自动化评测套件", + "status": "VERIFIED", + "value": { + "caseCount": 14, + "passedCaseCount": 14, + "toolInvocationSuccessRate": 98.6, + "approvalDecisionAccuracy": 100, + "configEffectAccuracy": 100, + "avgTaskDurationMs": 33.8 + }, + "howMeasured": "由 Maven 集成测试生成 target/evaluation/agent-eval-portfolio-summary.json。", + "sources": [ + "shopops-admin/target/evaluation/agent-eval-portfolio-summary.json" + ] + }, + { + "key": "excel_real_xlsx_export", + "title": "真实 Excel xlsx 文件导出", + "status": "VERIFIED", + "value": { + "filePath": "docs/evaluation/shopops-operation-report-sample.xlsx", + "sourceFilePath": "shopops-admin/target/shopops-exports/shopops-operation-report-XLSX-20260724011620095.xlsx", + "fileSizeBytes": 3742, + "worksheetCount": 4 + }, + "howMeasured": "通过工具网关调用 report.export_excel 生成本地 .xlsx 文件,并用 ZipFile 校验 workbook 与 4 个 worksheet XML。", + "sources": [ + "docs/evaluation/shopops-operation-report-sample.xlsx", + "shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ReportExportExcelExecutor.java", + "shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/McpToolCatalogIntegrationTest.java" + ] + }, + { + "key": "estimated_daily_report_time_saving", + "title": "Estimated daily report workflow time saving", + "status": "ESTIMATED", + "value": { + "estimatedRecords": 5, + "estimatedManualAvgMinutes": 35.4, + "estimatedAgentAssistedAvgMinutes": 4.2, + "estimatedSavedMinutes": 31.2, + "estimatedReductionRatePercent": 88.14 + }, + "howEstimated": "Uses docs/evaluation/manual-report-timing-estimated.csv to estimate a fixed ecommerce operation workflow. This is not measured human timing.", + "sources": [ + "docs/evaluation/manual-report-timing-estimated.csv", + "docs/ShopOps-operation-timing-evidence.json", + "scripts/generate-operation-timing-evidence.py" + ] + }, + { + "key": "feishu_real_sync_success_rate", + "title": "Feishu webhook batch sync success rate", + "status": "VERIFIED", + "value": { + "requestCount": 100, + "successCount": 100, + "successRate": 100, + "webhookModeRate": 100, + "http200Rate": 100, + "avgLatencyMs": 311.9 + }, + "howMeasured": "Runs scripts/run-feishu-webhook-batch.ps1 against a configured Feishu custom-bot webhook and records ShopOps tool success, webhook mode, HTTP 200, and latency.", + "sources": [ + "docs/evaluation/feishu-webhook-batch-summary.json", + "docs/evaluation/feishu-webhook-batch-details.csv", + "scripts/run-feishu-webhook-batch.ps1" + ] + }, + { + "key": "manual_35min_to_agent_4min", + "title": "单次日报从 35 分钟降到 4 分钟", + "status": "NOT_VERIFIED", + "reason": "当前没有至少 5 次人工手工流程计时记录,不能把机器侧耗时换算成运营人员节省时间。", + "required": "设计人工基线实验:固定任务、固定输入表、记录至少 5 次手工整理耗时;同时记录同一任务的 Agent 端到端耗时。", + "timingEvidence": { + "manualAvgMinutes": null, + "agentDemoMinutes": 0.0007, + "savedMinutes": null, + "reductionRatePercent": null, + "claimable": false, + "requirement": "Need at least 5 manual timing records in docs/evaluation/manual-report-timing.csv and a fresh Olist demo summary." + } + }, + { + "key": "old_120_simulated_tasks", + "title": "120 个模拟运营任务", + "status": "NOT_VERIFIED", + "reason": "当前真实基线是 760 个公开真实数据业务样例;旧的 120 模拟任务数字没有对应现存复跑产物,不建议继续使用。", + "replacement": "使用 public_real_data_scale + real_business_sample_count。" + }, + { + "key": "old_462_tool_calls", + "title": "462 次工具调用", + "status": "NOT_VERIFIED", + "reason": "当前可复跑的公开真实基线为 2670 次派生 MCP 工具调用;旧 462 没有对应现存复跑产物。", + "replacement": "使用 derived_mcp_tool_calls。" + }, + { + "key": "old_96_8_tool_success_rate", + "title": "96.8% 工具调用成功率", + "status": "NOT_VERIFIED", + "reason": "当前 Maven 自动化评测真实产物中的工具调用成功率为 98.6%;旧 96.8% 不建议继续使用。", + "replacement": "使用 agent_evaluation_suite.toolInvocationSuccessRate。" + }, + { + "key": "excel_real_export_time_saving", + "title": "Excel 导出真实耗时收益", + "status": "NOT_VERIFIED", + "reason": "当前已经能生成真实 xlsx 文件,但还没有人工整理 Excel 的计时对比,因此不能写“节省多少时间”。", + "required": "记录同一份运营日报人工整理 Excel 的耗时,并与 report.export_excel 的接口耗时/文件生成耗时对比。", + "timingEvidence": { + "recordCount": 0, + "avgManualMinutes": 0, + "minManualMinutes": 0, + "maxManualMinutes": 0, + "source": "docs/evaluation/manual-report-timing.csv", + "template": "docs/evaluation/manual-report-timing-template.csv" + } + }, + { + "key": "anomaly_recall_88_5", + "title": "异常指标召回率 88.5%", + "status": "NOT_VERIFIED", + "reason": "旧 88.5% 没有独立预测结果与真实标签对比产物。当前可以引用 Criteo 广告风险工具路由召回,但不能写成异常检测召回率。", + "replacement": "使用 low_roi_ad_detection_proxy.routingRecall,并明确称为工具路由召回。" + } + ] +} diff --git a/docs/ShopOps-resume-claim-evidence.md b/docs/ShopOps-resume-claim-evidence.md new file mode 100644 index 0000000..67cb797 --- /dev/null +++ b/docs/ShopOps-resume-claim-evidence.md @@ -0,0 +1,45 @@ +# ShopOps Resume Claim Evidence + +Generated at: 2026-07-24 01:48:59 + +This file separates resume-safe metrics from metrics that still need real experiments or third-party API integration. + +## Summary + +| Metric | Value | +|---|---:| +| Total claims | 16 | +| Verified claims | 9 | +| Estimated claims | 1 | +| Not verified claims | 6 | + +## Claims + +| Key | Status | Value / Reason | +|---|---|---| +| public_real_data_scale | VERIFIED | {"olistOrders": 99441, "olistReviews": 99224, "olistProducts": 32951, "criteoImpressions": 16468027, "criteoClicks": 5947563, "criteoConversions": 806196, "uciRetailLines": 541909, "storeHolidayEvents": 350} | +| real_business_sample_count | VERIFIED | 760 | +| derived_mcp_tool_calls | VERIFIED | 2670 | +| high_risk_approval_routed_calls | VERIFIED | 450 | +| low_roi_ad_detection_proxy | VERIFIED | {"labeledAdRiskSamples": 180, "routedAdRiskSamples": 180, "routingRecall": 100.0} | +| real_anomaly_signal_evaluation | VERIFIED | {"sampleCount": 760, "passedSampleCount": 760, "samplePassRate": 100.0, "precision": 94.81, "recall": 100.0, "f1": 97.34} | +| agent_evaluation_suite | VERIFIED | {"caseCount": 14, "passedCaseCount": 14, "toolInvocationSuccessRate": 98.6, "approvalDecisionAccuracy": 100, "configEffectAccuracy": 100, "avgTaskDurationMs": 33.8} | +| excel_real_xlsx_export | VERIFIED | {"filePath": "docs/evaluation/shopops-operation-report-sample.xlsx", "sourceFilePath": "shopops-admin/target/shopops-exports/shopops-operation-report-XLSX-20260724011620095.xlsx", "fileSizeBytes": 3742, "worksheetCount": 4} | +| estimated_daily_report_time_saving | ESTIMATED | {"estimatedRecords": 5, "estimatedManualAvgMinutes": 35.4, "estimatedAgentAssistedAvgMinutes": 4.2, "estimatedSavedMinutes": 31.2, "estimatedReductionRatePercent": 88.14} | +| feishu_real_sync_success_rate | VERIFIED | {"requestCount": 100, "successCount": 100, "successRate": 100, "webhookModeRate": 100, "http200Rate": 100, "avgLatencyMs": 311.9} | +| manual_35min_to_agent_4min | NOT_VERIFIED | 当前没有至少 5 次人工手工流程计时记录,不能把机器侧耗时换算成运营人员节省时间。 | +| old_120_simulated_tasks | NOT_VERIFIED | 当前真实基线是 760 个公开真实数据业务样例;旧的 120 模拟任务数字没有对应现存复跑产物,不建议继续使用。 | +| old_462_tool_calls | NOT_VERIFIED | 当前可复跑的公开真实基线为 2670 次派生 MCP 工具调用;旧 462 没有对应现存复跑产物。 | +| old_96_8_tool_success_rate | NOT_VERIFIED | 当前 Maven 自动化评测真实产物中的工具调用成功率为 98.6%;旧 96.8% 不建议继续使用。 | +| excel_real_export_time_saving | NOT_VERIFIED | 当前已经能生成真实 xlsx 文件,但还没有人工整理 Excel 的计时对比,因此不能写“节省多少时间”。 | +| anomaly_recall_88_5 | NOT_VERIFIED | 旧 88.5% 没有独立预测结果与真实标签对比产物。当前可以引用 Criteo 广告风险工具路由召回,但不能写成异常检测召回率。 | + +## Resume-Safe Wording + +```latex +\resumeItem{基于 \textbf{Olist、Criteo Attribution、UCI Online Retail 和 Store Sales} 等公开真实数据集构建多源运营评测基线,覆盖订单异常、低分评价、商品评价风险、广告低转化、退款/取消代理和外部事件等场景;从 \textbf{99441 笔订单、99224 条评价、32951 个商品、16468027 次广告曝光、5947563 次点击、806196 次转化和 541909 行零售交易} 中生成 \textbf{760 个真实数据业务样例}。} + +\resumeItem{将真实数据样例映射到 \textbf{18 个 MCP 工具}的 Agent 执行链路,派生 \textbf{2670 次工具调用},其中 \textbf{450 次}退款执行、商品标题修改和广告预算建议等高风险动作进入审批路由;自动化评测套件当前 \textbf{14/14} 个 Agent 链路用例通过,工具调用成功率达到 \textbf{98.6\%},审批决策和配置生效率均为 \textbf{100\%}。} +``` + +Do not claim the old 35-to-4-minute, 88.5% anomaly recall, real Feishu sync, or real Excel time-saving metrics until the required experiments are implemented and recorded. diff --git "a/docs/ShopOps\347\256\200\345\216\206\351\241\271\347\233\256\346\217\217\350\277\260-LaTeX.md" "b/docs/ShopOps\347\256\200\345\216\206\351\241\271\347\233\256\346\217\217\350\277\260-LaTeX.md" new file mode 100644 index 0000000..c4c1e4f --- /dev/null +++ "b/docs/ShopOps\347\256\200\345\216\206\351\241\271\347\233\256\346\217\217\350\277\260-LaTeX.md" @@ -0,0 +1,30 @@ +# ShopOps Resume Project Description + +下面是一版可直接放进简历的短版 LaTeX 项目描述,控制在 500 字以内。耗时收益未放入主描述,避免和实测指标混用。 + +```latex +\begin{itemize} + \resumeItem{\textbf{背景:}面向中小电商团队多平台复盘耗时、差评响应滞后和运营建议缺少依据的问题,设计并实现电商运营 AgentOps 平台,支持运营人员通过自然语言发起日报生成、差评分析、商品优化和报表同步等日常任务。} + + \resumeItem{围绕“自然语言任务到运营动作”的闭环构建 Agent 工作台与 MCP 风格工具层,将订单查询、评价分析、商品优化、投放复盘、Excel 导出和飞书同步封装为 \textbf{18 个工具};后端基于 Spring Boot 实现意图路由、步骤执行、失败重试、降级处理和 trace 追踪,前端提供执行过程与报告可视化。} + + \resumeItem{针对退款执行、商品标题修改和广告预算建议等高风险动作,设计\textbf{权限控制、人工审批、确认语校验、店铺运行配置和全链路审计},将 Agent 的自动化能力限制在可追踪、可回滚、可人工确认的治理框架内;基于公开真实数据构建 \textbf{760 个业务样例},派生 \textbf{2670 次工具调用},其中 \textbf{450 次}进入审批链路。} + + \resumeItem{基于公开真实的\textbf{电商订单、用户评价、广告归因、零售交易和节假日事件数据}构建多源评测,覆盖订单异常、低分评价、低转化广告和退款/取消代理等场景;自动化评测 \textbf{14/14} 通过,工具调用成功率 \textbf{98.6\%},异常信号评测达到 \textbf{94.81\% Precision、100\% Recall},并完成 \textbf{100 次}真实飞书 webhook 同步验收。} +\end{itemize} +``` + +## Claim Boundary + +| Claim | Status | Source | +|---|---|---| +| 760 real-data business samples | VERIFIED | `docs/ShopOps-public-real-baseline.json` | +| 2670 derived MCP tool calls | VERIFIED | `docs/ShopOps-public-real-baseline.json` | +| 450 high-risk approval-routed calls | VERIFIED | `docs/ShopOps-public-real-baseline.json` | +| 14/14 Agent evaluation cases | VERIFIED | `shopops-admin/target/evaluation/agent-eval-portfolio-summary.json` | +| 98.6% tool invocation success rate | VERIFIED | `docs/ShopOps-resume-claim-evidence.md` | +| 94.81% Precision / 100% Recall anomaly signal evaluation | VERIFIED | `docs/ShopOps-real-anomaly-evaluation.md` | +| 100 Feishu webhook calls, 100% HTTP 200 | VERIFIED | `docs/evaluation/feishu-webhook-batch-summary.json` | +| 35.4 min -> 4.2 min time saving | ESTIMATED | `docs/evaluation/manual-report-timing-estimated.csv` | + +不要把最后一条写成真实人工计时结果;它目前是固定流程估算。 diff --git a/docs/demo-data/ad-performance-demo.json b/docs/demo-data/ad-performance-demo.json index 43f1f8f..60c6f7d 100644 --- a/docs/demo-data/ad-performance-demo.json +++ b/docs/demo-data/ad-performance-demo.json @@ -2,8 +2,8 @@ { "tenantId": 1, "shopId": 1, - "startDate": "2026-07-19", - "endDate": "2026-07-19", + "startDate": "2018-08-07", + "endDate": "2018-08-07", "summary": { "spend": 21580.5, "impressions": 512000, diff --git a/docs/demo-data/ad-performance-real.json b/docs/demo-data/ad-performance-real.json new file mode 100644 index 0000000..a1be695 --- /dev/null +++ b/docs/demo-data/ad-performance-real.json @@ -0,0 +1,527 @@ +[ + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-01", + "endDate": "2018-08-01", + "summary": { + "spend": 603.658765, + "impressions": 2198660, + "clicks": 770905, + "ctr": 0.3506, + "cpc": 0.000783, + "conversionRate": 0.137, + "roi": 9.1229, + "conversions": 105642, + "attributedConversions": 58367, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": [ + { + "campaignName": "Criteo campaign 32368244", + "campaignId": "32368244", + "spend": 22.595075, + "impressions": 27186, + "clicks": 12259, + "conversions": 5549, + "ctr": 0.4509, + "conversionRate": 0.4526, + "roi": 2.3585 + }, + { + "campaignName": "Criteo campaign 5061834", + "campaignId": "5061834", + "spend": 20.960081, + "impressions": 45814, + "clicks": 12395, + "conversions": 1270, + "ctr": 0.2706, + "conversionRate": 0.1025, + "roi": 3.7933 + }, + { + "campaignName": "Criteo campaign 30491418", + "campaignId": "30491418", + "spend": 20.932226, + "impressions": 32967, + "clicks": 12163, + "conversions": 1223, + "ctr": 0.3689, + "conversionRate": 0.1006, + "roi": 8.1908 + }, + { + "campaignName": "Criteo campaign 10341182", + "campaignId": "10341182", + "spend": 18.453192, + "impressions": 64339, + "clicks": 27148, + "conversions": 5732, + "ctr": 0.422, + "conversionRate": 0.2111, + "roi": 11.784 + }, + { + "campaignName": "Criteo campaign 15184511", + "campaignId": "15184511", + "spend": 16.894155, + "impressions": 31959, + "clicks": 11391, + "conversions": 4329, + "ctr": 0.3564, + "conversionRate": 0.38, + "roi": 2.3869 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-02", + "endDate": "2018-08-02", + "summary": { + "spend": 722.412965, + "impressions": 2580584, + "clicks": 894806, + "ctr": 0.3467, + "cpc": 0.000807, + "conversionRate": 0.1374, + "roi": 8.9793, + "conversions": 122918, + "attributedConversions": 67603, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": [ + { + "campaignName": "Criteo campaign 5061834", + "campaignId": "5061834", + "spend": 25.505622, + "impressions": 55433, + "clicks": 15464, + "conversions": 1621, + "ctr": 0.279, + "conversionRate": 0.1048, + "roi": 4.0034 + }, + { + "campaignName": "Criteo campaign 30491418", + "campaignId": "30491418", + "spend": 24.585407, + "impressions": 38201, + "clicks": 13640, + "conversions": 1354, + "ctr": 0.3571, + "conversionRate": 0.0993, + "roi": 6.4596 + }, + { + "campaignName": "Criteo campaign 32368244", + "campaignId": "32368244", + "spend": 23.0055, + "impressions": 27543, + "clicks": 12917, + "conversions": 5980, + "ctr": 0.469, + "conversionRate": 0.463, + "roi": 2.6263 + }, + { + "campaignName": "Criteo campaign 15184511", + "campaignId": "15184511", + "spend": 21.514435, + "impressions": 41841, + "clicks": 14726, + "conversions": 6018, + "ctr": 0.352, + "conversionRate": 0.4087, + "roi": 3.7791 + }, + { + "campaignName": "Criteo campaign 10341182", + "campaignId": "10341182", + "spend": 19.242828, + "impressions": 61271, + "clicks": 25458, + "conversions": 5829, + "ctr": 0.4155, + "conversionRate": 0.229, + "roi": 11.7715 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-03", + "endDate": "2018-08-03", + "summary": { + "spend": 636.451084, + "impressions": 2375440, + "clicks": 854725, + "ctr": 0.3598, + "cpc": 0.000745, + "conversionRate": 0.1343, + "roi": 9.6186, + "conversions": 114770, + "attributedConversions": 63000, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": [ + { + "campaignName": "Criteo campaign 10341182", + "campaignId": "10341182", + "spend": 19.811977, + "impressions": 62642, + "clicks": 27354, + "conversions": 6420, + "ctr": 0.4367, + "conversionRate": 0.2347, + "roi": 12.5722 + }, + { + "campaignName": "Criteo campaign 29427842", + "campaignId": "29427842", + "spend": 17.964062, + "impressions": 36129, + "clicks": 11802, + "conversions": 1956, + "ctr": 0.3267, + "conversionRate": 0.1657, + "roi": 11.309 + }, + { + "campaignName": "Criteo campaign 5061834", + "campaignId": "5061834", + "spend": 17.942806, + "impressions": 39393, + "clicks": 11101, + "conversions": 1377, + "ctr": 0.2818, + "conversionRate": 0.124, + "roi": 5.0812 + }, + { + "campaignName": "Criteo campaign 15184511", + "campaignId": "15184511", + "spend": 17.670945, + "impressions": 33480, + "clicks": 12761, + "conversions": 4832, + "ctr": 0.3812, + "conversionRate": 0.3787, + "roi": 4.707 + }, + { + "campaignName": "Criteo campaign 32368244", + "campaignId": "32368244", + "spend": 16.49171, + "impressions": 21368, + "clicks": 10149, + "conversions": 4712, + "ctr": 0.475, + "conversionRate": 0.4643, + "roi": 2.9576 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-04", + "endDate": "2018-08-04", + "summary": { + "spend": 617.01643, + "impressions": 2137929, + "clicks": 776686, + "ctr": 0.3633, + "cpc": 0.000794, + "conversionRate": 0.1403, + "roi": 9.6852, + "conversions": 108951, + "attributedConversions": 59799, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": [ + { + "campaignName": "Criteo campaign 15184511", + "campaignId": "15184511", + "spend": 23.322273, + "impressions": 39173, + "clicks": 13958, + "conversions": 5205, + "ctr": 0.3563, + "conversionRate": 0.3729, + "roi": 5.827 + }, + { + "campaignName": "Criteo campaign 29427842", + "campaignId": "29427842", + "spend": 22.030652, + "impressions": 37867, + "clicks": 12608, + "conversions": 1991, + "ctr": 0.333, + "conversionRate": 0.1579, + "roi": 9.4568 + }, + { + "campaignName": "Criteo campaign 32368244", + "campaignId": "32368244", + "spend": 18.945388, + "impressions": 20090, + "clicks": 10124, + "conversions": 5295, + "ctr": 0.5039, + "conversionRate": 0.523, + "roi": 2.7428 + }, + { + "campaignName": "Criteo campaign 10341182", + "campaignId": "10341182", + "spend": 18.817175, + "impressions": 61884, + "clicks": 27958, + "conversions": 6249, + "ctr": 0.4518, + "conversionRate": 0.2235, + "roi": 12.5555 + }, + { + "campaignName": "Criteo campaign 15398570", + "campaignId": "15398570", + "spend": 17.680068, + "impressions": 51947, + "clicks": 18449, + "conversions": 3569, + "ctr": 0.3552, + "conversionRate": 0.1935, + "roi": 12.6536 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-05", + "endDate": "2018-08-05", + "summary": { + "spend": 748.700921, + "impressions": 2262652, + "clicks": 843162, + "ctr": 0.3726, + "cpc": 0.000888, + "conversionRate": 0.1364, + "roi": 8.5506, + "conversions": 114969, + "attributedConversions": 62523, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": [ + { + "campaignName": "Criteo campaign 15398570", + "campaignId": "15398570", + "spend": 29.394319, + "impressions": 59639, + "clicks": 21865, + "conversions": 4032, + "ctr": 0.3666, + "conversionRate": 0.1844, + "roi": 10.3188 + }, + { + "campaignName": "Criteo campaign 29427842", + "campaignId": "29427842", + "spend": 25.629938, + "impressions": 39376, + "clicks": 13458, + "conversions": 2272, + "ctr": 0.3418, + "conversionRate": 0.1688, + "roi": 8.8666 + }, + { + "campaignName": "Criteo campaign 15184511", + "campaignId": "15184511", + "spend": 25.535122, + "impressions": 37616, + "clicks": 14139, + "conversions": 5619, + "ctr": 0.3759, + "conversionRate": 0.3974, + "roi": 7.3772 + }, + { + "campaignName": "Criteo campaign 14661605", + "campaignId": "14661605", + "spend": 22.947361, + "impressions": 26269, + "clicks": 9045, + "conversions": 1441, + "ctr": 0.3443, + "conversionRate": 0.1593, + "roi": 9.3588 + }, + { + "campaignName": "Criteo campaign 10341182", + "campaignId": "10341182", + "spend": 22.890376, + "impressions": 61992, + "clicks": 28070, + "conversions": 6511, + "ctr": 0.4528, + "conversionRate": 0.232, + "roi": 11.0683 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-06", + "endDate": "2018-08-06", + "summary": { + "spend": 675.638064, + "impressions": 2203587, + "clicks": 815435, + "ctr": 0.37, + "cpc": 0.000829, + "conversionRate": 0.1312, + "roi": 9.2969, + "conversions": 106971, + "attributedConversions": 59065, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": [ + { + "campaignName": "Criteo campaign 15398570", + "campaignId": "15398570", + "spend": 31.142, + "impressions": 65984, + "clicks": 23608, + "conversions": 3946, + "ctr": 0.3578, + "conversionRate": 0.1671, + "roi": 10.2069 + }, + { + "campaignName": "Criteo campaign 15184511", + "campaignId": "15184511", + "spend": 22.518239, + "impressions": 33594, + "clicks": 12173, + "conversions": 4824, + "ctr": 0.3624, + "conversionRate": 0.3963, + "roi": 8.399 + }, + { + "campaignName": "Criteo campaign 6686701", + "campaignId": "6686701", + "spend": 21.991571, + "impressions": 51621, + "clicks": 20412, + "conversions": 1487, + "ctr": 0.3954, + "conversionRate": 0.0728, + "roi": 8.7649 + }, + { + "campaignName": "Criteo campaign 5061834", + "campaignId": "5061834", + "spend": 17.973119, + "impressions": 38876, + "clicks": 11616, + "conversions": 1317, + "ctr": 0.2988, + "conversionRate": 0.1134, + "roi": 4.6087 + }, + { + "campaignName": "Criteo campaign 29427842", + "campaignId": "29427842", + "spend": 17.531738, + "impressions": 32786, + "clicks": 10646, + "conversions": 1940, + "ctr": 0.3247, + "conversionRate": 0.1822, + "roi": 11.1846 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-07", + "endDate": "2018-08-07", + "summary": { + "spend": 825.462312, + "impressions": 2709175, + "clicks": 991844, + "ctr": 0.3661, + "cpc": 0.000832, + "conversionRate": 0.1331, + "roi": 9.0897, + "conversions": 131975, + "attributedConversions": 72067, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": [ + { + "campaignName": "Criteo campaign 15398570", + "campaignId": "15398570", + "spend": 31.547925, + "impressions": 73623, + "clicks": 26639, + "conversions": 4183, + "ctr": 0.3618, + "conversionRate": 0.157, + "roi": 8.833 + }, + { + "campaignName": "Criteo campaign 18975823", + "campaignId": "18975823", + "spend": 29.406393, + "impressions": 58345, + "clicks": 26723, + "conversions": 2206, + "ctr": 0.458, + "conversionRate": 0.0826, + "roi": 10.6152 + }, + { + "campaignName": "Criteo campaign 15184511", + "campaignId": "15184511", + "spend": 26.371389, + "impressions": 38439, + "clicks": 14027, + "conversions": 6168, + "ctr": 0.3649, + "conversionRate": 0.4397, + "roi": 8.8995 + }, + { + "campaignName": "Criteo campaign 30491418", + "campaignId": "30491418", + "spend": 24.568838, + "impressions": 33765, + "clicks": 13496, + "conversions": 1650, + "ctr": 0.3997, + "conversionRate": 0.1223, + "roi": 9.1398 + }, + { + "campaignName": "Criteo campaign 32368244", + "campaignId": "32368244", + "spend": 24.079436, + "impressions": 26936, + "clicks": 13364, + "conversions": 6208, + "ctr": 0.4961, + "conversionRate": 0.4645, + "roi": 2.9616 + } + ] + } + } +] diff --git a/docs/demo-data/external-reports-demo.json b/docs/demo-data/external-reports-demo.json index ace5f61..25c85fc 100644 --- a/docs/demo-data/external-reports-demo.json +++ b/docs/demo-data/external-reports-demo.json @@ -2,8 +2,8 @@ { "tenantId": 1, "shopId": 1, - "startDate": "2026-07-19", - "endDate": "2026-07-19", + "startDate": "2018-08-07", + "endDate": "2018-08-07", "summary": { "visitorCount": 42880, "newVisitorCount": 15120, diff --git a/docs/demo-data/external-reports-real.json b/docs/demo-data/external-reports-real.json new file mode 100644 index 0000000..8b89b0b --- /dev/null +++ b/docs/demo-data/external-reports-real.json @@ -0,0 +1,681 @@ +[ + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-01", + "endDate": "2018-08-01", + "summary": { + "visitorCount": 1427574, + "newVisitorCount": 1018559, + "conversionRate": 0.0478, + "repeatPurchaseRate": 0.2865, + "favoriteCount": 770905, + "cartAddCount": 105642, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": [ + { + "channelName": "Criteo traffic segment 30763035", + "visitorCount": 645189, + "impressions": 996963, + "clicks": 385842, + "conversionRate": 0.0404 + }, + { + "channelName": "Criteo traffic segment 138937", + "visitorCount": 201109, + "impressions": 242390, + "clicks": 81247, + "conversionRate": 0.0165 + }, + { + "channelName": "Criteo traffic segment 28928366", + "visitorCount": 167282, + "impressions": 248390, + "clicks": 75497, + "conversionRate": 0.0956 + } + ], + "externalEventContext": { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": { + "start": "2012-03-02", + "end": "2017-12-26" + }, + "eventCount": 350, + "transferredEventCount": 12, + "typeCounts": { + "Holiday": 221, + "Event": 56, + "Additional": 51, + "Transfer": 12, + "Bridge": 5, + "Work Day": 5 + }, + "localeCounts": { + "National": 174, + "Local": 152, + "Regional": 24 + }, + "sampleEvents": [ + { + "date": "2012-03-02", + "type": "Holiday", + "locale": "Local", + "localeName": "Manta", + "description": "Fundacion de Manta" + }, + { + "date": "2012-04-01", + "type": "Holiday", + "locale": "Regional", + "localeName": "Cotopaxi", + "description": "Provincializacion de Cotopaxi" + }, + { + "date": "2012-04-12", + "type": "Holiday", + "locale": "Local", + "localeName": "Cuenca", + "description": "Fundacion de Cuenca" + }, + { + "date": "2012-04-14", + "type": "Holiday", + "locale": "Local", + "localeName": "Libertad", + "description": "Cantonizacion de Libertad" + }, + { + "date": "2012-04-21", + "type": "Holiday", + "locale": "Local", + "localeName": "Riobamba", + "description": "Cantonizacion de Riobamba" + } + ] + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-02", + "endDate": "2018-08-02", + "summary": { + "visitorCount": 1644372, + "newVisitorCount": 1156401, + "conversionRate": 0.0475, + "repeatPurchaseRate": 0.2968, + "favoriteCount": 894806, + "cartAddCount": 122918, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": [ + { + "channelName": "Criteo traffic segment 30763035", + "visitorCount": 733727, + "impressions": 1153223, + "clicks": 440968, + "conversionRate": 0.0414 + }, + { + "channelName": "Criteo traffic segment 138937", + "visitorCount": 237345, + "impressions": 288383, + "clicks": 95635, + "conversionRate": 0.0163 + }, + { + "channelName": "Criteo traffic segment 28928366", + "visitorCount": 193412, + "impressions": 290808, + "clicks": 88009, + "conversionRate": 0.0965 + } + ], + "externalEventContext": { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": { + "start": "2012-03-02", + "end": "2017-12-26" + }, + "eventCount": 350, + "transferredEventCount": 12, + "typeCounts": { + "Holiday": 221, + "Event": 56, + "Additional": 51, + "Transfer": 12, + "Bridge": 5, + "Work Day": 5 + }, + "localeCounts": { + "National": 174, + "Local": 152, + "Regional": 24 + }, + "sampleEvents": [ + { + "date": "2012-03-02", + "type": "Holiday", + "locale": "Local", + "localeName": "Manta", + "description": "Fundacion de Manta" + }, + { + "date": "2012-04-01", + "type": "Holiday", + "locale": "Regional", + "localeName": "Cotopaxi", + "description": "Provincializacion de Cotopaxi" + }, + { + "date": "2012-04-12", + "type": "Holiday", + "locale": "Local", + "localeName": "Cuenca", + "description": "Fundacion de Cuenca" + }, + { + "date": "2012-04-14", + "type": "Holiday", + "locale": "Local", + "localeName": "Libertad", + "description": "Cantonizacion de Libertad" + }, + { + "date": "2012-04-21", + "type": "Holiday", + "locale": "Local", + "localeName": "Riobamba", + "description": "Cantonizacion de Riobamba" + } + ] + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-03", + "endDate": "2018-08-03", + "summary": { + "visitorCount": 1552187, + "newVisitorCount": 1113930, + "conversionRate": 0.0475, + "repeatPurchaseRate": 0.2823, + "favoriteCount": 854725, + "cartAddCount": 114770, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": [ + { + "channelName": "Criteo traffic segment 30763035", + "visitorCount": 683999, + "impressions": 1052613, + "clicks": 417355, + "conversionRate": 0.0404 + }, + { + "channelName": "Criteo traffic segment 138937", + "visitorCount": 218985, + "impressions": 261998, + "clicks": 90713, + "conversionRate": 0.0154 + }, + { + "channelName": "Criteo traffic segment 28928366", + "visitorCount": 177447, + "impressions": 260627, + "clicks": 82961, + "conversionRate": 0.0968 + } + ], + "externalEventContext": { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": { + "start": "2012-03-02", + "end": "2017-12-26" + }, + "eventCount": 350, + "transferredEventCount": 12, + "typeCounts": { + "Holiday": 221, + "Event": 56, + "Additional": 51, + "Transfer": 12, + "Bridge": 5, + "Work Day": 5 + }, + "localeCounts": { + "National": 174, + "Local": 152, + "Regional": 24 + }, + "sampleEvents": [ + { + "date": "2012-03-02", + "type": "Holiday", + "locale": "Local", + "localeName": "Manta", + "description": "Fundacion de Manta" + }, + { + "date": "2012-04-01", + "type": "Holiday", + "locale": "Regional", + "localeName": "Cotopaxi", + "description": "Provincializacion de Cotopaxi" + }, + { + "date": "2012-04-12", + "type": "Holiday", + "locale": "Local", + "localeName": "Cuenca", + "description": "Fundacion de Cuenca" + }, + { + "date": "2012-04-14", + "type": "Holiday", + "locale": "Local", + "localeName": "Libertad", + "description": "Cantonizacion de Libertad" + }, + { + "date": "2012-04-21", + "type": "Holiday", + "locale": "Local", + "localeName": "Riobamba", + "description": "Cantonizacion de Riobamba" + } + ] + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-04", + "endDate": "2018-08-04", + "summary": { + "visitorCount": 1395955, + "newVisitorCount": 1003372, + "conversionRate": 0.0494, + "repeatPurchaseRate": 0.2812, + "favoriteCount": 776686, + "cartAddCount": 108951, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": [ + { + "channelName": "Criteo traffic segment 30763035", + "visitorCount": 615289, + "impressions": 950001, + "clicks": 381548, + "conversionRate": 0.0419 + }, + { + "channelName": "Criteo traffic segment 138937", + "visitorCount": 190664, + "impressions": 228111, + "clicks": 77296, + "conversionRate": 0.0155 + }, + { + "channelName": "Criteo traffic segment 28928366", + "visitorCount": 165989, + "impressions": 245370, + "clicks": 78875, + "conversionRate": 0.1002 + } + ], + "externalEventContext": { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": { + "start": "2012-03-02", + "end": "2017-12-26" + }, + "eventCount": 350, + "transferredEventCount": 12, + "typeCounts": { + "Holiday": 221, + "Event": 56, + "Additional": 51, + "Transfer": 12, + "Bridge": 5, + "Work Day": 5 + }, + "localeCounts": { + "National": 174, + "Local": 152, + "Regional": 24 + }, + "sampleEvents": [ + { + "date": "2012-03-02", + "type": "Holiday", + "locale": "Local", + "localeName": "Manta", + "description": "Fundacion de Manta" + }, + { + "date": "2012-04-01", + "type": "Holiday", + "locale": "Regional", + "localeName": "Cotopaxi", + "description": "Provincializacion de Cotopaxi" + }, + { + "date": "2012-04-12", + "type": "Holiday", + "locale": "Local", + "localeName": "Cuenca", + "description": "Fundacion de Cuenca" + }, + { + "date": "2012-04-14", + "type": "Holiday", + "locale": "Local", + "localeName": "Libertad", + "description": "Cantonizacion de Libertad" + }, + { + "date": "2012-04-21", + "type": "Holiday", + "locale": "Local", + "localeName": "Riobamba", + "description": "Cantonizacion de Riobamba" + } + ] + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-05", + "endDate": "2018-08-05", + "summary": { + "visitorCount": 1480158, + "newVisitorCount": 1061568, + "conversionRate": 0.0491, + "repeatPurchaseRate": 0.2828, + "favoriteCount": 843162, + "cartAddCount": 114969, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": [ + { + "channelName": "Criteo traffic segment 30763035", + "visitorCount": 647690, + "impressions": 997348, + "clicks": 411446, + "conversionRate": 0.0418 + }, + { + "channelName": "Criteo traffic segment 138937", + "visitorCount": 206738, + "impressions": 247382, + "clicks": 86380, + "conversionRate": 0.0158 + }, + { + "channelName": "Criteo traffic segment 28928366", + "visitorCount": 174641, + "impressions": 255856, + "clicks": 84519, + "conversionRate": 0.0995 + } + ], + "externalEventContext": { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": { + "start": "2012-03-02", + "end": "2017-12-26" + }, + "eventCount": 350, + "transferredEventCount": 12, + "typeCounts": { + "Holiday": 221, + "Event": 56, + "Additional": 51, + "Transfer": 12, + "Bridge": 5, + "Work Day": 5 + }, + "localeCounts": { + "National": 174, + "Local": 152, + "Regional": 24 + }, + "sampleEvents": [ + { + "date": "2012-03-02", + "type": "Holiday", + "locale": "Local", + "localeName": "Manta", + "description": "Fundacion de Manta" + }, + { + "date": "2012-04-01", + "type": "Holiday", + "locale": "Regional", + "localeName": "Cotopaxi", + "description": "Provincializacion de Cotopaxi" + }, + { + "date": "2012-04-12", + "type": "Holiday", + "locale": "Local", + "localeName": "Cuenca", + "description": "Fundacion de Cuenca" + }, + { + "date": "2012-04-14", + "type": "Holiday", + "locale": "Local", + "localeName": "Libertad", + "description": "Cantonizacion de Libertad" + }, + { + "date": "2012-04-21", + "type": "Holiday", + "locale": "Local", + "localeName": "Riobamba", + "description": "Cantonizacion de Riobamba" + } + ] + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-06", + "endDate": "2018-08-06", + "summary": { + "visitorCount": 1446678, + "newVisitorCount": 1041044, + "conversionRate": 0.047, + "repeatPurchaseRate": 0.2804, + "favoriteCount": 815435, + "cartAddCount": 106971, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": [ + { + "channelName": "Criteo traffic segment 30763035", + "visitorCount": 632887, + "impressions": 974402, + "clicks": 400601, + "conversionRate": 0.0403 + }, + { + "channelName": "Criteo traffic segment 138937", + "visitorCount": 198861, + "impressions": 238521, + "clicks": 82821, + "conversionRate": 0.0152 + }, + { + "channelName": "Criteo traffic segment 28928366", + "visitorCount": 165842, + "impressions": 242547, + "clicks": 80715, + "conversionRate": 0.0991 + } + ], + "externalEventContext": { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": { + "start": "2012-03-02", + "end": "2017-12-26" + }, + "eventCount": 350, + "transferredEventCount": 12, + "typeCounts": { + "Holiday": 221, + "Event": 56, + "Additional": 51, + "Transfer": 12, + "Bridge": 5, + "Work Day": 5 + }, + "localeCounts": { + "National": 174, + "Local": 152, + "Regional": 24 + }, + "sampleEvents": [ + { + "date": "2012-03-02", + "type": "Holiday", + "locale": "Local", + "localeName": "Manta", + "description": "Fundacion de Manta" + }, + { + "date": "2012-04-01", + "type": "Holiday", + "locale": "Regional", + "localeName": "Cotopaxi", + "description": "Provincializacion de Cotopaxi" + }, + { + "date": "2012-04-12", + "type": "Holiday", + "locale": "Local", + "localeName": "Cuenca", + "description": "Fundacion de Cuenca" + }, + { + "date": "2012-04-14", + "type": "Holiday", + "locale": "Local", + "localeName": "Libertad", + "description": "Cantonizacion de Libertad" + }, + { + "date": "2012-04-21", + "type": "Holiday", + "locale": "Local", + "localeName": "Riobamba", + "description": "Cantonizacion de Riobamba" + } + ] + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-07", + "endDate": "2018-08-07", + "summary": { + "visitorCount": 1692344, + "newVisitorCount": 1182014, + "conversionRate": 0.0469, + "repeatPurchaseRate": 0.3016, + "favoriteCount": 991844, + "cartAddCount": 131975, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": [ + { + "channelName": "Criteo traffic segment 30763035", + "visitorCount": 732815, + "impressions": 1184583, + "clicks": 484462, + "conversionRate": 0.0425 + }, + { + "channelName": "Criteo traffic segment 138937", + "visitorCount": 243151, + "impressions": 298887, + "clicks": 102258, + "conversionRate": 0.0159 + }, + { + "channelName": "Criteo traffic segment 28928366", + "visitorCount": 195482, + "impressions": 298666, + "clicks": 97409, + "conversionRate": 0.1015 + } + ], + "externalEventContext": { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": { + "start": "2012-03-02", + "end": "2017-12-26" + }, + "eventCount": 350, + "transferredEventCount": 12, + "typeCounts": { + "Holiday": 221, + "Event": 56, + "Additional": 51, + "Transfer": 12, + "Bridge": 5, + "Work Day": 5 + }, + "localeCounts": { + "National": 174, + "Local": 152, + "Regional": 24 + }, + "sampleEvents": [ + { + "date": "2012-03-02", + "type": "Holiday", + "locale": "Local", + "localeName": "Manta", + "description": "Fundacion de Manta" + }, + { + "date": "2012-04-01", + "type": "Holiday", + "locale": "Regional", + "localeName": "Cotopaxi", + "description": "Provincializacion de Cotopaxi" + }, + { + "date": "2012-04-12", + "type": "Holiday", + "locale": "Local", + "localeName": "Cuenca", + "description": "Fundacion de Cuenca" + }, + { + "date": "2012-04-14", + "type": "Holiday", + "locale": "Local", + "localeName": "Libertad", + "description": "Cantonizacion de Libertad" + }, + { + "date": "2012-04-21", + "type": "Holiday", + "locale": "Local", + "localeName": "Riobamba", + "description": "Cantonizacion de Riobamba" + } + ] + } + } + } +] diff --git a/docs/demo-data/olist/README.md b/docs/demo-data/olist/README.md index 391e644..6e3d85f 100644 --- a/docs/demo-data/olist/README.md +++ b/docs/demo-data/olist/README.md @@ -1,15 +1,22 @@ # Olist Demo Dataset Summary -- Business date: 2018-08-07 -- GMV: 62057.77 -- Order count: 370 -- Refund proxy amount: 4732.62 -- Refund proxy rate: 0.0763 -- Negative comment count: 51 -- Product candidate count: 10 +- Business date range: 2018-08-01 to 2018-08-07 +- Date count: 7 ## Files - `order-summary-olist.json` - `negative-comments-olist.json` - `product-candidates-olist.json` + +## Daily Summary + +| Date | GMV | Orders | Refund Rate | Negative Comments | Product Candidates | +| --- | ---: | ---: | ---: | ---: | ---: | +| 2018-08-01 | 48850.81 | 311 | 0.0116 | 58 | 10 | +| 2018-08-02 | 45932.7 | 302 | 0.0074 | 59 | 10 | +| 2018-08-03 | 49517.59 | 314 | 0.0062 | 50 | 10 | +| 2018-08-04 | 41239.97 | 245 | 0.004 | 66 | 10 | +| 2018-08-05 | 42272.07 | 276 | 0.0046 | 27 | 10 | +| 2018-08-06 | 65860.43 | 372 | 0.0415 | 2 | 2 | +| 2018-08-07 | 62057.77 | 370 | 0.0763 | 51 | 10 | diff --git a/docs/demo-data/olist/negative-comments-olist.json b/docs/demo-data/olist/negative-comments-olist.json index bcf054c..e52cf7f 100644 --- a/docs/demo-data/olist/negative-comments-olist.json +++ b/docs/demo-data/olist/negative-comments-olist.json @@ -1,4 +1,640 @@ [ + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-01", + "endDate": "2018-08-01", + "minStar": 3, + "summary": { + "negativeCount": 58, + "riskComments": [ + { + "commentId": "1f47adc2fd3f0ad69d20f73858eb6405", + "productId": "f7740e5b4337a3cc4a8a204553101a85", + "productName": "Health Beauty / f7740e5b", + "star": 1, + "content": "O produto não veio", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "e381a68b101aee7c9f60043016b99830", + "productId": "5be202203d884803b74c45c7ff991706", + "productName": "Watches Gifts / 5be20220", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "c3861479337f0da776e036f28ab2074f", + "productId": "625dac8156b3157351e7257305148f3f", + "productName": "Telephony / 625dac81", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "21d1b3ca94a6ce60a993866eb4180863", + "productId": "794d58cf31d570f4b7640c7a2085042d", + "productName": "Signaling And Security / 794d58cf", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "72bb360d2a137f462280111e6222957c", + "productId": "2fea0f2cec6b6324a277d4a61c2ed2c6", + "productName": "Health Beauty / 2fea0f2c", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "6d27bb9cc292221e17c055cb27db588c", + "productId": "d2f5484cbffe4ca766301b21ab9246dd", + "productName": "Computers Accessories / d2f5484c", + "star": 1, + "content": "produto não funciona", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "baebc86326a31e60628236c361f3d6a1", + "productId": "389c7d7f59a980be2afbe84d648cd80f", + "productName": "Housewares / 389c7d7f", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "d9c1429a5fa00e1c341789f264dab29c", + "productId": "99d78b96be1452047a05d7e66bad134d", + "productName": "Toys / 99d78b96", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "7c13593fbb3317137ce7d58995ea1ba1", + "productId": "933f4f76eae38d2a97ecfb7c6355f0bc", + "productName": "Health Beauty / 933f4f76", + "star": 1, + "content": "Chegou apenas a nota fiscal", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "ca562bee0267897c2301da505ec221ba", + "productId": "aa8d88eb4b9cb38894e33fa624c4287f", + "productName": "Watches Gifts / aa8d88eb", + "star": 1, + "content": "O produto não veio funcionando", + "riskKeywords": [ + "review_risk" + ] + } + ], + "categoryStats": { + "review_risk": 41, + "logistics_delay": 8, + "refund_or_return": 6, + "description_mismatch": 5, + "size_issue": 2, + "quality_or_damage": 1 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-02", + "endDate": "2018-08-02", + "minStar": 3, + "summary": { + "negativeCount": 59, + "riskComments": [ + { + "commentId": "0885cb145e3ee0e83bf67cffff037dbc", + "productId": "bcdfe7d7d9e6f6eb14f6947b0e92537b", + "productName": "Health Beauty / bcdfe7d7", + "star": 1, + "content": "Ainda não recebi", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "a8b0f5ab070712a923b335e69bf51b63", + "productId": "6f58431a7150fa91bac9f28f5454a8e8", + "productName": "Computers Accessories / 6f58431a", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "76b807bf684ce187fe07524813da742a", + "productId": "6cdd53843498f92890544667809f1595", + "productName": "Health Beauty / 6cdd5384", + "star": 1, + "content": "produto não entregue", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "eec2d21175a73b514b8b82a83a2db5aa", + "productId": "429e7401fafb76436f15e86498bd7364", + "productName": "Bed Bath Table / 429e7401", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "f831d8cb207ad9c2ad7340d786577a3d", + "productId": "8b8981e920b8a923f6b066fefade1925", + "productName": "Construction Tools Construction / 8b8981e9", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "9c8fa795fde24263e0ccbcbc91b8546b", + "productId": "19c91ef95d509ea33eda93495c4d3481", + "productName": "Health Beauty / 19c91ef9", + "star": 1, + "content": "Meu produto não chegou", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "3bc3d42fc6307dbe2c0598a082cdca24", + "productId": "727a46f0b58a9ef165af9f7ebcfebfa9", + "productName": "Sports Leisure / 727a46f0", + "star": 1, + "content": "Eu não recebi o produto", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "45859e8c037ec1c34cfcd9c09dc07d9b", + "productId": "ccd4cfb944386e7ad91065a63f650b38", + "productName": "Furniture Decor / ccd4cfb9", + "star": 1, + "content": "O produto ainda não chegou.", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "b1a9145252ce6d51033001d9647d485c", + "productId": "2fea0f2cec6b6324a277d4a61c2ed2c6", + "productName": "Health Beauty / 2fea0f2c", + "star": 1, + "content": "Além de demorar, não chegou.", + "riskKeywords": [ + "logistics_delay" + ] + }, + { + "commentId": "f289c25e9f09c952fac807679dff1419", + "productId": "e2bb00220a167d9e60b6776ac33717bc", + "productName": "Watches Gifts / e2bb0022", + "star": 1, + "content": "Não entregaram não tive reembolso", + "riskKeywords": [ + "refund_or_return", + "logistics_delay" + ] + } + ], + "categoryStats": { + "review_risk": 41, + "logistics_delay": 9, + "refund_or_return": 7, + "description_mismatch": 3, + "quality_or_damage": 2, + "missing_parts": 1 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-03", + "endDate": "2018-08-03", + "minStar": 3, + "summary": { + "negativeCount": 50, + "riskComments": [ + { + "commentId": "cef02bef79c80dbedfd9c954cb9e9a7e", + "productId": "e2bb00220a167d9e60b6776ac33717bc", + "productName": "Watches Gifts / e2bb0022", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "ae763354f8a2ffb0e9bcfb2d165dac74", + "productId": "4697e1b622324d38a8989bff2bdc1c84", + "productName": "Stationery / 4697e1b6", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "0f39c8201a4782ed03470ed525e7d68b", + "productId": "3db0b74faf0d26a6b252528659d6b849", + "productName": "Cool Stuff / 3db0b74f", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "4b5e8809f6852ec5fa62936f6c2dd4a7", + "productId": "3fbc0ef745950c7932d5f2a446189725", + "productName": "Health Beauty / 3fbc0ef7", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "28002c67d109d09b3675587593b8c65d", + "productId": "82498e96fa34d0975dc61a765a65d523", + "productName": "Housewares / 82498e96", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "137499d4013f4595f6aeca3c70f07ccf", + "productId": "a7d2c99f1d0e7ddfbce06d48f12b61a2", + "productName": "Housewares / a7d2c99f", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "8d66aaad00cff1f004d8418d1c3f09fd", + "productId": "be69b1c83725cafaa993146ad08b11ca", + "productName": "Bed Bath Table / be69b1c8", + "star": 1, + "content": "O produto não foi entregue", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "bda62618ed46215beb4a94344c79e725", + "productId": "bb77135946e78428a7a5634a46113a22", + "productName": "Baby / bb771359", + "star": 1, + "content": "Estou muito insatisfeito !", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "aee1f5bdfc0f44fd54ec0567f0dcf73d", + "productId": "f3b8bfa5b86249e75e5c0632acc0e82e", + "productName": "Health Beauty / f3b8bfa5", + "star": 1, + "content": "Pedi um produto e veio outro", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "8b4c14417bccab81710772ecb8b23fd6", + "productId": "b3821db2024af98844b6381cc25651c8", + "productName": "Garden Tools / b3821db2", + "star": 1, + "content": "produto deu defeito na 1 vez de uso.", + "riskKeywords": [ + "quality_or_damage" + ] + } + ], + "categoryStats": { + "review_risk": 36, + "refund_or_return": 5, + "logistics_delay": 4, + "description_mismatch": 4, + "quality_or_damage": 2, + "missing_parts": 2 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-04", + "endDate": "2018-08-04", + "minStar": 3, + "summary": { + "negativeCount": 66, + "riskComments": [ + { + "commentId": "dce2480f9ad00098b6bd0debe128b165", + "productId": "2dc0d95288983b8c91627bab326284ae", + "productName": "Health Beauty / 2dc0d952", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "ce187bdab5b45647e5e359f882935b38", + "productId": "fad534edb8f35664713c4b766fa473d4", + "productName": "Bed Bath Table / fad534ed", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "2f8e0d667ba5eef628ccf5e206e61e83", + "productId": "033e5e4f49acb5621c782ac8a37aa90b", + "productName": "Luggage Accessories / 033e5e4f", + "star": 1, + "content": "material inferior ao esperado", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "7dde5d72fe17239a16d4071e9ee5a7d7", + "productId": "2fea0f2cec6b6324a277d4a61c2ed2c6", + "productName": "Health Beauty / 2fea0f2c", + "star": 1, + "content": "Quero o meu produto onde está?", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "da8e936bc2f1b52ec626f8aa41f3df44", + "productId": "70c09a6d537cf2d213fe0169db7d209f", + "productName": "Sports Leisure / 70c09a6d", + "star": 1, + "content": "Produto diferente do anunciado", + "riskKeywords": [ + "description_mismatch" + ] + }, + { + "commentId": "d4b79f642537654027a08b56de3cda0d", + "productId": "9fe172fa8e662ca8572cf12abf8bce23", + "productName": "Fashion Bags Accessories / 9fe172fa", + "star": 1, + "content": "Sinceramente, não indicarei a ninguém!!", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "13164750b8bec6e6951470afd250cb48", + "productId": "2647221a6a477afe2d0268b378f1fdcd", + "productName": "Bed Bath Table / 2647221a", + "star": 1, + "content": "Produto de boa qualidade, entrega dentro do prazo", + "riskKeywords": [ + "logistics_delay" + ] + }, + { + "commentId": "1fd87c2d1bf9399fdea82d4ae97a3eea", + "productId": "547ef2af00ca493818dd33eb5216b22e", + "productName": "Computers Accessories / 547ef2af", + "star": 1, + "content": "foi prometido entrega até 02/08/2018 e até agora nada.", + "riskKeywords": [ + "logistics_delay" + ] + }, + { + "commentId": "88d5cc1800f838660f92774532115ba7", + "productId": "55b71bf300a2765a382eaec566df531f", + "productName": "Sports Leisure / 55b71bf3", + "star": 1, + "content": "comprei um produto e recebi outro completamente diferente, como devo proceder?", + "riskKeywords": [ + "description_mismatch" + ] + }, + { + "commentId": "1c24747b51d25742b5fb5250d727129a", + "productId": "71191d3e8768745afc1c290c63f6241e", + "productName": "Telephony / 71191d3e", + "star": 1, + "content": "A parte superior do produto foi mal feita, não encaixa corretamente e está folgada.", + "riskKeywords": [ + "review_risk" + ] + } + ], + "categoryStats": { + "review_risk": 46, + "logistics_delay": 12, + "refund_or_return": 6, + "missing_parts": 3, + "quality_or_damage": 2, + "description_mismatch": 2 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-05", + "endDate": "2018-08-05", + "minStar": 3, + "summary": { + "negativeCount": 27, + "riskComments": [ + { + "commentId": "7051dce1203e9627f2ea95966d55dc40", + "productId": "3fbc0ef745950c7932d5f2a446189725", + "productName": "Health Beauty / 3fbc0ef7", + "star": 1, + "content": "Mal", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "e11ea659263ab76827686c0b0060a25d", + "productId": "84f456958365164420cfc80fbe4c7fab", + "productName": "Bed Bath Table / 84f45695", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "b05d8be651527f0a002624c070771e61", + "productId": "ab6edd00a29d1e29948284a492497854", + "productName": "Home Appliances / ab6edd00", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "5a6a5349c958f78822985c7732738575", + "productId": "19c91ef95d509ea33eda93495c4d3481", + "productName": "Health Beauty / 19c91ef9", + "star": 1, + "content": "Olist review score=1", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "0a9e80c9d8a805691c15f1ae633c0715", + "productId": "90aa2ab699cd0e459be93124aa91c82f", + "productName": "Bed Bath Table / 90aa2ab6", + "star": 1, + "content": "O tecido nao é impermeavel molha", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "0741aaadd102ca2284d19621aba7b8c0", + "productId": "3fbc0ef745950c7932d5f2a446189725", + "productName": "Health Beauty / 3fbc0ef7", + "star": 1, + "content": "ate esta data não recebi o produto ( 07.08.18)", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "5caccf1f37c49ef076ea0e418cecb2b4", + "productId": "3fbc0ef745950c7932d5f2a446189725", + "productName": "Health Beauty / 3fbc0ef7", + "star": 1, + "content": "Produto não entregue e nenhuma explicação dada.", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "bf8ad702d153b8c1c73328591242c7d1", + "productId": "6026308f343d15d492324e7e35ba5685", + "productName": "Watches Gifts / 6026308f", + "star": 1, + "content": "Comprei um produto e não entregaram. Pedi o cancelado do produto.", + "riskKeywords": [ + "refund_or_return", + "logistics_delay" + ] + }, + { + "commentId": "931ca2b73c9eda0996ee23bfb16a106e", + "productId": "e91ff7c20ffce75705b28b2a7e7586f1", + "productName": "Health Beauty / e91ff7c2", + "star": 1, + "content": "Venderam um produto que não tinha no estoque. Não estornaram o dinheiro. A avaliação é zero.", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "c2ed24406cd3433f432913c78396d265", + "productId": "1cf4209f5358de32c5cae2c2dbb84aed", + "productName": "Telephony / 1cf4209f", + "star": 1, + "content": "Olá, meu pedido não foi entregue, quero saber o que aconteceu se não for resolvido eu vou querer o meu dinheiro de volta. Agradeço desde já.", + "riskKeywords": [ + "review_risk" + ] + } + ], + "categoryStats": { + "review_risk": 18, + "logistics_delay": 7, + "refund_or_return": 4, + "quality_or_damage": 1 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-06", + "endDate": "2018-08-06", + "minStar": 3, + "summary": { + "negativeCount": 2, + "riskComments": [ + { + "commentId": "3d19852c23fff17c55a4e8f29aa71b9e", + "productId": "c7c57beb314dfd634634c758da3eba64", + "productName": "Consoles Games / c7c57beb", + "star": 1, + "content": "Meu produto veio falsificado.", + "riskKeywords": [ + "review_risk" + ] + }, + { + "commentId": "ff2b8f250747f10d322e1dc906c80483", + "productId": "e70b02b0b99965f2ff4341de50a35c5d", + "productName": "Furniture Decor / e70b02b0", + "star": 3, + "content": "O produto muito bom, bonito , porém veio faltando cristais e fica faltando de um lado , mas espero que a loja enviei o que faltou.", + "riskKeywords": [ + "missing_parts" + ] + } + ], + "categoryStats": { + "review_risk": 1, + "missing_parts": 1 + } + } + }, { "tenantId": 1, "shopId": 1, @@ -15,7 +651,7 @@ "star": 1, "content": "Não recebi", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -25,7 +661,7 @@ "star": 1, "content": "Olist review score=1", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -35,7 +671,7 @@ "star": 1, "content": "Olist review score=1", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -45,7 +681,7 @@ "star": 1, "content": "Olist review score=1", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -55,7 +691,7 @@ "star": 1, "content": "produto nao e original", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -65,7 +701,7 @@ "star": 1, "content": "Nao veio com o interruptor tentei ligar na loja e sem êxito", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -75,7 +711,7 @@ "star": 1, "content": "meu produto veio com o cabo todo arranhado, produto parece usado", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -85,7 +721,7 @@ "star": 1, "content": "preciso receber esse produto , deve ter sido entregue a outra pessoa", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -95,7 +731,7 @@ "star": 1, "content": "Não foi o produto que comprei pelas lannister, recebi duas extensões de cabo HDI.", "riskKeywords": [ - "评价风险" + "review_risk" ] }, { @@ -105,18 +741,18 @@ "star": 1, "content": "Péssimo material , falta de respeito com consumidor, mandam as cores q bem entendem", "riskKeywords": [ - "缺件" + "missing_parts" ] } ], "categoryStats": { - "评价风险": 38, - "退款/退货": 6, - "描述不符": 3, - "尺寸问题": 3, - "缺件": 3, - "物流慢": 3, - "商品破损/质量问题": 1 + "review_risk": 38, + "refund_or_return": 6, + "description_mismatch": 3, + "size_issue": 3, + "missing_parts": 3, + "logistics_delay": 3, + "quality_or_damage": 1 } } } diff --git a/docs/demo-data/olist/order-summary-olist.json b/docs/demo-data/olist/order-summary-olist.json index 40d752b..6564577 100644 --- a/docs/demo-data/olist/order-summary-olist.json +++ b/docs/demo-data/olist/order-summary-olist.json @@ -1,4 +1,130 @@ [ + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-01", + "endDate": "2018-08-01", + "summary": { + "gmv": 48850.81, + "orderCount": 311, + "refundAmount": 568.56, + "refundRate": 0.0116, + "avgOrderAmount": 157.08, + "compareYesterday": { + "gmvGrowth": -0.1061, + "orderGrowth": -0.0342 + }, + "compareSevenDayAvg": { + "gmvGrowth": 0.1767, + "refundRateDelta": -0.0083 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-02", + "endDate": "2018-08-02", + "summary": { + "gmv": 45932.7, + "orderCount": 302, + "refundAmount": 338.28, + "refundRate": 0.0074, + "avgOrderAmount": 152.1, + "compareYesterday": { + "gmvGrowth": -0.0597, + "orderGrowth": -0.0289 + }, + "compareSevenDayAvg": { + "gmvGrowth": 0.1029, + "refundRateDelta": -0.0139 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-03", + "endDate": "2018-08-03", + "summary": { + "gmv": 49517.59, + "orderCount": 314, + "refundAmount": 308.46, + "refundRate": 0.0062, + "avgOrderAmount": 157.7, + "compareYesterday": { + "gmvGrowth": 0.078, + "orderGrowth": 0.0397 + }, + "compareSevenDayAvg": { + "gmvGrowth": 0.1722, + "refundRateDelta": -0.0146 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-04", + "endDate": "2018-08-04", + "summary": { + "gmv": 41239.97, + "orderCount": 245, + "refundAmount": 164.53, + "refundRate": 0.004, + "avgOrderAmount": 168.33, + "compareYesterday": { + "gmvGrowth": -0.1672, + "orderGrowth": -0.2197 + }, + "compareSevenDayAvg": { + "gmvGrowth": -0.0744, + "refundRateDelta": -0.0177 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-05", + "endDate": "2018-08-05", + "summary": { + "gmv": 42272.07, + "orderCount": 276, + "refundAmount": 192.72, + "refundRate": 0.0046, + "avgOrderAmount": 153.16, + "compareYesterday": { + "gmvGrowth": 0.025, + "orderGrowth": 0.1265 + }, + "compareSevenDayAvg": { + "gmvGrowth": -0.0837, + "refundRateDelta": -0.0172 + } + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-06", + "endDate": "2018-08-06", + "summary": { + "gmv": 65860.43, + "orderCount": 372, + "refundAmount": 2730.53, + "refundRate": 0.0415, + "avgOrderAmount": 177.04, + "compareYesterday": { + "gmvGrowth": 0.558, + "orderGrowth": 0.3478 + }, + "compareSevenDayAvg": { + "gmvGrowth": 0.4023, + "refundRateDelta": 0.0269 + } + } + }, { "tenantId": 1, "shopId": 1, diff --git a/docs/demo-data/olist/product-candidates-olist.json b/docs/demo-data/olist/product-candidates-olist.json index 1f2dd1c..9511e18 100644 --- a/docs/demo-data/olist/product-candidates-olist.json +++ b/docs/demo-data/olist/product-candidates-olist.json @@ -1,4 +1,538 @@ [ + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-01", + "endDate": "2018-08-01", + "summary": { + "candidateCount": 10, + "products": [ + { + "productId": "2fea0f2cec6b6324a277d4a61c2ed2c6", + "productName": "Health Beauty / 2fea0f2c", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 80.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 2 + }, + { + "productId": "f7740e5b4337a3cc4a8a204553101a85", + "productName": "Health Beauty / f7740e5b", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 77.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "89e4362d74afa10ac57f8d67210132a6", + "productName": "Fashion Bags Accessories / 89e4362d", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "8fc803c7d0a99a53798c7896a7c1e93c", + "productName": "Housewares / 8fc803c7", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "a92930c327948861c015c919a0bcb4a8", + "productName": "Watches Gifts / a92930c3", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "0fb9aa9a6103872d8f580d721e099f89", + "productName": "Costruction Tools Garden / 0fb9aa9a", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "19a6ffd4e245a92747a693805163a60f", + "productName": "Consoles Games / 19a6ffd4", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "19c91ef95d509ea33eda93495c4d3481", + "productName": "Health Beauty / 19c91ef9", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "1a080577618e7fe4d9ddd8fb2b47a964", + "productName": "Watches Gifts / 1a080577", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "1f5542855786adc0116f56cfd6f9f830", + "productName": "Unknown / 1f554285", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-02", + "endDate": "2018-08-02", + "summary": { + "candidateCount": 10, + "products": [ + { + "productId": "a92930c327948861c015c919a0bcb4a8", + "productName": "Watches Gifts / a92930c3", + "reason": "Negative reviews are concentrated and average rating is low; prioritize product description, quality notes, and after-sales promise.", + "score": 85.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 4 + }, + { + "productId": "d285360f29ac7fd97640bf0baef03de0", + "productName": "Watches Gifts / d285360f", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 80.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 2 + }, + { + "productId": "628f5ed6c14790dcb9233c8dbf596175", + "productName": "Health Beauty / 628f5ed6", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 77.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "2ff995aead9c63a1f37a07b3664ead37", + "productName": "Furniture Living Room / 2ff995ae", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "5403528d987ad26e8d7cb25940411987", + "productName": "Watches Gifts / 5403528d", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "6f58431a7150fa91bac9f28f5454a8e8", + "productName": "Computers Accessories / 6f58431a", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "092be1e8336fc404c57bd5970d056886", + "productName": "Food / 092be1e8", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "12f066474dfa3c415c169051c5e1967e", + "productName": "Telephony / 12f06647", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "16cc7a098d176187b6d8e9519fa81585", + "productName": "Computers Accessories / 16cc7a09", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "173e9fe34bfe97f3a5e6dc57fe897b74", + "productName": "Books Technical / 173e9fe3", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-03", + "endDate": "2018-08-03", + "summary": { + "candidateCount": 10, + "products": [ + { + "productId": "bb77135946e78428a7a5634a46113a22", + "productName": "Baby / bb771359", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "016cae136d358dcdacbd7ac9f1864c09", + "productName": "Sports Leisure / 016cae13", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "14a804caa27d1d738183cbbad4d84346", + "productName": "Electronics / 14a804ca", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "1686ad611d0c19159f8052758f93f660", + "productName": "Telephony / 1686ad61", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "17d98fc630d23a628ec1130f8d69d1d2", + "productName": "Cool Stuff / 17d98fc6", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "224f4ce3262279a31db214df54befe1b", + "productName": "Health Beauty / 224f4ce3", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "24a046fcc8b971ab9962537f2694bc77", + "productName": "Bed Bath Table / 24a046fc", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "3db0b74faf0d26a6b252528659d6b849", + "productName": "Cool Stuff / 3db0b74f", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "3fbc0ef745950c7932d5f2a446189725", + "productName": "Health Beauty / 3fbc0ef7", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "4180a49d4b879e727ad2c8e82a9f4d87", + "productName": "Sports Leisure / 4180a49d", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-04", + "endDate": "2018-08-04", + "summary": { + "candidateCount": 10, + "products": [ + { + "productId": "2fea0f2cec6b6324a277d4a61c2ed2c6", + "productName": "Health Beauty / 2fea0f2c", + "reason": "Negative reviews are concentrated and average rating is low; prioritize product description, quality notes, and after-sales promise.", + "score": 88.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 3 + }, + { + "productId": "3fbc0ef745950c7932d5f2a446189725", + "productName": "Health Beauty / 3fbc0ef7", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 80.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 2 + }, + { + "productId": "55b71bf300a2765a382eaec566df531f", + "productName": "Sports Leisure / 55b71bf3", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "69523f67543ff9ea6b1a15858fb59b3b", + "productName": "Watches Gifts / 69523f67", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "9fe172fa8e662ca8572cf12abf8bce23", + "productName": "Fashion Bags Accessories / 9fe172fa", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "efcef300fe9b2c558a8ea258127f6e6f", + "productName": "Pet Shop / efcef300", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 73.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 1 + }, + { + "productId": "033e5e4f49acb5621c782ac8a37aa90b", + "productName": "Luggage Accessories / 033e5e4f", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "054515fd15bc1a2029f10de97ffa9120", + "productName": "Sports Leisure / 054515fd", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "1c6cf85f4af5c2787a812d273b836c01", + "productName": "Housewares / 1c6cf85f", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "26028d8fc5ad4bb87ebc3675d49b2ae9", + "productName": "Sports Leisure / 26028d8f", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-05", + "endDate": "2018-08-05", + "summary": { + "candidateCount": 10, + "products": [ + { + "productId": "3fbc0ef745950c7932d5f2a446189725", + "productName": "Health Beauty / 3fbc0ef7", + "reason": "Negative reviews are concentrated and average rating is low; prioritize product description, quality notes, and after-sales promise.", + "score": 89.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 3 + }, + { + "productId": "19c91ef95d509ea33eda93495c4d3481", + "productName": "Health Beauty / 19c91ef9", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 81.5, + "stock": 0, + "salesQuantity": 1, + "negativeCount": 2 + }, + { + "productId": "1bfb290d7273a442c874dbe74b4abae6", + "productName": "Office Furniture / 1bfb290d", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "1cf4209f5358de32c5cae2c2dbb84aed", + "productName": "Telephony / 1cf4209f", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "44d097d59e8430f88a67517cd0c4f865", + "productName": "Fashion Bags Accessories / 44d097d5", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "6026308f343d15d492324e7e35ba5685", + "productName": "Watches Gifts / 6026308f", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "84f456958365164420cfc80fbe4c7fab", + "productName": "Bed Bath Table / 84f45695", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "90aa2ab699cd0e459be93124aa91c82f", + "productName": "Bed Bath Table / 90aa2ab6", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "ab6edd00a29d1e29948284a492497854", + "productName": "Home Appliances / ab6edd00", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "ad88641611c35ebd59ecda07a9f17099", + "productName": "Unknown / ad886416", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + } + ] + } + }, + { + "tenantId": 1, + "shopId": 1, + "startDate": "2018-08-06", + "endDate": "2018-08-06", + "summary": { + "candidateCount": 2, + "products": [ + { + "productId": "c7c57beb314dfd634634c758da3eba64", + "productName": "Consoles Games / c7c57beb", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 72.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + }, + { + "productId": "e70b02b0b99965f2ff4341de50a35c5d", + "productName": "Furniture Decor / e70b02b0", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", + "score": 63.0, + "stock": 0, + "salesQuantity": 0, + "negativeCount": 1 + } + ] + } + }, { "tenantId": 1, "shopId": 1, @@ -10,7 +544,7 @@ { "productId": "4f18ca9862f511ecba98258b2194d061", "productName": "Furniture Bedroom / 4f18ca98", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 80.0, "stock": 0, "salesQuantity": 0, @@ -19,7 +553,7 @@ { "productId": "cf857bce01d442bb8631a548a4432def", "productName": "Baby / cf857bce", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 73.5, "stock": 0, "salesQuantity": 1, @@ -28,7 +562,7 @@ { "productId": "060f0122cdc8f25db4a0d7359fdae7b0", "productName": "Watches Gifts / 060f0122", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, @@ -37,7 +571,7 @@ { "productId": "1ce47626d790bdfe279ad4cedc159009", "productName": "Furniture Decor / 1ce47626", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, @@ -46,7 +580,7 @@ { "productId": "220bc6afbb138c2e99fffc0f9838afd4", "productName": "Computers Accessories / 220bc6af", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, @@ -55,7 +589,7 @@ { "productId": "37dffde0476450e75dae423136954b0f", "productName": "Auto / 37dffde0", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, @@ -64,7 +598,7 @@ { "productId": "3b068029db5363533440150014d95d9b", "productName": "Baby / 3b068029", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, @@ -73,7 +607,7 @@ { "productId": "4d99eefee32b7d89a78915c19936c8a4", "productName": "Auto / 4d99eefe", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, @@ -82,7 +616,7 @@ { "productId": "4fe644d766c7566dbc46fb851363cb3b", "productName": "Art / 4fe644d7", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, @@ -91,7 +625,7 @@ { "productId": "6f3b5b605d91b7439c5e3f5a8dffeea7", "productName": "Watches Gifts / 6f3b5b60", - "reason": "出现低星评价,建议补充规格说明、物流预期与售后说明", + "reason": "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions.", "score": 72.0, "stock": 0, "salesQuantity": 0, diff --git a/docs/evaluation/agent-natural-language-batch-details.csv b/docs/evaluation/agent-natural-language-batch-details.csv new file mode 100644 index 0000000..c438326 --- /dev/null +++ b/docs/evaluation/agent-natural-language-batch-details.csv @@ -0,0 +1,281 @@ +caseNo,round,businessDate,scenario,expectedIntent,actualIntent,intentMatched,taskId,reportId,traceId,taskStatus,reportStatus,passed,wallClockDurationMs,taskDurationMs,toolInvocationCount,toolSuccessCount,toolCodes,markdownLength,gmv,orderCount,refundRate,negativeCount,productCandidateCount,adCost,adRoi,externalVisitors,errorMessage +1,1,2018-08-01,daily_review,daily_review,daily_review,True,172,137,tr_2bb45a1b652d4304b2ec85ef5fad8c20,SUCCESS,SUCCESS,True,778.5,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +2,1,2018-08-01,comment_risk,comment_risk,comment_risk,True,173,138,tr_b07c15275f57418780c442ecf412f439,SUCCESS,SUCCESS,True,690,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +3,1,2018-08-01,product_optimization,product_optimization,product_optimization,True,174,139,tr_6f97588b43204b9ea7a1ce7f9a6501e2,SUCCESS,SUCCESS,True,624.7,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +4,1,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,175,140,tr_6e160b3e27f843058f65ded4f6f4e2c6,SUCCESS,SUCCESS,True,701.8,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +5,1,2018-08-02,daily_review,daily_review,daily_review,True,176,141,tr_92b7de44702d448da02bab9371b9f6a9,SUCCESS,SUCCESS,True,768.7,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +6,1,2018-08-02,comment_risk,comment_risk,comment_risk,True,177,142,tr_75c324d4d53844d4abc8d445dfdbc68b,SUCCESS,SUCCESS,True,655.5,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +7,1,2018-08-02,product_optimization,product_optimization,product_optimization,True,178,143,tr_aa1159764c744b0caf3ce65515812cc0,SUCCESS,SUCCESS,True,778.1,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +8,1,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,179,144,tr_d9980283abb74e1b8f13a7e9cde6afb9,SUCCESS,SUCCESS,True,602.4,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +9,1,2018-08-03,daily_review,daily_review,daily_review,True,180,145,tr_807ea31b15e648aaaabd0d3aa02d5261,SUCCESS,SUCCESS,True,1061.1,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +10,1,2018-08-03,comment_risk,comment_risk,comment_risk,True,181,146,tr_c1028ff8f541400881e26b67c4585795,SUCCESS,SUCCESS,True,742,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +11,1,2018-08-03,product_optimization,product_optimization,product_optimization,True,182,147,tr_14c32b51de9a4c28aac87f7dae4dc9d0,SUCCESS,SUCCESS,True,683.3,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +12,1,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,183,148,tr_9ef3b532cc62407fab2f94ddeaf02a8d,SUCCESS,SUCCESS,True,551.9,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +13,1,2018-08-04,daily_review,daily_review,daily_review,True,184,149,tr_2e7f97b8982841ecb807c6ec447c6013,SUCCESS,SUCCESS,True,885,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +14,1,2018-08-04,comment_risk,comment_risk,comment_risk,True,185,150,tr_6cebe07b583e49808a107e83364bb33b,SUCCESS,SUCCESS,True,718.7,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +15,1,2018-08-04,product_optimization,product_optimization,product_optimization,True,186,151,tr_5b038eda0c0c4ae98ca94163b84c2584,SUCCESS,SUCCESS,True,651.8,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +16,1,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,187,152,tr_29a219df6b314b1294abe88416bb976b,SUCCESS,SUCCESS,True,540,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +17,1,2018-08-05,daily_review,daily_review,daily_review,True,188,153,tr_00f2e53e9cee422aab62fde94e640a11,SUCCESS,SUCCESS,True,935.8,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +18,1,2018-08-05,comment_risk,comment_risk,comment_risk,True,189,154,tr_5f43fb3846854b14acd81ccf51c7e6f3,SUCCESS,SUCCESS,True,738,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +19,1,2018-08-05,product_optimization,product_optimization,product_optimization,True,190,155,tr_42b836ee501c4ee597ea7ed435eaae35,SUCCESS,SUCCESS,True,553.2,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +20,1,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,191,156,tr_2eb16b4458e241d58a943e74e420673e,SUCCESS,SUCCESS,True,664.3,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +21,1,2018-08-06,daily_review,daily_review,daily_review,True,192,157,tr_c0839e8be50644efaab8509354e057e3,SUCCESS,SUCCESS,True,835.6,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +22,1,2018-08-06,comment_risk,comment_risk,comment_risk,True,193,158,tr_5af972731bcb41fbb45d010ff1075a6f,SUCCESS,SUCCESS,True,657.4,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +23,1,2018-08-06,product_optimization,product_optimization,product_optimization,True,194,159,tr_c56a3b7c6bcd486696745d16db537387,SUCCESS,SUCCESS,True,570.6,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +24,1,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,195,160,tr_56d2d787c42e42dcab985d55e1e5512e,SUCCESS,SUCCESS,True,790.5,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +25,1,2018-08-07,daily_review,daily_review,daily_review,True,196,161,tr_494e62ed1f384897871063ea142e1bc3,SUCCESS,SUCCESS,True,948.1,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +26,1,2018-08-07,comment_risk,comment_risk,comment_risk,True,197,162,tr_c0b7cddfafcd4e1f8dd64a046969d50e,SUCCESS,SUCCESS,True,630.8,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +27,1,2018-08-07,product_optimization,product_optimization,product_optimization,True,198,163,tr_8d9a2e2684364105b88cd6cbc5de4b2a,SUCCESS,SUCCESS,True,595.8,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +28,1,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,199,164,tr_19da98b9a588477cab462b5ea40bb452,SUCCESS,SUCCESS,True,589.9,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +29,2,2018-08-01,daily_review,daily_review,daily_review,True,200,165,tr_d203d12652db4a8caf1c0ece7a36909c,SUCCESS,SUCCESS,True,867.2,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +30,2,2018-08-01,comment_risk,comment_risk,comment_risk,True,201,166,tr_abd67e629f6942e3bf0c7ea0abdf95dd,SUCCESS,SUCCESS,True,735.2,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +31,2,2018-08-01,product_optimization,product_optimization,product_optimization,True,202,167,tr_eee7064c043a4f75b5f809045a2c7492,SUCCESS,SUCCESS,True,631.7,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +32,2,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,203,168,tr_b76b2c92fab04e93bd58329351c67f14,SUCCESS,SUCCESS,True,571.4,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +33,2,2018-08-02,daily_review,daily_review,daily_review,True,204,169,tr_fec3c94c74c8432a9ee599bae5c038fa,SUCCESS,SUCCESS,True,724.4,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +34,2,2018-08-02,comment_risk,comment_risk,comment_risk,True,205,170,tr_880884a30a5e4fd89a1570ec32378208,SUCCESS,SUCCESS,True,599.1,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +35,2,2018-08-02,product_optimization,product_optimization,product_optimization,True,206,171,tr_b9dac41c4ed541ad8464fbc94f8146da,SUCCESS,SUCCESS,True,609.7,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +36,2,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,207,172,tr_c4a99eb393d94a87ac72efc4ac2ab247,SUCCESS,SUCCESS,True,602.5,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +37,2,2018-08-03,daily_review,daily_review,daily_review,True,208,173,tr_9cdae40cbac74025b289bd2e49bea46a,SUCCESS,SUCCESS,True,874.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +38,2,2018-08-03,comment_risk,comment_risk,comment_risk,True,209,174,tr_7400d056997e4d7a83ecc73e52f78665,SUCCESS,SUCCESS,True,717.4,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +39,2,2018-08-03,product_optimization,product_optimization,product_optimization,True,210,175,tr_9c2fc146522d4aaba208d56e7363540c,SUCCESS,SUCCESS,True,577.4,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +40,2,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,211,176,tr_53c0aa5a88f24449aec51c917292f09f,SUCCESS,SUCCESS,True,612.4,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +41,2,2018-08-04,daily_review,daily_review,daily_review,True,212,177,tr_5b34a0a74876452d8f1e13c63f659b9a,SUCCESS,SUCCESS,True,764,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +42,2,2018-08-04,comment_risk,comment_risk,comment_risk,True,213,178,tr_d1115470fda34bb29b58fac44f24d345,SUCCESS,SUCCESS,True,645.2,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +43,2,2018-08-04,product_optimization,product_optimization,product_optimization,True,214,179,tr_810c2eefa3eb4adc8d541dc7162cd93f,SUCCESS,SUCCESS,True,653.2,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +44,2,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,215,180,tr_fd87c658685f4cc9a963c329997cf404,SUCCESS,SUCCESS,True,575.1,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +45,2,2018-08-05,daily_review,daily_review,daily_review,True,216,181,tr_18046be341c74af08d3a5d988bcda132,SUCCESS,SUCCESS,True,844.6,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +46,2,2018-08-05,comment_risk,comment_risk,comment_risk,True,217,182,tr_6f83195519494c32bf0c76e358e0b96c,SUCCESS,SUCCESS,True,640.5,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +47,2,2018-08-05,product_optimization,product_optimization,product_optimization,True,218,183,tr_c153e90a7a45464db0c69c4cd0cccc6c,SUCCESS,SUCCESS,True,537.5,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +48,2,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,219,184,tr_5c70b8e74efa424cb9c7d7c799952dd7,SUCCESS,SUCCESS,True,649.7,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +49,2,2018-08-06,daily_review,daily_review,daily_review,True,220,185,tr_fe92c5716be54abe8ec9e3cfa5a85b50,SUCCESS,SUCCESS,True,788.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +50,2,2018-08-06,comment_risk,comment_risk,comment_risk,True,221,186,tr_752d8fdb3c7a4a1ba83636769e323a5b,SUCCESS,SUCCESS,True,559.1,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +51,2,2018-08-06,product_optimization,product_optimization,product_optimization,True,222,187,tr_4d3f91f5e7cf44f1ba8498b08b22d06e,SUCCESS,SUCCESS,True,597.6,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +52,2,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,223,188,tr_9451d5c1b2a741a1811f5e5a58d5fab7,SUCCESS,SUCCESS,True,677.9,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +53,2,2018-08-07,daily_review,daily_review,daily_review,True,224,189,tr_cd110939efbf4d3685fbf81ca89ae996,SUCCESS,SUCCESS,True,817.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +54,2,2018-08-07,comment_risk,comment_risk,comment_risk,True,225,190,tr_f4d0cef27f4a42198aed3836a291ec6c,SUCCESS,SUCCESS,True,591.8,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +55,2,2018-08-07,product_optimization,product_optimization,product_optimization,True,226,191,tr_9ffe73afa9324db4969f0ebd8c84b46e,SUCCESS,SUCCESS,True,560.2,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +56,2,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,227,192,tr_15f2a5d5488e4e1f8fe7240983642f71,SUCCESS,SUCCESS,True,705.5,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +57,3,2018-08-01,daily_review,daily_review,daily_review,True,228,193,tr_9aa7da1d688f417eae4b320199d80e1f,SUCCESS,SUCCESS,True,835,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +58,3,2018-08-01,comment_risk,comment_risk,comment_risk,True,229,194,tr_ad668c2398c74dcea02d0cc669156923,SUCCESS,SUCCESS,True,599.7,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +59,3,2018-08-01,product_optimization,product_optimization,product_optimization,True,230,195,tr_8477e30cc4a044d49bae7ca4a5d6a119,SUCCESS,SUCCESS,True,578,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +60,3,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,231,196,tr_0894f63e192348efb30c4a9112a45e56,SUCCESS,SUCCESS,True,652.1,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +61,3,2018-08-02,daily_review,daily_review,daily_review,True,232,197,tr_628e45511a2043a49bf5ba98832fd38d,SUCCESS,SUCCESS,True,770,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +62,3,2018-08-02,comment_risk,comment_risk,comment_risk,True,233,198,tr_399ae283fd37476899b6499bf619e748,SUCCESS,SUCCESS,True,772.8,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +63,3,2018-08-02,product_optimization,product_optimization,product_optimization,True,234,199,tr_f98baeeac6a24652b47a2d586ac71c2a,SUCCESS,SUCCESS,True,577.8,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +64,3,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,235,200,tr_28b7304996204f179e3987d1dbdc8ff3,SUCCESS,SUCCESS,True,703,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +65,3,2018-08-03,daily_review,daily_review,daily_review,True,236,201,tr_c590937073424378a54935b7cf2ef0b7,SUCCESS,SUCCESS,True,794,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +66,3,2018-08-03,comment_risk,comment_risk,comment_risk,True,237,202,tr_857373b19cc948a7997b7723e7197509,SUCCESS,SUCCESS,True,603.1,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +67,3,2018-08-03,product_optimization,product_optimization,product_optimization,True,238,203,tr_4a54933800fc4319a0ed44da87e7b9c4,SUCCESS,SUCCESS,True,592.2,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +68,3,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,239,204,tr_309496b9fa0340eba34bf2c24bb97684,SUCCESS,SUCCESS,True,582.8,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +69,3,2018-08-04,daily_review,daily_review,daily_review,True,240,205,tr_5c9c13b945c34cdb8940c6c130443b28,SUCCESS,SUCCESS,True,831.5,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +70,3,2018-08-04,comment_risk,comment_risk,comment_risk,True,241,206,tr_7c806143a6a841afaae8a288a0680fda,SUCCESS,SUCCESS,True,758.2,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +71,3,2018-08-04,product_optimization,product_optimization,product_optimization,True,242,207,tr_30d9c91c565a4d90b94650551f5d5df3,SUCCESS,SUCCESS,True,630.9,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +72,3,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,243,208,tr_d0f4a38a9a634482812fb57b8f504a27,SUCCESS,SUCCESS,True,564.8,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +73,3,2018-08-05,daily_review,daily_review,daily_review,True,244,209,tr_f45db822dede4ec4a52be96ca18a40de,SUCCESS,SUCCESS,True,933.2,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +74,3,2018-08-05,comment_risk,comment_risk,comment_risk,True,245,210,tr_31b94552d657489780e2283567f5abf0,SUCCESS,SUCCESS,True,612.3,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +75,3,2018-08-05,product_optimization,product_optimization,product_optimization,True,246,211,tr_72cccd42176748bea1b0d2a7623689c5,SUCCESS,SUCCESS,True,582.4,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +76,3,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,247,212,tr_5342dbe57e564f6abdb4e72a15531f23,SUCCESS,SUCCESS,True,583.4,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +77,3,2018-08-06,daily_review,daily_review,daily_review,True,248,213,tr_0091763aabb44dd0aa70941f255a680d,SUCCESS,SUCCESS,True,753,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +78,3,2018-08-06,comment_risk,comment_risk,comment_risk,True,249,214,tr_57eab59691d1468a91024b2324bf452a,SUCCESS,SUCCESS,True,528.6,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +79,3,2018-08-06,product_optimization,product_optimization,product_optimization,True,250,215,tr_7c0157c298a148a5aa79ce964c1c05ac,SUCCESS,SUCCESS,True,589.9,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +80,3,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,251,216,tr_9add05a34fba4ab581d329cac3d7b143,SUCCESS,SUCCESS,True,758.9,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +81,3,2018-08-07,daily_review,daily_review,daily_review,True,252,217,tr_1693374a9d854bddb71f72a49e5106d4,SUCCESS,SUCCESS,True,873.3,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +82,3,2018-08-07,comment_risk,comment_risk,comment_risk,True,253,218,tr_9c459f3c994e42cfa002dbb42b529a26,SUCCESS,SUCCESS,True,720.5,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +83,3,2018-08-07,product_optimization,product_optimization,product_optimization,True,254,219,tr_2cc46ff1161844fdac697e9718c9e5ec,SUCCESS,SUCCESS,True,573.3,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +84,3,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,255,220,tr_f92d0ac8404b464e9a4c1208184dcc3e,SUCCESS,SUCCESS,True,586.1,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +85,4,2018-08-01,daily_review,daily_review,daily_review,True,256,221,tr_6ca054ec1eb54ee3817def0ef989a40c,SUCCESS,SUCCESS,True,700.4,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +86,4,2018-08-01,comment_risk,comment_risk,comment_risk,True,257,222,tr_a64a7d626427481897a8ff70adf6da8f,SUCCESS,SUCCESS,True,624.8,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +87,4,2018-08-01,product_optimization,product_optimization,product_optimization,True,258,223,tr_196196235a22423fafe20d3ace0f8414,SUCCESS,SUCCESS,True,633.6,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +88,4,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,259,224,tr_d5896f2eb4744f899a1891806419e80c,SUCCESS,SUCCESS,True,582.7,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +89,4,2018-08-02,daily_review,daily_review,daily_review,True,260,225,tr_11527145cc0849d592f6ea65f3acf83e,SUCCESS,SUCCESS,True,788.1,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +90,4,2018-08-02,comment_risk,comment_risk,comment_risk,True,261,226,tr_fbbedf3916c44bc48be7717099d65c8d,SUCCESS,SUCCESS,True,625.9,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +91,4,2018-08-02,product_optimization,product_optimization,product_optimization,True,262,227,tr_0e176b15443c4efca3e7747a68bf1a84,SUCCESS,SUCCESS,True,565.4,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +92,4,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,263,228,tr_c0b4619a0e0249fa8a28e10551f49b17,SUCCESS,SUCCESS,True,546.3,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +93,4,2018-08-03,daily_review,daily_review,daily_review,True,264,229,tr_18d49493719f4f379d5c4215553342a1,SUCCESS,SUCCESS,True,722.1,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +94,4,2018-08-03,comment_risk,comment_risk,comment_risk,True,265,230,tr_5357729fe2264e9ead440ee81cdd4ed2,SUCCESS,SUCCESS,True,664.7,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +95,4,2018-08-03,product_optimization,product_optimization,product_optimization,True,266,231,tr_da94e6290c2747408e151a8a2ed5a032,SUCCESS,SUCCESS,True,780.2,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +96,4,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,267,232,tr_816a804596b549a9bb6904be121e5632,SUCCESS,SUCCESS,True,568,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +97,4,2018-08-04,daily_review,daily_review,daily_review,True,268,233,tr_fa62425da81c4f97af3ebdf81310cc7b,SUCCESS,SUCCESS,True,813.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +98,4,2018-08-04,comment_risk,comment_risk,comment_risk,True,269,234,tr_6262bf31f4ab49c48d75852a6eab9a8e,SUCCESS,SUCCESS,True,613.3,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +99,4,2018-08-04,product_optimization,product_optimization,product_optimization,True,270,235,tr_9711af5636c94017a32418482d04dc4b,SUCCESS,SUCCESS,True,569.1,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +100,4,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,271,236,tr_81cd8acabcb640d8982f31f7f0703aee,SUCCESS,SUCCESS,True,622.4,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +101,4,2018-08-05,daily_review,daily_review,daily_review,True,272,237,tr_4e499f5fa7744918b5334435cc2b95bf,SUCCESS,SUCCESS,True,751.3,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +102,4,2018-08-05,comment_risk,comment_risk,comment_risk,True,273,238,tr_1192136ec3ce4361be0a437dd70ec674,SUCCESS,SUCCESS,True,553.8,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +103,4,2018-08-05,product_optimization,product_optimization,product_optimization,True,274,239,tr_c1b5c608368047c9905806b1f6a1f4ce,SUCCESS,SUCCESS,True,584.1,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +104,4,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,275,240,tr_6cba31c738b14b02a4b1d95114bf651b,SUCCESS,SUCCESS,True,542.8,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +105,4,2018-08-06,daily_review,daily_review,daily_review,True,276,241,tr_eaa849cec15e496687b7c7163399d2ed,SUCCESS,SUCCESS,True,705.2,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +106,4,2018-08-06,comment_risk,comment_risk,comment_risk,True,277,242,tr_65b8d28086564bd6b0b8a900d1a55695,SUCCESS,SUCCESS,True,631.5,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +107,4,2018-08-06,product_optimization,product_optimization,product_optimization,True,278,243,tr_886671e1ea074e628c75dedad5c167fc,SUCCESS,SUCCESS,True,574.4,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +108,4,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,279,244,tr_c0a046c86f2a4c39b3f621b3aa54e035,SUCCESS,SUCCESS,True,590.7,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +109,4,2018-08-07,daily_review,daily_review,daily_review,True,280,245,tr_2a7ec0d840ba448e91761c02efc3ca54,SUCCESS,SUCCESS,True,710.5,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +110,4,2018-08-07,comment_risk,comment_risk,comment_risk,True,281,246,tr_21311dfacbed4a38b4a8ab7ab63a99ea,SUCCESS,SUCCESS,True,704.4,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +111,4,2018-08-07,product_optimization,product_optimization,product_optimization,True,282,247,tr_12172a20fc344a35819b701f0a3b2548,SUCCESS,SUCCESS,True,709.4,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +112,4,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,283,248,tr_2f79a2d2b9de40779312405467b2efed,SUCCESS,SUCCESS,True,697.2,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +113,5,2018-08-01,daily_review,daily_review,daily_review,True,284,249,tr_088a7f31fd8d41e5b27901d7445805bd,SUCCESS,SUCCESS,True,888.8,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +114,5,2018-08-01,comment_risk,comment_risk,comment_risk,True,285,250,tr_b9250f2158e647c5b157a53dc4768cbf,SUCCESS,SUCCESS,True,636.1,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +115,5,2018-08-01,product_optimization,product_optimization,product_optimization,True,286,251,tr_4f5d0948951b4c70996b3b9208b00e4d,SUCCESS,SUCCESS,True,625.1,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +116,5,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,287,252,tr_d8c7a16a0ace41d6bf16fe4ae818b9ef,SUCCESS,SUCCESS,True,580.4,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +117,5,2018-08-02,daily_review,daily_review,daily_review,True,288,253,tr_124139b78f304b128c40d51708191ee3,SUCCESS,SUCCESS,True,776.7,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +118,5,2018-08-02,comment_risk,comment_risk,comment_risk,True,289,254,tr_e2788a6c768445d0985c68d8b3b41cdc,SUCCESS,SUCCESS,True,682.1,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +119,5,2018-08-02,product_optimization,product_optimization,product_optimization,True,290,255,tr_fe4dac1aa5754318b67031ba54f99b23,SUCCESS,SUCCESS,True,523.5,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +120,5,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,291,256,tr_e44f68111615482fb0fa00b9fd6ba13e,SUCCESS,SUCCESS,True,839.9,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +121,5,2018-08-03,daily_review,daily_review,daily_review,True,292,257,tr_74daeb8257e54f32a524b772eb9b74eb,SUCCESS,SUCCESS,True,809.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +122,5,2018-08-03,comment_risk,comment_risk,comment_risk,True,293,258,tr_25fb36ae2245491aa9a83623418aa4c2,SUCCESS,SUCCESS,True,560.4,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +123,5,2018-08-03,product_optimization,product_optimization,product_optimization,True,294,259,tr_f77402ac55f84e99b56930ec2c8a1b5b,SUCCESS,SUCCESS,True,537.2,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +124,5,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,295,260,tr_03728ad8e2454f2a8b11e37062791216,SUCCESS,SUCCESS,True,609.9,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +125,5,2018-08-04,daily_review,daily_review,daily_review,True,296,261,tr_d7ab95484ea34b5a89fdc6be5c80f5f5,SUCCESS,SUCCESS,True,891.2,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +126,5,2018-08-04,comment_risk,comment_risk,comment_risk,True,297,262,tr_7793aaea358c4fa9a8d68fcfd3553799,SUCCESS,SUCCESS,True,617.3,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +127,5,2018-08-04,product_optimization,product_optimization,product_optimization,True,298,263,tr_0d6255533a1b4e63a1041a8ae1097b48,SUCCESS,SUCCESS,True,522.5,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +128,5,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,299,264,tr_ce41bfee50074ea19de4a742c2bb23f9,SUCCESS,SUCCESS,True,504.3,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +129,5,2018-08-05,daily_review,daily_review,daily_review,True,300,265,tr_4627c7eea2a54fb6a6b8596334f5bed6,SUCCESS,SUCCESS,True,659.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +130,5,2018-08-05,comment_risk,comment_risk,comment_risk,True,301,266,tr_cd1e8d5b6fa64565b61dc87489bdc877,SUCCESS,SUCCESS,True,536.9,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +131,5,2018-08-05,product_optimization,product_optimization,product_optimization,True,302,267,tr_849c9e887ce146d59150d71dd7a31b9f,SUCCESS,SUCCESS,True,616.6,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +132,5,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,303,268,tr_0634401fadc6489886ccc2b139a7ffb9,SUCCESS,SUCCESS,True,546.7,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +133,5,2018-08-06,daily_review,daily_review,daily_review,True,304,269,tr_b670caf2d8d641b69752d5c2ba7e0fbf,SUCCESS,SUCCESS,True,776.1,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +134,5,2018-08-06,comment_risk,comment_risk,comment_risk,True,305,270,tr_ca4fc91d73634e418a87833740ef6afb,SUCCESS,SUCCESS,True,539.1,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +135,5,2018-08-06,product_optimization,product_optimization,product_optimization,True,306,271,tr_2f714eba755141fcbc40bcd30183ed6e,SUCCESS,SUCCESS,True,526.5,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +136,5,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,307,272,tr_9a4ad31636114f05b06322f428e7bf94,SUCCESS,SUCCESS,True,514.1,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +137,5,2018-08-07,daily_review,daily_review,daily_review,True,308,273,tr_687f2afe5ddc459e8309d05231e03b15,SUCCESS,SUCCESS,True,686.1,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +138,5,2018-08-07,comment_risk,comment_risk,comment_risk,True,309,274,tr_b79e2e3f73b849c3a01f9949f1b45a74,SUCCESS,SUCCESS,True,532,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +139,5,2018-08-07,product_optimization,product_optimization,product_optimization,True,310,275,tr_d7818fec5eff4382bf7e3ec866ac743d,SUCCESS,SUCCESS,True,552,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +140,5,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,311,276,tr_2fbef193cb684335a75991be4b6981c8,SUCCESS,SUCCESS,True,616.4,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +141,6,2018-08-01,daily_review,daily_review,daily_review,True,312,277,tr_4793bef7a68e4a5ca8e6e4be8ac5d317,SUCCESS,SUCCESS,True,807.2,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +142,6,2018-08-01,comment_risk,comment_risk,comment_risk,True,313,278,tr_c54f8f0c22274ef68c3bba8fabf3a0ac,SUCCESS,SUCCESS,True,590,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +143,6,2018-08-01,product_optimization,product_optimization,product_optimization,True,314,279,tr_e8dd88ca252e487c965289c99ecd7de1,SUCCESS,SUCCESS,True,553.7,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +144,6,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,315,280,tr_7c4da0e3b06a4da894549f98b0a6e85d,SUCCESS,SUCCESS,True,527.9,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +145,6,2018-08-02,daily_review,daily_review,daily_review,True,316,281,tr_18219f7c38374335970d7004afc069fb,SUCCESS,SUCCESS,True,693.2,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +146,6,2018-08-02,comment_risk,comment_risk,comment_risk,True,317,282,tr_d1503daed12840f8997bff5ac84312ae,SUCCESS,SUCCESS,True,522.1,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +147,6,2018-08-02,product_optimization,product_optimization,product_optimization,True,318,283,tr_e367f3332bcd4ac2a3f09274c574a11e,SUCCESS,SUCCESS,True,688.8,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +148,6,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,319,284,tr_5e0d677b22c34b779ef1a961e91405a7,SUCCESS,SUCCESS,True,694.9,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +149,6,2018-08-03,daily_review,daily_review,daily_review,True,320,285,tr_3d94479d58914516b5b35a99be616c2e,SUCCESS,SUCCESS,True,745.2,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +150,6,2018-08-03,comment_risk,comment_risk,comment_risk,True,321,286,tr_c7403f51934a46c38e2658846377d167,SUCCESS,SUCCESS,True,619.3,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +151,6,2018-08-03,product_optimization,product_optimization,product_optimization,True,322,287,tr_d5d959d7afcd4fa89f298dcf2f24bcc2,SUCCESS,SUCCESS,True,550.4,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +152,6,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,323,288,tr_0580b82f83984061956cc2110c51293d,SUCCESS,SUCCESS,True,527.5,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +153,6,2018-08-04,daily_review,daily_review,daily_review,True,324,289,tr_4c563798ad014edb803ae40ac8f8ac16,SUCCESS,SUCCESS,True,714.9,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +154,6,2018-08-04,comment_risk,comment_risk,comment_risk,True,325,290,tr_c31d93942f0544998c62d61fe3a55947,SUCCESS,SUCCESS,True,528.4,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +155,6,2018-08-04,product_optimization,product_optimization,product_optimization,True,326,291,tr_4720a52954ad476eaf8c5b4d23675243,SUCCESS,SUCCESS,True,552.2,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +156,6,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,327,292,tr_8bd0deb6a36a46598b07fe1c3e460a8c,SUCCESS,SUCCESS,True,546.8,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +157,6,2018-08-05,daily_review,daily_review,daily_review,True,328,293,tr_b8c81756a2894d2392e685941f27be02,SUCCESS,SUCCESS,True,863.5,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +158,6,2018-08-05,comment_risk,comment_risk,comment_risk,True,329,294,tr_a43d5d9ab24e4a59b75dfe74a480760c,SUCCESS,SUCCESS,True,658.7,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +159,6,2018-08-05,product_optimization,product_optimization,product_optimization,True,330,295,tr_bf6b3a7ba666423db70995e23e3d4b4e,SUCCESS,SUCCESS,True,578.8,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +160,6,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,331,296,tr_bfdeabf9f1584cbba0b101b664dd1ba4,SUCCESS,SUCCESS,True,545,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +161,6,2018-08-06,daily_review,daily_review,daily_review,True,332,297,tr_325ec73ff28a4b67a52803987b7ea52b,SUCCESS,SUCCESS,True,770.8,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +162,6,2018-08-06,comment_risk,comment_risk,comment_risk,True,333,298,tr_b03f12fa523f4ba6b25a1184523bf082,SUCCESS,SUCCESS,True,537.8,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +163,6,2018-08-06,product_optimization,product_optimization,product_optimization,True,334,299,tr_b94a4d5e49b44bdda70058c69b6925eb,SUCCESS,SUCCESS,True,547.3,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +164,6,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,335,300,tr_c2059e87a5c444059b0839f486270174,SUCCESS,SUCCESS,True,556.6,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +165,6,2018-08-07,daily_review,daily_review,daily_review,True,336,301,tr_180c3a95533a4405a562029055b50df0,SUCCESS,SUCCESS,True,836.6,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +166,6,2018-08-07,comment_risk,comment_risk,comment_risk,True,337,302,tr_2cbc846a00804121b5074098d1b30504,SUCCESS,SUCCESS,True,652.2,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +167,6,2018-08-07,product_optimization,product_optimization,product_optimization,True,338,303,tr_37f58ceb86ce4822affccdf89f384584,SUCCESS,SUCCESS,True,597.8,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +168,6,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,339,304,tr_9bddac0f7cd94cf8ae56550c66728950,SUCCESS,SUCCESS,True,526.7,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +169,7,2018-08-01,daily_review,daily_review,daily_review,True,340,305,tr_665a9fa69e774fbdbc010d792fdb2135,SUCCESS,SUCCESS,True,703.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +170,7,2018-08-01,comment_risk,comment_risk,comment_risk,True,341,306,tr_35f199df5ebe43b8afb5bbb5c489bab9,SUCCESS,SUCCESS,True,516.1,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +171,7,2018-08-01,product_optimization,product_optimization,product_optimization,True,342,307,tr_6a8440e6e3354a0390f8744fe813ade5,SUCCESS,SUCCESS,True,536.2,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +172,7,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,343,308,tr_566bf12a8e6b495ea2faa0b66103824f,SUCCESS,SUCCESS,True,530.3,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +173,7,2018-08-02,daily_review,daily_review,daily_review,True,344,309,tr_67137acfd28044928cf74b7e38a0d1f9,SUCCESS,SUCCESS,True,705.3,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +174,7,2018-08-02,comment_risk,comment_risk,comment_risk,True,345,310,tr_4513a2e8e6644c86a305c7e37277108f,SUCCESS,SUCCESS,True,775.9,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +175,7,2018-08-02,product_optimization,product_optimization,product_optimization,True,346,311,tr_71c834aeda7f4a68ad5ea296a7186c7c,SUCCESS,SUCCESS,True,944.2,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +176,7,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,347,312,tr_55c895d9496044bd9950a30271697613,SUCCESS,SUCCESS,True,529.3,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +177,7,2018-08-03,daily_review,daily_review,daily_review,True,348,313,tr_c311ab4b6213440992fffbe579ab443e,SUCCESS,SUCCESS,True,746.3,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +178,7,2018-08-03,comment_risk,comment_risk,comment_risk,True,349,314,tr_697a11f1ae074b2eb84b6b4db7cc0b15,SUCCESS,SUCCESS,True,546.9,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +179,7,2018-08-03,product_optimization,product_optimization,product_optimization,True,350,315,tr_b67ea85de6404d65909f4c72f19ea65a,SUCCESS,SUCCESS,True,596.3,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +180,7,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,351,316,tr_1d26b57b4e95458bad977f69ad5d0f85,SUCCESS,SUCCESS,True,804.7,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +181,7,2018-08-04,daily_review,daily_review,daily_review,True,352,317,tr_cff6472d1ef140449e728571773fe296,SUCCESS,SUCCESS,True,822.8,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +182,7,2018-08-04,comment_risk,comment_risk,comment_risk,True,353,318,tr_4baaa9fdae17414a9c9abdfec15854f2,SUCCESS,SUCCESS,True,521.7,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +183,7,2018-08-04,product_optimization,product_optimization,product_optimization,True,354,319,tr_23ab767eccab4aa0880ab12c3d3b6b02,SUCCESS,SUCCESS,True,523.4,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +184,7,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,355,320,tr_738a4ad5dcae4f1091874f90883ebec3,SUCCESS,SUCCESS,True,525.9,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +185,7,2018-08-05,daily_review,daily_review,daily_review,True,356,321,tr_117e0d311d4c40ce8edcb4d4ae543f26,SUCCESS,SUCCESS,True,764.2,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +186,7,2018-08-05,comment_risk,comment_risk,comment_risk,True,357,322,tr_422d1150e88d4c5d92bff70cc14b1e43,SUCCESS,SUCCESS,True,530.4,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +187,7,2018-08-05,product_optimization,product_optimization,product_optimization,True,358,323,tr_c447056d2bf747d7bee0da21c5780ed9,SUCCESS,SUCCESS,True,573.1,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +188,7,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,359,324,tr_32fd426e39ea4206a36c208d54033871,SUCCESS,SUCCESS,True,520.1,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +189,7,2018-08-06,daily_review,daily_review,daily_review,True,360,325,tr_d04f1ac42ff0476585f7ca1654b3f3b2,SUCCESS,SUCCESS,True,670.8,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +190,7,2018-08-06,comment_risk,comment_risk,comment_risk,True,361,326,tr_0bf40a800ad54781a811022ed4edf757,SUCCESS,SUCCESS,True,529.7,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +191,7,2018-08-06,product_optimization,product_optimization,product_optimization,True,362,327,tr_b301f2399cef460d98fbcdc3b3f07348,SUCCESS,SUCCESS,True,744.6,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +192,7,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,363,328,tr_bc802661f7da4cc29fc13572593c1aa9,SUCCESS,SUCCESS,True,601.7,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +193,7,2018-08-07,daily_review,daily_review,daily_review,True,364,329,tr_1f7a7e1c016743ad8b52bce71ff31afa,SUCCESS,SUCCESS,True,765.4,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +194,7,2018-08-07,comment_risk,comment_risk,comment_risk,True,365,330,tr_9bc2314c73be48e0aecef8cc83b06519,SUCCESS,SUCCESS,True,561.6,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +195,7,2018-08-07,product_optimization,product_optimization,product_optimization,True,366,331,tr_30e18c0d5bba4bc8a188c6af271cb4fe,SUCCESS,SUCCESS,True,527,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +196,7,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,367,332,tr_3f1f76f87beb43ceb43a057ab5446843,SUCCESS,SUCCESS,True,525.4,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +197,8,2018-08-01,daily_review,daily_review,daily_review,True,368,333,tr_881bda2175f94fb1b99182d05cf2b38c,SUCCESS,SUCCESS,True,797.2,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +198,8,2018-08-01,comment_risk,comment_risk,comment_risk,True,369,334,tr_da69cb07ff694a0cbac861d4bdebd977,SUCCESS,SUCCESS,True,507,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +199,8,2018-08-01,product_optimization,product_optimization,product_optimization,True,370,335,tr_7bf6288de3eb404196630941bc4833c3,SUCCESS,SUCCESS,True,777.7,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +200,8,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,371,336,tr_823e881332e34f29b89da8310acb9bef,SUCCESS,SUCCESS,True,647,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +201,8,2018-08-02,daily_review,daily_review,daily_review,True,372,337,tr_fc4c4094248e46369ba29e3738398516,SUCCESS,SUCCESS,True,869,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +202,8,2018-08-02,comment_risk,comment_risk,comment_risk,True,373,338,tr_a310cf3b7f7f40299ca34145c7908308,SUCCESS,SUCCESS,True,545.8,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +203,8,2018-08-02,product_optimization,product_optimization,product_optimization,True,374,339,tr_0261e353d50b4d178fb6d8b4f769fb58,SUCCESS,SUCCESS,True,552.8,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +204,8,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,375,340,tr_5098d5d04f2c42e6ad9d89eb538c70b1,SUCCESS,SUCCESS,True,542.1,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +205,8,2018-08-03,daily_review,daily_review,daily_review,True,376,341,tr_022cce6730de4206aee8d79978a3aec7,SUCCESS,SUCCESS,True,686.2,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +206,8,2018-08-03,comment_risk,comment_risk,comment_risk,True,377,342,tr_c7006e85f21c4512a4548645b8e85a1b,SUCCESS,SUCCESS,True,537.6,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +207,8,2018-08-03,product_optimization,product_optimization,product_optimization,True,378,343,tr_b32950e5fc4f44c7925c0a15cc42cc4a,SUCCESS,SUCCESS,True,762.7,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +208,8,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,379,344,tr_4fa9439ec9654786887ca8a7d7ebead5,SUCCESS,SUCCESS,True,662.6,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +209,8,2018-08-04,daily_review,daily_review,daily_review,True,380,345,tr_c80d91b23ffc4b3bbc1b156adf7b23b2,SUCCESS,SUCCESS,True,766.7,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +210,8,2018-08-04,comment_risk,comment_risk,comment_risk,True,381,346,tr_d718259190f84914a4eed1d2766e6000,SUCCESS,SUCCESS,True,506.4,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +211,8,2018-08-04,product_optimization,product_optimization,product_optimization,True,382,347,tr_af0169ec38664e97b198655b36a5bde8,SUCCESS,SUCCESS,True,544.2,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +212,8,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,383,348,tr_5fa94a1d182d4ec88e78cc64577c1f8c,SUCCESS,SUCCESS,True,515.7,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +213,8,2018-08-05,daily_review,daily_review,daily_review,True,384,349,tr_1e380d277442448caca3c66b2743d084,SUCCESS,SUCCESS,True,664.2,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +214,8,2018-08-05,comment_risk,comment_risk,comment_risk,True,385,350,tr_66e3c8e622544f79a71c284e098af8fb,SUCCESS,SUCCESS,True,492.5,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +215,8,2018-08-05,product_optimization,product_optimization,product_optimization,True,386,351,tr_67d0544d02d24444a4dae9afa34e8ca6,SUCCESS,SUCCESS,True,502.6,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +216,8,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,387,352,tr_1cca4337f3514737b729a99f40cfe375,SUCCESS,SUCCESS,True,767.1,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +217,8,2018-08-06,daily_review,daily_review,daily_review,True,388,353,tr_3311ef303cec444dbadfa2eb75563f9b,SUCCESS,SUCCESS,True,853.6,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +218,8,2018-08-06,comment_risk,comment_risk,comment_risk,True,389,354,tr_2cd13237e6084a039177ef94e5269904,SUCCESS,SUCCESS,True,560.5,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +219,8,2018-08-06,product_optimization,product_optimization,product_optimization,True,390,355,tr_f7064ae3ad554f0893a1eebd20128a5a,SUCCESS,SUCCESS,True,531.7,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +220,8,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,391,356,tr_00b224390fe14922989c3a36905f5bd8,SUCCESS,SUCCESS,True,515.8,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +221,8,2018-08-07,daily_review,daily_review,daily_review,True,392,357,tr_b02954806f3540b8a7477affe0653994,SUCCESS,SUCCESS,True,709,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +222,8,2018-08-07,comment_risk,comment_risk,comment_risk,True,393,358,tr_a2d3e1ff1dda42cdb2b6eb7e156e93c8,SUCCESS,SUCCESS,True,520.1,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +223,8,2018-08-07,product_optimization,product_optimization,product_optimization,True,394,359,tr_838c0086731a4057aa5e98d46793c42d,SUCCESS,SUCCESS,True,536.4,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +224,8,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,395,360,tr_3a9d384e4ebb42468d637e82840d9a45,SUCCESS,SUCCESS,True,783.6,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +225,9,2018-08-01,daily_review,daily_review,daily_review,True,396,361,tr_4fe06cd392544639b3178a0fda3b733f,SUCCESS,SUCCESS,True,792.9,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +226,9,2018-08-01,comment_risk,comment_risk,comment_risk,True,397,362,tr_cb1f805b116f4dc4bff89f8c7aabc4f5,SUCCESS,SUCCESS,True,821.4,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +227,9,2018-08-01,product_optimization,product_optimization,product_optimization,True,398,363,tr_223e09a2e494436cac22e72deb49f503,SUCCESS,SUCCESS,True,565.6,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +228,9,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,399,364,tr_6ccce95559794329a808793f1f7becef,SUCCESS,SUCCESS,True,628,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +229,9,2018-08-02,daily_review,daily_review,daily_review,True,400,365,tr_c767ce52fa544f39bc1b349960281ca3,SUCCESS,SUCCESS,True,650.5,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +230,9,2018-08-02,comment_risk,comment_risk,comment_risk,True,401,366,tr_63ab38d1c41f4d6589843f533fd0d644,SUCCESS,SUCCESS,True,523.1,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +231,9,2018-08-02,product_optimization,product_optimization,product_optimization,True,402,367,tr_c6175978136648539b7ad1a969e4ab34,SUCCESS,SUCCESS,True,491.6,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +232,9,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,403,368,tr_722b4ed43906415c94cd12ee972aaea2,SUCCESS,SUCCESS,True,524.9,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +233,9,2018-08-03,daily_review,daily_review,daily_review,True,404,369,tr_e35e653944ce42aab1b1b23592512587,SUCCESS,SUCCESS,True,684.3,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +234,9,2018-08-03,comment_risk,comment_risk,comment_risk,True,405,370,tr_9f7874a7958c4a57b2f9a8b18046cf2a,SUCCESS,SUCCESS,True,547.9,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +235,9,2018-08-03,product_optimization,product_optimization,product_optimization,True,406,371,tr_eb1965835e5d44a88394ada6f908bfc5,SUCCESS,SUCCESS,True,517.3,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +236,9,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,407,372,tr_99661b9edf3d4d0faaaf1984d2520af0,SUCCESS,SUCCESS,True,534.4,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +237,9,2018-08-04,daily_review,daily_review,daily_review,True,408,373,tr_3a2af64f71b24201a1d17c8151e262a8,SUCCESS,SUCCESS,True,698.1,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +238,9,2018-08-04,comment_risk,comment_risk,comment_risk,True,409,374,tr_9e01dcfe6dde435883797f092b6608a0,SUCCESS,SUCCESS,True,522.5,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +239,9,2018-08-04,product_optimization,product_optimization,product_optimization,True,410,375,tr_224baa2b0fc64232834e485161daf729,SUCCESS,SUCCESS,True,571.2,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +240,9,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,411,376,tr_c9a9125b5a7348c48d5d156931486ca0,SUCCESS,SUCCESS,True,551.1,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +241,9,2018-08-05,daily_review,daily_review,daily_review,True,412,377,tr_144f16e510d44e6392477152beb28231,SUCCESS,SUCCESS,True,1006.7,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +242,9,2018-08-05,comment_risk,comment_risk,comment_risk,True,413,378,tr_397b58ccf4904e7eb7b1afd0547dabae,SUCCESS,SUCCESS,True,671.4,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +243,9,2018-08-05,product_optimization,product_optimization,product_optimization,True,414,379,tr_fc2820196ec8400bb6742207985a593a,SUCCESS,SUCCESS,True,666.7,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +244,9,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,415,380,tr_30a89aefc88141978bc52f678eca9b73,SUCCESS,SUCCESS,True,523.1,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +245,9,2018-08-06,daily_review,daily_review,daily_review,True,416,381,tr_4cb3bb345a324113a33387fc0eb008e1,SUCCESS,SUCCESS,True,705.9,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +246,9,2018-08-06,comment_risk,comment_risk,comment_risk,True,417,382,tr_69b2d874e50d438fa2ef9706d82fd798,SUCCESS,SUCCESS,True,513.5,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +247,9,2018-08-06,product_optimization,product_optimization,product_optimization,True,418,383,tr_22742e8700e84ea9b6edcdd5126321b5,SUCCESS,SUCCESS,True,529.4,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +248,9,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,419,384,tr_d8709d92f7f941a0b332fab64a9ecf18,SUCCESS,SUCCESS,True,550.5,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +249,9,2018-08-07,daily_review,daily_review,daily_review,True,420,385,tr_607a5335293d4f2ea6071ea5668d0412,SUCCESS,SUCCESS,True,995.8,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +250,9,2018-08-07,comment_risk,comment_risk,comment_risk,True,421,386,tr_6eb0f895b7ed4f6182b5bcf46c489103,SUCCESS,SUCCESS,True,715.3,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +251,9,2018-08-07,product_optimization,product_optimization,product_optimization,True,422,387,tr_34652ec19d4d4a70bb93f5347308622b,SUCCESS,SUCCESS,True,558.5,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +252,9,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,423,388,tr_4bc72877f1194bc385b9309df9c26d37,SUCCESS,SUCCESS,True,548.5,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, +253,10,2018-08-01,daily_review,daily_review,daily_review,True,424,389,tr_026d05af6746462fbf0117ea74a8d45d,SUCCESS,SUCCESS,True,698,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2961,48850.81,311,0.0116,58,10,,9.1229,, +254,10,2018-08-01,comment_risk,comment_risk,comment_risk,True,425,390,tr_e509af7c337e4043982b38b95c38ebc9,SUCCESS,SUCCESS,True,551.6,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1975,48850.81,311,0.0116,58,10,,,, +255,10,2018-08-01,product_optimization,product_optimization,product_optimization,True,426,391,tr_87be7eff1bf941d199b60abc7f76a2d2,SUCCESS,SUCCESS,True,682.9,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1907,48850.81,311,0.0116,58,10,,,, +256,10,2018-08-01,ad_anomaly,ad_anomaly,ad_anomaly,True,427,392,tr_14bf1abd530e40bf95dd728ecc94b0b4,SUCCESS,SUCCESS,True,555.5,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1063,48850.81,311,0.0116,0,0,,9.1229,, +257,10,2018-08-02,daily_review,daily_review,daily_review,True,428,393,tr_942c9b1a54b54ee7be7bed45bf122c1e,SUCCESS,SUCCESS,True,856.5,0,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2997,45932.7,302,0.0074,59,10,,8.9793,, +258,10,2018-08-02,comment_risk,comment_risk,comment_risk,True,429,394,tr_e778a1da60c049c182f2143a4b3e15d0,SUCCESS,SUCCESS,True,583.4,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2016,45932.7,302,0.0074,59,10,,,, +259,10,2018-08-02,product_optimization,product_optimization,product_optimization,True,430,395,tr_eed47de2848144e4b3317464057300f6,SUCCESS,SUCCESS,True,559.7,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1947,45932.7,302,0.0074,59,10,,,, +260,10,2018-08-02,ad_anomaly,ad_anomaly,ad_anomaly,True,431,396,tr_cb09cfdcd6fa439d8afdec4b5f29fff8,SUCCESS,SUCCESS,True,545.9,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1061,45932.7,302,0.0074,0,0,,8.9793,, +261,10,2018-08-03,daily_review,daily_review,daily_review,True,432,397,tr_ba53da11041b4f6499f4dd4fb22f9f09,SUCCESS,SUCCESS,True,701.6,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2919,49517.59,314,0.0062,50,10,,9.6186,, +262,10,2018-08-03,comment_risk,comment_risk,comment_risk,True,433,398,tr_375c925a028c4ed19989826b76bb6fb3,SUCCESS,SUCCESS,True,525.9,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1934,49517.59,314,0.0062,50,10,,,, +263,10,2018-08-03,product_optimization,product_optimization,product_optimization,True,434,399,tr_f9dd4cee5bb847cc914e7c051e941061,SUCCESS,SUCCESS,True,501.9,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1866,49517.59,314,0.0062,50,10,,,, +264,10,2018-08-03,ad_anomaly,ad_anomaly,ad_anomaly,True,435,400,tr_4d04826a0b424dd4ae81d750405a5a61,SUCCESS,SUCCESS,True,511.1,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1062,49517.59,314,0.0062,0,0,,9.6186,, +265,10,2018-08-04,daily_review,daily_review,daily_review,True,436,401,tr_a4db04b4d63e4b749afa952ab48f03dd,SUCCESS,SUCCESS,True,687.1,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,3016,41239.97,245,0.004,66,10,,9.6852,, +266,10,2018-08-04,comment_risk,comment_risk,comment_risk,True,437,402,tr_cfd1a13cd8964cea8b48a608e2342d82,SUCCESS,SUCCESS,True,743.5,1000,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,2030,41239.97,245,0.004,66,10,,,, +267,10,2018-08-04,product_optimization,product_optimization,product_optimization,True,438,403,tr_72b8c7eb07be4064bae863750d472dc9,SUCCESS,SUCCESS,True,619.3,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1962,41239.97,245,0.004,66,10,,,, +268,10,2018-08-04,ad_anomaly,ad_anomaly,ad_anomaly,True,439,404,tr_606da4675f0a4276bd774e4052267776,SUCCESS,SUCCESS,True,567.2,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,41239.97,245,0.004,0,0,,9.6852,, +269,10,2018-08-05,daily_review,daily_review,daily_review,True,440,405,tr_e7404b4c27584c9e91920c3ccb8e0e73,SUCCESS,SUCCESS,True,680.4,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2983,42272.07,276,0.0046,27,10,,8.5506,, +270,10,2018-08-05,comment_risk,comment_risk,comment_risk,True,441,406,tr_86b1554332f341b88b1f7ce545c88d36,SUCCESS,SUCCESS,True,498.3,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1996,42272.07,276,0.0046,27,10,,,, +271,10,2018-08-05,product_optimization,product_optimization,product_optimization,True,442,407,tr_481614c9ec4142ecaa0cc40bae19f0a0,SUCCESS,SUCCESS,True,566.2,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1928,42272.07,276,0.0046,27,10,,,, +272,10,2018-08-05,ad_anomaly,ad_anomaly,ad_anomaly,True,443,408,tr_15347c58e1034938bf24c5b6560ef616,SUCCESS,SUCCESS,True,510,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1066,42272.07,276,0.0046,0,0,,8.5506,, +273,10,2018-08-06,daily_review,daily_review,daily_review,True,444,409,tr_ffe7bfb6ae7847e1bb7569aafa350f64,SUCCESS,SUCCESS,True,662.1,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2337,65860.43,372,0.0415,2,2,,9.2969,, +274,10,2018-08-06,comment_risk,comment_risk,comment_risk,True,445,410,tr_8603175d19954d27a70583801c0fa20a,SUCCESS,SUCCESS,True,515,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1367,65860.43,372,0.0415,2,2,,,, +275,10,2018-08-06,product_optimization,product_optimization,product_optimization,True,446,411,tr_3b47791b85d048f5ba12f0df97fe3aef,SUCCESS,SUCCESS,True,795.4,0,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1376,65860.43,372,0.0415,2,2,,,, +276,10,2018-08-06,ad_anomaly,ad_anomaly,ad_anomaly,True,447,412,tr_47e78b4aae4a471aa9036bb663931dd2,SUCCESS,SUCCESS,True,789.1,1000,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1060,65860.43,372,0.0415,0,0,,9.2969,, +277,10,2018-08-07,daily_review,daily_review,daily_review,True,448,413,tr_7725d2d5abd84c7391802df38415afb3,SUCCESS,SUCCESS,True,691.6,1000,6,6,order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review,2958,62057.77,370,0.0763,51,10,,9.0897,, +278,10,2018-08-07,comment_risk,comment_risk,comment_risk,True,449,414,tr_13d68ec9fd0b4974a4da750ff8af82f5,SUCCESS,SUCCESS,True,532.7,0,4,4,order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review,1970,62057.77,370,0.0763,51,10,,,, +279,10,2018-08-07,product_optimization,product_optimization,product_optimization,True,450,415,tr_8c953fb9442a44788e36c26ad10ac72d,SUCCESS,SUCCESS,True,521.8,1000,4,4,order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review,1902,62057.77,370,0.0763,51,10,,,, +280,10,2018-08-07,ad_anomaly,ad_anomaly,ad_anomaly,True,451,416,tr_de1192d7eebd4f98bac59548a20f9f4e,SUCCESS,SUCCESS,True,504.6,0,4,4,order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review,1065,62057.77,370,0.0763,0,0,,9.0897,, diff --git a/docs/evaluation/agent-natural-language-batch-summary.json b/docs/evaluation/agent-natural-language-batch-summary.json new file mode 100644 index 0000000..feaeb34 --- /dev/null +++ b/docs/evaluation/agent-natural-language-batch-summary.json @@ -0,0 +1,8462 @@ +{ + "generatedAt": "2026-07-28 20:12:45", + "evaluationName": "shopops-agent-natural-language-batch-v1", + "baseUrl": "http://localhost:8080", + "dateRange": { + "start": "2018-08-01", + "end": "2018-08-07", + "days": 7 + }, + "rounds": 10, + "caseCount": 280, + "passedCaseCount": 280, + "passRate": 100, + "successRate": 100, + "intentAccuracy": 100, + "toolInvocationCount": 1260, + "toolSuccessCount": 1260, + "toolInvocationSuccessRate": 100, + "avgToolInvocationCount": 4.5, + "avgWallClockDurationMs": 646.8, + "p95WallClockDurationMs": 863.5, + "avgTaskDurationMs": 514.3, + "statusBreakdown": { + "SUCCESS": 280 + }, + "scenarioBreakdown": [ + { + "scenario": "ad_anomaly", + "caseCount": 70, + "passedCaseCount": 70, + "successRate": 100, + "avgToolInvocationCount": 4, + "avgWallClockDurationMs": 598.1 + }, + { + "scenario": "comment_risk", + "caseCount": 70, + "passedCaseCount": 70, + "successRate": 100, + "avgToolInvocationCount": 4, + "avgWallClockDurationMs": 606.6 + }, + { + "scenario": "daily_review", + "caseCount": 70, + "passedCaseCount": 70, + "successRate": 100, + "avgToolInvocationCount": 6, + "avgWallClockDurationMs": 783.3 + }, + { + "scenario": "product_optimization", + "caseCount": 70, + "passedCaseCount": 70, + "successRate": 100, + "avgToolInvocationCount": 4, + "avgWallClockDurationMs": 599.1 + } + ], + "results": [ + { + "caseNo": 1, + "round": 1, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 172, + "reportId": 137, + "traceId": "tr_2bb45a1b652d4304b2ec85ef5fad8c20", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 778.5, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 2, + "round": 1, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 173, + "reportId": 138, + "traceId": "tr_b07c15275f57418780c442ecf412f439", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 690, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 3, + "round": 1, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 174, + "reportId": 139, + "traceId": "tr_6f97588b43204b9ea7a1ce7f9a6501e2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 624.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 4, + "round": 1, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 175, + "reportId": 140, + "traceId": "tr_6e160b3e27f843058f65ded4f6f4e2c6", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 701.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 5, + "round": 1, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 176, + "reportId": 141, + "traceId": "tr_92b7de44702d448da02bab9371b9f6a9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 768.7, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 6, + "round": 1, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 177, + "reportId": 142, + "traceId": "tr_75c324d4d53844d4abc8d445dfdbc68b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 655.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 7, + "round": 1, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 178, + "reportId": 143, + "traceId": "tr_aa1159764c744b0caf3ce65515812cc0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 778.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 8, + "round": 1, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 179, + "reportId": 144, + "traceId": "tr_d9980283abb74e1b8f13a7e9cde6afb9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 602.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 9, + "round": 1, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 180, + "reportId": 145, + "traceId": "tr_807ea31b15e648aaaabd0d3aa02d5261", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 1061.1, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 10, + "round": 1, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 181, + "reportId": 146, + "traceId": "tr_c1028ff8f541400881e26b67c4585795", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 742, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 11, + "round": 1, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 182, + "reportId": 147, + "traceId": "tr_14c32b51de9a4c28aac87f7dae4dc9d0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 683.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 12, + "round": 1, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 183, + "reportId": 148, + "traceId": "tr_9ef3b532cc62407fab2f94ddeaf02a8d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 551.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 13, + "round": 1, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 184, + "reportId": 149, + "traceId": "tr_2e7f97b8982841ecb807c6ec447c6013", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 885, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 14, + "round": 1, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 185, + "reportId": 150, + "traceId": "tr_6cebe07b583e49808a107e83364bb33b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 718.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 15, + "round": 1, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 186, + "reportId": 151, + "traceId": "tr_5b038eda0c0c4ae98ca94163b84c2584", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 651.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 16, + "round": 1, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 187, + "reportId": 152, + "traceId": "tr_29a219df6b314b1294abe88416bb976b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 540, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 17, + "round": 1, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 188, + "reportId": 153, + "traceId": "tr_00f2e53e9cee422aab62fde94e640a11", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 935.8, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 18, + "round": 1, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 189, + "reportId": 154, + "traceId": "tr_5f43fb3846854b14acd81ccf51c7e6f3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 738, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 19, + "round": 1, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 190, + "reportId": 155, + "traceId": "tr_42b836ee501c4ee597ea7ed435eaae35", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 553.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 20, + "round": 1, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 191, + "reportId": 156, + "traceId": "tr_2eb16b4458e241d58a943e74e420673e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 664.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 21, + "round": 1, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 192, + "reportId": 157, + "traceId": "tr_c0839e8be50644efaab8509354e057e3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 835.6, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 22, + "round": 1, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 193, + "reportId": 158, + "traceId": "tr_5af972731bcb41fbb45d010ff1075a6f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 657.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 23, + "round": 1, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 194, + "reportId": 159, + "traceId": "tr_c56a3b7c6bcd486696745d16db537387", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 570.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 24, + "round": 1, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 195, + "reportId": 160, + "traceId": "tr_56d2d787c42e42dcab985d55e1e5512e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 790.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 25, + "round": 1, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 196, + "reportId": 161, + "traceId": "tr_494e62ed1f384897871063ea142e1bc3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 948.1, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 26, + "round": 1, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 197, + "reportId": 162, + "traceId": "tr_c0b7cddfafcd4e1f8dd64a046969d50e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 630.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 27, + "round": 1, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 198, + "reportId": 163, + "traceId": "tr_8d9a2e2684364105b88cd6cbc5de4b2a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 595.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 28, + "round": 1, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 199, + "reportId": 164, + "traceId": "tr_19da98b9a588477cab462b5ea40bb452", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 589.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 29, + "round": 2, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 200, + "reportId": 165, + "traceId": "tr_d203d12652db4a8caf1c0ece7a36909c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 867.2, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 30, + "round": 2, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 201, + "reportId": 166, + "traceId": "tr_abd67e629f6942e3bf0c7ea0abdf95dd", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 735.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 31, + "round": 2, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 202, + "reportId": 167, + "traceId": "tr_eee7064c043a4f75b5f809045a2c7492", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 631.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 32, + "round": 2, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 203, + "reportId": 168, + "traceId": "tr_b76b2c92fab04e93bd58329351c67f14", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 571.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 33, + "round": 2, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 204, + "reportId": 169, + "traceId": "tr_fec3c94c74c8432a9ee599bae5c038fa", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 724.4, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 34, + "round": 2, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 205, + "reportId": 170, + "traceId": "tr_880884a30a5e4fd89a1570ec32378208", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 599.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 35, + "round": 2, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 206, + "reportId": 171, + "traceId": "tr_b9dac41c4ed541ad8464fbc94f8146da", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 609.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 36, + "round": 2, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 207, + "reportId": 172, + "traceId": "tr_c4a99eb393d94a87ac72efc4ac2ab247", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 602.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 37, + "round": 2, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 208, + "reportId": 173, + "traceId": "tr_9cdae40cbac74025b289bd2e49bea46a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 874.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 38, + "round": 2, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 209, + "reportId": 174, + "traceId": "tr_7400d056997e4d7a83ecc73e52f78665", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 717.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 39, + "round": 2, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 210, + "reportId": 175, + "traceId": "tr_9c2fc146522d4aaba208d56e7363540c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 577.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 40, + "round": 2, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 211, + "reportId": 176, + "traceId": "tr_53c0aa5a88f24449aec51c917292f09f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 612.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 41, + "round": 2, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 212, + "reportId": 177, + "traceId": "tr_5b34a0a74876452d8f1e13c63f659b9a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 764, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 42, + "round": 2, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 213, + "reportId": 178, + "traceId": "tr_d1115470fda34bb29b58fac44f24d345", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 645.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 43, + "round": 2, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 214, + "reportId": 179, + "traceId": "tr_810c2eefa3eb4adc8d541dc7162cd93f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 653.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 44, + "round": 2, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 215, + "reportId": 180, + "traceId": "tr_fd87c658685f4cc9a963c329997cf404", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 575.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 45, + "round": 2, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 216, + "reportId": 181, + "traceId": "tr_18046be341c74af08d3a5d988bcda132", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 844.6, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 46, + "round": 2, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 217, + "reportId": 182, + "traceId": "tr_6f83195519494c32bf0c76e358e0b96c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 640.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 47, + "round": 2, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 218, + "reportId": 183, + "traceId": "tr_c153e90a7a45464db0c69c4cd0cccc6c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 537.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 48, + "round": 2, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 219, + "reportId": 184, + "traceId": "tr_5c70b8e74efa424cb9c7d7c799952dd7", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 649.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 49, + "round": 2, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 220, + "reportId": 185, + "traceId": "tr_fe92c5716be54abe8ec9e3cfa5a85b50", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 788.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 50, + "round": 2, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 221, + "reportId": 186, + "traceId": "tr_752d8fdb3c7a4a1ba83636769e323a5b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 559.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 51, + "round": 2, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 222, + "reportId": 187, + "traceId": "tr_4d3f91f5e7cf44f1ba8498b08b22d06e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 597.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 52, + "round": 2, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 223, + "reportId": 188, + "traceId": "tr_9451d5c1b2a741a1811f5e5a58d5fab7", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 677.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 53, + "round": 2, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 224, + "reportId": 189, + "traceId": "tr_cd110939efbf4d3685fbf81ca89ae996", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 817.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 54, + "round": 2, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 225, + "reportId": 190, + "traceId": "tr_f4d0cef27f4a42198aed3836a291ec6c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 591.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 55, + "round": 2, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 226, + "reportId": 191, + "traceId": "tr_9ffe73afa9324db4969f0ebd8c84b46e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 560.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 56, + "round": 2, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 227, + "reportId": 192, + "traceId": "tr_15f2a5d5488e4e1f8fe7240983642f71", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 705.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 57, + "round": 3, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 228, + "reportId": 193, + "traceId": "tr_9aa7da1d688f417eae4b320199d80e1f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 835, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 58, + "round": 3, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 229, + "reportId": 194, + "traceId": "tr_ad668c2398c74dcea02d0cc669156923", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 599.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 59, + "round": 3, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 230, + "reportId": 195, + "traceId": "tr_8477e30cc4a044d49bae7ca4a5d6a119", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 578, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 60, + "round": 3, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 231, + "reportId": 196, + "traceId": "tr_0894f63e192348efb30c4a9112a45e56", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 652.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 61, + "round": 3, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 232, + "reportId": 197, + "traceId": "tr_628e45511a2043a49bf5ba98832fd38d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 770, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 62, + "round": 3, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 233, + "reportId": 198, + "traceId": "tr_399ae283fd37476899b6499bf619e748", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 772.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 63, + "round": 3, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 234, + "reportId": 199, + "traceId": "tr_f98baeeac6a24652b47a2d586ac71c2a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 577.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 64, + "round": 3, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 235, + "reportId": 200, + "traceId": "tr_28b7304996204f179e3987d1dbdc8ff3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 703, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 65, + "round": 3, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 236, + "reportId": 201, + "traceId": "tr_c590937073424378a54935b7cf2ef0b7", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 794, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 66, + "round": 3, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 237, + "reportId": 202, + "traceId": "tr_857373b19cc948a7997b7723e7197509", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 603.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 67, + "round": 3, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 238, + "reportId": 203, + "traceId": "tr_4a54933800fc4319a0ed44da87e7b9c4", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 592.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 68, + "round": 3, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 239, + "reportId": 204, + "traceId": "tr_309496b9fa0340eba34bf2c24bb97684", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 582.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 69, + "round": 3, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 240, + "reportId": 205, + "traceId": "tr_5c9c13b945c34cdb8940c6c130443b28", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 831.5, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 70, + "round": 3, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 241, + "reportId": 206, + "traceId": "tr_7c806143a6a841afaae8a288a0680fda", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 758.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 71, + "round": 3, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 242, + "reportId": 207, + "traceId": "tr_30d9c91c565a4d90b94650551f5d5df3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 630.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 72, + "round": 3, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 243, + "reportId": 208, + "traceId": "tr_d0f4a38a9a634482812fb57b8f504a27", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 564.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 73, + "round": 3, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 244, + "reportId": 209, + "traceId": "tr_f45db822dede4ec4a52be96ca18a40de", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 933.2, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 74, + "round": 3, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 245, + "reportId": 210, + "traceId": "tr_31b94552d657489780e2283567f5abf0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 612.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 75, + "round": 3, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 246, + "reportId": 211, + "traceId": "tr_72cccd42176748bea1b0d2a7623689c5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 582.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 76, + "round": 3, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 247, + "reportId": 212, + "traceId": "tr_5342dbe57e564f6abdb4e72a15531f23", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 583.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 77, + "round": 3, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 248, + "reportId": 213, + "traceId": "tr_0091763aabb44dd0aa70941f255a680d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 753, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 78, + "round": 3, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 249, + "reportId": 214, + "traceId": "tr_57eab59691d1468a91024b2324bf452a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 528.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 79, + "round": 3, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 250, + "reportId": 215, + "traceId": "tr_7c0157c298a148a5aa79ce964c1c05ac", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 589.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 80, + "round": 3, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 251, + "reportId": 216, + "traceId": "tr_9add05a34fba4ab581d329cac3d7b143", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 758.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 81, + "round": 3, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 252, + "reportId": 217, + "traceId": "tr_1693374a9d854bddb71f72a49e5106d4", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 873.3, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 82, + "round": 3, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 253, + "reportId": 218, + "traceId": "tr_9c459f3c994e42cfa002dbb42b529a26", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 720.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 83, + "round": 3, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 254, + "reportId": 219, + "traceId": "tr_2cc46ff1161844fdac697e9718c9e5ec", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 573.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 84, + "round": 3, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 255, + "reportId": 220, + "traceId": "tr_f92d0ac8404b464e9a4c1208184dcc3e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 586.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 85, + "round": 4, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 256, + "reportId": 221, + "traceId": "tr_6ca054ec1eb54ee3817def0ef989a40c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 700.4, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 86, + "round": 4, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 257, + "reportId": 222, + "traceId": "tr_a64a7d626427481897a8ff70adf6da8f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 624.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 87, + "round": 4, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 258, + "reportId": 223, + "traceId": "tr_196196235a22423fafe20d3ace0f8414", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 633.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 88, + "round": 4, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 259, + "reportId": 224, + "traceId": "tr_d5896f2eb4744f899a1891806419e80c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 582.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 89, + "round": 4, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 260, + "reportId": 225, + "traceId": "tr_11527145cc0849d592f6ea65f3acf83e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 788.1, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 90, + "round": 4, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 261, + "reportId": 226, + "traceId": "tr_fbbedf3916c44bc48be7717099d65c8d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 625.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 91, + "round": 4, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 262, + "reportId": 227, + "traceId": "tr_0e176b15443c4efca3e7747a68bf1a84", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 565.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 92, + "round": 4, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 263, + "reportId": 228, + "traceId": "tr_c0b4619a0e0249fa8a28e10551f49b17", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 546.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 93, + "round": 4, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 264, + "reportId": 229, + "traceId": "tr_18d49493719f4f379d5c4215553342a1", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 722.1, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 94, + "round": 4, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 265, + "reportId": 230, + "traceId": "tr_5357729fe2264e9ead440ee81cdd4ed2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 664.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 95, + "round": 4, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 266, + "reportId": 231, + "traceId": "tr_da94e6290c2747408e151a8a2ed5a032", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 780.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 96, + "round": 4, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 267, + "reportId": 232, + "traceId": "tr_816a804596b549a9bb6904be121e5632", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 568, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 97, + "round": 4, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 268, + "reportId": 233, + "traceId": "tr_fa62425da81c4f97af3ebdf81310cc7b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 813.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 98, + "round": 4, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 269, + "reportId": 234, + "traceId": "tr_6262bf31f4ab49c48d75852a6eab9a8e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 613.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 99, + "round": 4, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 270, + "reportId": 235, + "traceId": "tr_9711af5636c94017a32418482d04dc4b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 569.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 100, + "round": 4, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 271, + "reportId": 236, + "traceId": "tr_81cd8acabcb640d8982f31f7f0703aee", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 622.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 101, + "round": 4, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 272, + "reportId": 237, + "traceId": "tr_4e499f5fa7744918b5334435cc2b95bf", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 751.3, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 102, + "round": 4, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 273, + "reportId": 238, + "traceId": "tr_1192136ec3ce4361be0a437dd70ec674", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 553.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 103, + "round": 4, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 274, + "reportId": 239, + "traceId": "tr_c1b5c608368047c9905806b1f6a1f4ce", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 584.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 104, + "round": 4, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 275, + "reportId": 240, + "traceId": "tr_6cba31c738b14b02a4b1d95114bf651b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 542.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 105, + "round": 4, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 276, + "reportId": 241, + "traceId": "tr_eaa849cec15e496687b7c7163399d2ed", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 705.2, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 106, + "round": 4, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 277, + "reportId": 242, + "traceId": "tr_65b8d28086564bd6b0b8a900d1a55695", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 631.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 107, + "round": 4, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 278, + "reportId": 243, + "traceId": "tr_886671e1ea074e628c75dedad5c167fc", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 574.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 108, + "round": 4, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 279, + "reportId": 244, + "traceId": "tr_c0a046c86f2a4c39b3f621b3aa54e035", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 590.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 109, + "round": 4, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 280, + "reportId": 245, + "traceId": "tr_2a7ec0d840ba448e91761c02efc3ca54", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 710.5, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 110, + "round": 4, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 281, + "reportId": 246, + "traceId": "tr_21311dfacbed4a38b4a8ab7ab63a99ea", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 704.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 111, + "round": 4, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 282, + "reportId": 247, + "traceId": "tr_12172a20fc344a35819b701f0a3b2548", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 709.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 112, + "round": 4, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 283, + "reportId": 248, + "traceId": "tr_2f79a2d2b9de40779312405467b2efed", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 697.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 113, + "round": 5, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 284, + "reportId": 249, + "traceId": "tr_088a7f31fd8d41e5b27901d7445805bd", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 888.8, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 114, + "round": 5, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 285, + "reportId": 250, + "traceId": "tr_b9250f2158e647c5b157a53dc4768cbf", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 636.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 115, + "round": 5, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 286, + "reportId": 251, + "traceId": "tr_4f5d0948951b4c70996b3b9208b00e4d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 625.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 116, + "round": 5, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 287, + "reportId": 252, + "traceId": "tr_d8c7a16a0ace41d6bf16fe4ae818b9ef", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 580.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 117, + "round": 5, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 288, + "reportId": 253, + "traceId": "tr_124139b78f304b128c40d51708191ee3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 776.7, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 118, + "round": 5, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 289, + "reportId": 254, + "traceId": "tr_e2788a6c768445d0985c68d8b3b41cdc", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 682.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 119, + "round": 5, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 290, + "reportId": 255, + "traceId": "tr_fe4dac1aa5754318b67031ba54f99b23", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 523.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 120, + "round": 5, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 291, + "reportId": 256, + "traceId": "tr_e44f68111615482fb0fa00b9fd6ba13e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 839.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 121, + "round": 5, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 292, + "reportId": 257, + "traceId": "tr_74daeb8257e54f32a524b772eb9b74eb", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 809.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 122, + "round": 5, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 293, + "reportId": 258, + "traceId": "tr_25fb36ae2245491aa9a83623418aa4c2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 560.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 123, + "round": 5, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 294, + "reportId": 259, + "traceId": "tr_f77402ac55f84e99b56930ec2c8a1b5b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 537.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 124, + "round": 5, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 295, + "reportId": 260, + "traceId": "tr_03728ad8e2454f2a8b11e37062791216", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 609.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 125, + "round": 5, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 296, + "reportId": 261, + "traceId": "tr_d7ab95484ea34b5a89fdc6be5c80f5f5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 891.2, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 126, + "round": 5, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 297, + "reportId": 262, + "traceId": "tr_7793aaea358c4fa9a8d68fcfd3553799", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 617.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 127, + "round": 5, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 298, + "reportId": 263, + "traceId": "tr_0d6255533a1b4e63a1041a8ae1097b48", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 522.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 128, + "round": 5, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 299, + "reportId": 264, + "traceId": "tr_ce41bfee50074ea19de4a742c2bb23f9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 504.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 129, + "round": 5, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 300, + "reportId": 265, + "traceId": "tr_4627c7eea2a54fb6a6b8596334f5bed6", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 659.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 130, + "round": 5, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 301, + "reportId": 266, + "traceId": "tr_cd1e8d5b6fa64565b61dc87489bdc877", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 536.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 131, + "round": 5, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 302, + "reportId": 267, + "traceId": "tr_849c9e887ce146d59150d71dd7a31b9f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 616.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 132, + "round": 5, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 303, + "reportId": 268, + "traceId": "tr_0634401fadc6489886ccc2b139a7ffb9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 546.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 133, + "round": 5, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 304, + "reportId": 269, + "traceId": "tr_b670caf2d8d641b69752d5c2ba7e0fbf", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 776.1, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 134, + "round": 5, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 305, + "reportId": 270, + "traceId": "tr_ca4fc91d73634e418a87833740ef6afb", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 539.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 135, + "round": 5, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 306, + "reportId": 271, + "traceId": "tr_2f714eba755141fcbc40bcd30183ed6e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 526.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 136, + "round": 5, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 307, + "reportId": 272, + "traceId": "tr_9a4ad31636114f05b06322f428e7bf94", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 514.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 137, + "round": 5, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 308, + "reportId": 273, + "traceId": "tr_687f2afe5ddc459e8309d05231e03b15", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 686.1, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 138, + "round": 5, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 309, + "reportId": 274, + "traceId": "tr_b79e2e3f73b849c3a01f9949f1b45a74", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 532, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 139, + "round": 5, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 310, + "reportId": 275, + "traceId": "tr_d7818fec5eff4382bf7e3ec866ac743d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 552, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 140, + "round": 5, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 311, + "reportId": 276, + "traceId": "tr_2fbef193cb684335a75991be4b6981c8", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 616.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 141, + "round": 6, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 312, + "reportId": 277, + "traceId": "tr_4793bef7a68e4a5ca8e6e4be8ac5d317", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 807.2, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 142, + "round": 6, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 313, + "reportId": 278, + "traceId": "tr_c54f8f0c22274ef68c3bba8fabf3a0ac", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 590, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 143, + "round": 6, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 314, + "reportId": 279, + "traceId": "tr_e8dd88ca252e487c965289c99ecd7de1", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 553.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 144, + "round": 6, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 315, + "reportId": 280, + "traceId": "tr_7c4da0e3b06a4da894549f98b0a6e85d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 527.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 145, + "round": 6, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 316, + "reportId": 281, + "traceId": "tr_18219f7c38374335970d7004afc069fb", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 693.2, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 146, + "round": 6, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 317, + "reportId": 282, + "traceId": "tr_d1503daed12840f8997bff5ac84312ae", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 522.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 147, + "round": 6, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 318, + "reportId": 283, + "traceId": "tr_e367f3332bcd4ac2a3f09274c574a11e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 688.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 148, + "round": 6, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 319, + "reportId": 284, + "traceId": "tr_5e0d677b22c34b779ef1a961e91405a7", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 694.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 149, + "round": 6, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 320, + "reportId": 285, + "traceId": "tr_3d94479d58914516b5b35a99be616c2e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 745.2, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 150, + "round": 6, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 321, + "reportId": 286, + "traceId": "tr_c7403f51934a46c38e2658846377d167", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 619.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 151, + "round": 6, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 322, + "reportId": 287, + "traceId": "tr_d5d959d7afcd4fa89f298dcf2f24bcc2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 550.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 152, + "round": 6, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 323, + "reportId": 288, + "traceId": "tr_0580b82f83984061956cc2110c51293d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 527.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 153, + "round": 6, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 324, + "reportId": 289, + "traceId": "tr_4c563798ad014edb803ae40ac8f8ac16", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 714.9, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 154, + "round": 6, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 325, + "reportId": 290, + "traceId": "tr_c31d93942f0544998c62d61fe3a55947", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 528.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 155, + "round": 6, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 326, + "reportId": 291, + "traceId": "tr_4720a52954ad476eaf8c5b4d23675243", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 552.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 156, + "round": 6, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 327, + "reportId": 292, + "traceId": "tr_8bd0deb6a36a46598b07fe1c3e460a8c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 546.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 157, + "round": 6, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 328, + "reportId": 293, + "traceId": "tr_b8c81756a2894d2392e685941f27be02", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 863.5, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 158, + "round": 6, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 329, + "reportId": 294, + "traceId": "tr_a43d5d9ab24e4a59b75dfe74a480760c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 658.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 159, + "round": 6, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 330, + "reportId": 295, + "traceId": "tr_bf6b3a7ba666423db70995e23e3d4b4e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 578.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 160, + "round": 6, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 331, + "reportId": 296, + "traceId": "tr_bfdeabf9f1584cbba0b101b664dd1ba4", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 545, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 161, + "round": 6, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 332, + "reportId": 297, + "traceId": "tr_325ec73ff28a4b67a52803987b7ea52b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 770.8, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 162, + "round": 6, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 333, + "reportId": 298, + "traceId": "tr_b03f12fa523f4ba6b25a1184523bf082", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 537.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 163, + "round": 6, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 334, + "reportId": 299, + "traceId": "tr_b94a4d5e49b44bdda70058c69b6925eb", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 547.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 164, + "round": 6, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 335, + "reportId": 300, + "traceId": "tr_c2059e87a5c444059b0839f486270174", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 556.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 165, + "round": 6, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 336, + "reportId": 301, + "traceId": "tr_180c3a95533a4405a562029055b50df0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 836.6, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 166, + "round": 6, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 337, + "reportId": 302, + "traceId": "tr_2cbc846a00804121b5074098d1b30504", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 652.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 167, + "round": 6, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 338, + "reportId": 303, + "traceId": "tr_37f58ceb86ce4822affccdf89f384584", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 597.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 168, + "round": 6, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 339, + "reportId": 304, + "traceId": "tr_9bddac0f7cd94cf8ae56550c66728950", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 526.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 169, + "round": 7, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 340, + "reportId": 305, + "traceId": "tr_665a9fa69e774fbdbc010d792fdb2135", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 703.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 170, + "round": 7, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 341, + "reportId": 306, + "traceId": "tr_35f199df5ebe43b8afb5bbb5c489bab9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 516.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 171, + "round": 7, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 342, + "reportId": 307, + "traceId": "tr_6a8440e6e3354a0390f8744fe813ade5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 536.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 172, + "round": 7, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 343, + "reportId": 308, + "traceId": "tr_566bf12a8e6b495ea2faa0b66103824f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 530.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 173, + "round": 7, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 344, + "reportId": 309, + "traceId": "tr_67137acfd28044928cf74b7e38a0d1f9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 705.3, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 174, + "round": 7, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 345, + "reportId": 310, + "traceId": "tr_4513a2e8e6644c86a305c7e37277108f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 775.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 175, + "round": 7, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 346, + "reportId": 311, + "traceId": "tr_71c834aeda7f4a68ad5ea296a7186c7c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 944.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 176, + "round": 7, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 347, + "reportId": 312, + "traceId": "tr_55c895d9496044bd9950a30271697613", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 529.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 177, + "round": 7, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 348, + "reportId": 313, + "traceId": "tr_c311ab4b6213440992fffbe579ab443e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 746.3, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 178, + "round": 7, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 349, + "reportId": 314, + "traceId": "tr_697a11f1ae074b2eb84b6b4db7cc0b15", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 546.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 179, + "round": 7, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 350, + "reportId": 315, + "traceId": "tr_b67ea85de6404d65909f4c72f19ea65a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 596.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 180, + "round": 7, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 351, + "reportId": 316, + "traceId": "tr_1d26b57b4e95458bad977f69ad5d0f85", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 804.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 181, + "round": 7, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 352, + "reportId": 317, + "traceId": "tr_cff6472d1ef140449e728571773fe296", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 822.8, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 182, + "round": 7, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 353, + "reportId": 318, + "traceId": "tr_4baaa9fdae17414a9c9abdfec15854f2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 521.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 183, + "round": 7, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 354, + "reportId": 319, + "traceId": "tr_23ab767eccab4aa0880ab12c3d3b6b02", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 523.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 184, + "round": 7, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 355, + "reportId": 320, + "traceId": "tr_738a4ad5dcae4f1091874f90883ebec3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 525.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 185, + "round": 7, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 356, + "reportId": 321, + "traceId": "tr_117e0d311d4c40ce8edcb4d4ae543f26", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 764.2, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 186, + "round": 7, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 357, + "reportId": 322, + "traceId": "tr_422d1150e88d4c5d92bff70cc14b1e43", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 530.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 187, + "round": 7, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 358, + "reportId": 323, + "traceId": "tr_c447056d2bf747d7bee0da21c5780ed9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 573.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 188, + "round": 7, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 359, + "reportId": 324, + "traceId": "tr_32fd426e39ea4206a36c208d54033871", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 520.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 189, + "round": 7, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 360, + "reportId": 325, + "traceId": "tr_d04f1ac42ff0476585f7ca1654b3f3b2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 670.8, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 190, + "round": 7, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 361, + "reportId": 326, + "traceId": "tr_0bf40a800ad54781a811022ed4edf757", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 529.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 191, + "round": 7, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 362, + "reportId": 327, + "traceId": "tr_b301f2399cef460d98fbcdc3b3f07348", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 744.6, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 192, + "round": 7, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 363, + "reportId": 328, + "traceId": "tr_bc802661f7da4cc29fc13572593c1aa9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 601.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 193, + "round": 7, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 364, + "reportId": 329, + "traceId": "tr_1f7a7e1c016743ad8b52bce71ff31afa", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 765.4, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 194, + "round": 7, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 365, + "reportId": 330, + "traceId": "tr_9bc2314c73be48e0aecef8cc83b06519", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 561.6, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 195, + "round": 7, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 366, + "reportId": 331, + "traceId": "tr_30e18c0d5bba4bc8a188c6af271cb4fe", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 527, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 196, + "round": 7, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 367, + "reportId": 332, + "traceId": "tr_3f1f76f87beb43ceb43a057ab5446843", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 525.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 197, + "round": 8, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 368, + "reportId": 333, + "traceId": "tr_881bda2175f94fb1b99182d05cf2b38c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 797.2, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 198, + "round": 8, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 369, + "reportId": 334, + "traceId": "tr_da69cb07ff694a0cbac861d4bdebd977", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 507, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 199, + "round": 8, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 370, + "reportId": 335, + "traceId": "tr_7bf6288de3eb404196630941bc4833c3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 777.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 200, + "round": 8, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 371, + "reportId": 336, + "traceId": "tr_823e881332e34f29b89da8310acb9bef", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 647, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 201, + "round": 8, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 372, + "reportId": 337, + "traceId": "tr_fc4c4094248e46369ba29e3738398516", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 869, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 202, + "round": 8, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 373, + "reportId": 338, + "traceId": "tr_a310cf3b7f7f40299ca34145c7908308", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 545.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 203, + "round": 8, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 374, + "reportId": 339, + "traceId": "tr_0261e353d50b4d178fb6d8b4f769fb58", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 552.8, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 204, + "round": 8, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 375, + "reportId": 340, + "traceId": "tr_5098d5d04f2c42e6ad9d89eb538c70b1", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 542.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 205, + "round": 8, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 376, + "reportId": 341, + "traceId": "tr_022cce6730de4206aee8d79978a3aec7", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 686.2, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 206, + "round": 8, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 377, + "reportId": 342, + "traceId": "tr_c7006e85f21c4512a4548645b8e85a1b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 537.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 207, + "round": 8, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 378, + "reportId": 343, + "traceId": "tr_b32950e5fc4f44c7925c0a15cc42cc4a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 762.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 208, + "round": 8, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 379, + "reportId": 344, + "traceId": "tr_4fa9439ec9654786887ca8a7d7ebead5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 662.6, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 209, + "round": 8, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 380, + "reportId": 345, + "traceId": "tr_c80d91b23ffc4b3bbc1b156adf7b23b2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 766.7, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 210, + "round": 8, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 381, + "reportId": 346, + "traceId": "tr_d718259190f84914a4eed1d2766e6000", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 506.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 211, + "round": 8, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 382, + "reportId": 347, + "traceId": "tr_af0169ec38664e97b198655b36a5bde8", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 544.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 212, + "round": 8, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 383, + "reportId": 348, + "traceId": "tr_5fa94a1d182d4ec88e78cc64577c1f8c", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 515.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 213, + "round": 8, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 384, + "reportId": 349, + "traceId": "tr_1e380d277442448caca3c66b2743d084", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 664.2, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 214, + "round": 8, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 385, + "reportId": 350, + "traceId": "tr_66e3c8e622544f79a71c284e098af8fb", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 492.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 215, + "round": 8, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 386, + "reportId": 351, + "traceId": "tr_67d0544d02d24444a4dae9afa34e8ca6", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 502.6, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 216, + "round": 8, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 387, + "reportId": 352, + "traceId": "tr_1cca4337f3514737b729a99f40cfe375", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 767.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 217, + "round": 8, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 388, + "reportId": 353, + "traceId": "tr_3311ef303cec444dbadfa2eb75563f9b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 853.6, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 218, + "round": 8, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 389, + "reportId": 354, + "traceId": "tr_2cd13237e6084a039177ef94e5269904", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 560.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 219, + "round": 8, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 390, + "reportId": 355, + "traceId": "tr_f7064ae3ad554f0893a1eebd20128a5a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 531.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 220, + "round": 8, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 391, + "reportId": 356, + "traceId": "tr_00b224390fe14922989c3a36905f5bd8", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 515.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 221, + "round": 8, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 392, + "reportId": 357, + "traceId": "tr_b02954806f3540b8a7477affe0653994", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 709, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 222, + "round": 8, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 393, + "reportId": 358, + "traceId": "tr_a2d3e1ff1dda42cdb2b6eb7e156e93c8", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 520.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 223, + "round": 8, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 394, + "reportId": 359, + "traceId": "tr_838c0086731a4057aa5e98d46793c42d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 536.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 224, + "round": 8, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 395, + "reportId": 360, + "traceId": "tr_3a9d384e4ebb42468d637e82840d9a45", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 783.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 225, + "round": 9, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 396, + "reportId": 361, + "traceId": "tr_4fe06cd392544639b3178a0fda3b733f", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 792.9, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 226, + "round": 9, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 397, + "reportId": 362, + "traceId": "tr_cb1f805b116f4dc4bff89f8c7aabc4f5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 821.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 227, + "round": 9, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 398, + "reportId": 363, + "traceId": "tr_223e09a2e494436cac22e72deb49f503", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 565.6, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 228, + "round": 9, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 399, + "reportId": 364, + "traceId": "tr_6ccce95559794329a808793f1f7becef", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 628, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 229, + "round": 9, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 400, + "reportId": 365, + "traceId": "tr_c767ce52fa544f39bc1b349960281ca3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 650.5, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 230, + "round": 9, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 401, + "reportId": 366, + "traceId": "tr_63ab38d1c41f4d6589843f533fd0d644", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 523.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 231, + "round": 9, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 402, + "reportId": 367, + "traceId": "tr_c6175978136648539b7ad1a969e4ab34", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 491.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 232, + "round": 9, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 403, + "reportId": 368, + "traceId": "tr_722b4ed43906415c94cd12ee972aaea2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 524.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 233, + "round": 9, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 404, + "reportId": 369, + "traceId": "tr_e35e653944ce42aab1b1b23592512587", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 684.3, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 234, + "round": 9, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 405, + "reportId": 370, + "traceId": "tr_9f7874a7958c4a57b2f9a8b18046cf2a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 547.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 235, + "round": 9, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 406, + "reportId": 371, + "traceId": "tr_eb1965835e5d44a88394ada6f908bfc5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 517.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 236, + "round": 9, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 407, + "reportId": 372, + "traceId": "tr_99661b9edf3d4d0faaaf1984d2520af0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 534.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 237, + "round": 9, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 408, + "reportId": 373, + "traceId": "tr_3a2af64f71b24201a1d17c8151e262a8", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 698.1, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 238, + "round": 9, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 409, + "reportId": 374, + "traceId": "tr_9e01dcfe6dde435883797f092b6608a0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 522.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 239, + "round": 9, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 410, + "reportId": 375, + "traceId": "tr_224baa2b0fc64232834e485161daf729", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 571.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 240, + "round": 9, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 411, + "reportId": 376, + "traceId": "tr_c9a9125b5a7348c48d5d156931486ca0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 551.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 241, + "round": 9, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 412, + "reportId": 377, + "traceId": "tr_144f16e510d44e6392477152beb28231", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 1006.7, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 242, + "round": 9, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 413, + "reportId": 378, + "traceId": "tr_397b58ccf4904e7eb7b1afd0547dabae", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 671.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 243, + "round": 9, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 414, + "reportId": 379, + "traceId": "tr_fc2820196ec8400bb6742207985a593a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 666.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 244, + "round": 9, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 415, + "reportId": 380, + "traceId": "tr_30a89aefc88141978bc52f678eca9b73", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 523.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 245, + "round": 9, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 416, + "reportId": 381, + "traceId": "tr_4cb3bb345a324113a33387fc0eb008e1", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 705.9, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 246, + "round": 9, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 417, + "reportId": 382, + "traceId": "tr_69b2d874e50d438fa2ef9706d82fd798", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 513.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 247, + "round": 9, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 418, + "reportId": 383, + "traceId": "tr_22742e8700e84ea9b6edcdd5126321b5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 529.4, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 248, + "round": 9, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 419, + "reportId": 384, + "traceId": "tr_d8709d92f7f941a0b332fab64a9ecf18", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 550.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 249, + "round": 9, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 420, + "reportId": 385, + "traceId": "tr_607a5335293d4f2ea6071ea5668d0412", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 995.8, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 250, + "round": 9, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 421, + "reportId": 386, + "traceId": "tr_6eb0f895b7ed4f6182b5bcf46c489103", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 715.3, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 251, + "round": 9, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 422, + "reportId": 387, + "traceId": "tr_34652ec19d4d4a70bb93f5347308622b", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 558.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 252, + "round": 9, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 423, + "reportId": 388, + "traceId": "tr_4bc72877f1194bc385b9309df9c26d37", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 548.5, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 253, + "round": 10, + "businessDate": "2018-08-01", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 424, + "reportId": 389, + "traceId": "tr_026d05af6746462fbf0117ea74a8d45d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 698, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2961, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 254, + "round": 10, + "businessDate": "2018-08-01", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 425, + "reportId": 390, + "traceId": "tr_e509af7c337e4043982b38b95c38ebc9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 551.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1975, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 255, + "round": 10, + "businessDate": "2018-08-01", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 426, + "reportId": 391, + "traceId": "tr_87be7eff1bf941d199b60abc7f76a2d2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 682.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1907, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 58, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 256, + "round": 10, + "businessDate": "2018-08-01", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 427, + "reportId": 392, + "traceId": "tr_14bf1abd530e40bf95dd728ecc94b0b4", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 555.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1063, + "gmv": 48850.81, + "orderCount": 311, + "refundRate": 0.0116, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.1229, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 257, + "round": 10, + "businessDate": "2018-08-02", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 428, + "reportId": 393, + "traceId": "tr_942c9b1a54b54ee7be7bed45bf122c1e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 856.5, + "taskDurationMs": 0, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2997, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 258, + "round": 10, + "businessDate": "2018-08-02", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 429, + "reportId": 394, + "traceId": "tr_e778a1da60c049c182f2143a4b3e15d0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 583.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2016, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 259, + "round": 10, + "businessDate": "2018-08-02", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 430, + "reportId": 395, + "traceId": "tr_eed47de2848144e4b3317464057300f6", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 559.7, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1947, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 59, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 260, + "round": 10, + "businessDate": "2018-08-02", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 431, + "reportId": 396, + "traceId": "tr_cb09cfdcd6fa439d8afdec4b5f29fff8", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 545.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1061, + "gmv": 45932.7, + "orderCount": 302, + "refundRate": 0.0074, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.9793, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 261, + "round": 10, + "businessDate": "2018-08-03", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 432, + "reportId": 397, + "traceId": "tr_ba53da11041b4f6499f4dd4fb22f9f09", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 701.6, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2919, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 262, + "round": 10, + "businessDate": "2018-08-03", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 433, + "reportId": 398, + "traceId": "tr_375c925a028c4ed19989826b76bb6fb3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 525.9, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1934, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 263, + "round": 10, + "businessDate": "2018-08-03", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 434, + "reportId": 399, + "traceId": "tr_f9dd4cee5bb847cc914e7c051e941061", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 501.9, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1866, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 50, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 264, + "round": 10, + "businessDate": "2018-08-03", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 435, + "reportId": 400, + "traceId": "tr_4d04826a0b424dd4ae81d750405a5a61", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 511.1, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1062, + "gmv": 49517.59, + "orderCount": 314, + "refundRate": 0.0062, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6186, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 265, + "round": 10, + "businessDate": "2018-08-04", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 436, + "reportId": 401, + "traceId": "tr_a4db04b4d63e4b749afa952ab48f03dd", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 687.1, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 3016, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 266, + "round": 10, + "businessDate": "2018-08-04", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 437, + "reportId": 402, + "traceId": "tr_cfd1a13cd8964cea8b48a608e2342d82", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 743.5, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 2030, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 267, + "round": 10, + "businessDate": "2018-08-04", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 438, + "reportId": 403, + "traceId": "tr_72b8c7eb07be4064bae863750d472dc9", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 619.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1962, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 66, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 268, + "round": 10, + "businessDate": "2018-08-04", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 439, + "reportId": 404, + "traceId": "tr_606da4675f0a4276bd774e4052267776", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 567.2, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 41239.97, + "orderCount": 245, + "refundRate": 0.004, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.6852, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 269, + "round": 10, + "businessDate": "2018-08-05", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 440, + "reportId": 405, + "traceId": "tr_e7404b4c27584c9e91920c3ccb8e0e73", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 680.4, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2983, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 270, + "round": 10, + "businessDate": "2018-08-05", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 441, + "reportId": 406, + "traceId": "tr_86b1554332f341b88b1f7ce545c88d36", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 498.3, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1996, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 271, + "round": 10, + "businessDate": "2018-08-05", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 442, + "reportId": 407, + "traceId": "tr_481614c9ec4142ecaa0cc40bae19f0a0", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 566.2, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1928, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 27, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 272, + "round": 10, + "businessDate": "2018-08-05", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 443, + "reportId": 408, + "traceId": "tr_15347c58e1034938bf24c5b6560ef616", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 510, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1066, + "gmv": 42272.07, + "orderCount": 276, + "refundRate": 0.0046, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 8.5506, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 273, + "round": 10, + "businessDate": "2018-08-06", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 444, + "reportId": 409, + "traceId": "tr_ffe7bfb6ae7847e1bb7569aafa350f64", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 662.1, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2337, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 274, + "round": 10, + "businessDate": "2018-08-06", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 445, + "reportId": 410, + "traceId": "tr_8603175d19954d27a70583801c0fa20a", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 515, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1367, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 275, + "round": 10, + "businessDate": "2018-08-06", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 446, + "reportId": 411, + "traceId": "tr_3b47791b85d048f5ba12f0df97fe3aef", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 795.4, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1376, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 2, + "productCandidateCount": 2, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 276, + "round": 10, + "businessDate": "2018-08-06", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 447, + "reportId": 412, + "traceId": "tr_47e78b4aae4a471aa9036bb663931dd2", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 789.1, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1060, + "gmv": 65860.43, + "orderCount": 372, + "refundRate": 0.0415, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.2969, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 277, + "round": 10, + "businessDate": "2018-08-07", + "scenario": "daily_review", + "expectedIntent": "daily_review", + "actualIntent": "daily_review", + "intentMatched": true, + "taskId": 448, + "reportId": 413, + "traceId": "tr_7725d2d5abd84c7391802df38415afb3", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 691.6, + "taskDurationMs": 1000, + "toolInvocationCount": 6, + "toolSuccessCount": 6, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 2958, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 278, + "round": 10, + "businessDate": "2018-08-07", + "scenario": "comment_risk", + "expectedIntent": "comment_risk", + "actualIntent": "comment_risk", + "intentMatched": true, + "taskId": 449, + "reportId": 414, + "traceId": "tr_13d68ec9fd0b4974a4da750ff8af82f5", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 532.7, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;comment.query_negative;product.query_candidates;report.generate_daily_review", + "markdownLength": 1970, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 279, + "round": 10, + "businessDate": "2018-08-07", + "scenario": "product_optimization", + "expectedIntent": "product_optimization", + "actualIntent": "product_optimization", + "intentMatched": true, + "taskId": 450, + "reportId": 415, + "traceId": "tr_8c953fb9442a44788e36c26ad10ac72d", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 521.8, + "taskDurationMs": 1000, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;product.query_candidates;comment.query_negative;report.generate_daily_review", + "markdownLength": 1902, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 51, + "productCandidateCount": 10, + "adCost": null, + "adRoi": null, + "externalVisitors": null, + "errorMessage": null + }, + { + "caseNo": 280, + "round": 10, + "businessDate": "2018-08-07", + "scenario": "ad_anomaly", + "expectedIntent": "ad_anomaly", + "actualIntent": "ad_anomaly", + "intentMatched": true, + "taskId": 451, + "reportId": 416, + "traceId": "tr_de1192d7eebd4f98bac59548a20f9f4e", + "taskStatus": "SUCCESS", + "reportStatus": "SUCCESS", + "passed": true, + "wallClockDurationMs": 504.6, + "taskDurationMs": 0, + "toolInvocationCount": 4, + "toolSuccessCount": 4, + "toolCodes": "order.query_summary;ad.query_performance;report.query_external_metrics;report.generate_daily_review", + "markdownLength": 1065, + "gmv": 62057.77, + "orderCount": 370, + "refundRate": 0.0763, + "negativeCount": 0, + "productCandidateCount": 0, + "adCost": null, + "adRoi": 9.0897, + "externalVisitors": null, + "errorMessage": null + } + ] +} diff --git a/docs/evaluation/agent-natural-language-batch-summary.md b/docs/evaluation/agent-natural-language-batch-summary.md new file mode 100644 index 0000000..4bb4701 --- /dev/null +++ b/docs/evaluation/agent-natural-language-batch-summary.md @@ -0,0 +1,43 @@ +# ShopOps Agent Natural Language Batch Evaluation + +- Generated at: 2026-07-28 20:12:45 +- Base URL: http://localhost:8080 +- Date range: 2018-08-01 to 2018-08-07 (7 days) +- Rounds: 10 + +## Summary + +| Metric | Value | +|---|---:| +| Cases | 280 | +| Passed cases | 280 | +| Pass rate | 100% | +| Success rate | 100% | +| Intent accuracy | 100% | +| Tool invocations | 1260 | +| Tool invocation success rate | 100% | +| Avg tools per task | 4.5 | +| Avg wall-clock duration | 646.8 ms | +| P95 wall-clock duration | 863.5 ms | +| Avg task duration | 514.3 ms | + +## Scenario Breakdown + +| Scenario | Cases | Passed | Success Rate | Avg Tools | Avg Duration ms | +|---|---:|---:|---:|---:|---:| +| ad_anomaly | 70 | 70 | 100% | 4 | 598.1 | +| comment_risk | 70 | 70 | 100% | 4 | 606.6 | +| daily_review | 70 | 70 | 100% | 6 | 783.3 | +| product_optimization | 70 | 70 | 100% | 4 | 599.1 | + +## Output Files + +- JSON summary: D:\找实习\ShopOps\docs\evaluation\agent-natural-language-batch-summary.json +- CSV details: D:\找实习\ShopOps\docs\evaluation\agent-natural-language-batch-details.csv + +## Notes + +- This batch calls the real ShopOps natural-language task API. +- The backend must be started with the configured public-data file connectors. +- wallClockDurationMs is measured by this runner around the HTTP task creation and verification flow. +- taskDurationMs is computed from ShopOps task startedAt and finishedAt fields when available. diff --git a/docs/evaluation/feishu-webhook-batch-details.csv b/docs/evaluation/feishu-webhook-batch-details.csv new file mode 100644 index 0000000..6d00c37 --- /dev/null +++ b/docs/evaluation/feishu-webhook-batch-details.csv @@ -0,0 +1,101 @@ +"index","reportId","success","status","mode","webhookStatusCode","durationMs","errorMessage","requestedAt" +"1","990001","True","SUCCESS","feishu-webhook","200","456.87","","2026-07-24T01:43:26.9113185+08:00" +"2","990002","True","SUCCESS","feishu-webhook","200","294.69","","2026-07-24T01:43:27.6928984+08:00" +"3","990003","True","SUCCESS","feishu-webhook","200","265.99","","2026-07-24T01:43:28.2960849+08:00" +"4","990004","True","SUCCESS","feishu-webhook","200","282.98","","2026-07-24T01:43:28.8645923+08:00" +"5","990005","True","SUCCESS","feishu-webhook","200","272.32","","2026-07-24T01:43:29.4647192+08:00" +"6","990006","True","SUCCESS","feishu-webhook","200","261.32","","2026-07-24T01:43:30.0496106+08:00" +"7","990007","True","SUCCESS","feishu-webhook","200","274.98","","2026-07-24T01:43:30.6207976+08:00" +"8","990008","True","SUCCESS","feishu-webhook","200","340.18","","2026-07-24T01:43:31.2225170+08:00" +"9","990009","True","SUCCESS","feishu-webhook","200","301.21","","2026-07-24T01:43:31.8647396+08:00" +"10","990010","True","SUCCESS","feishu-webhook","200","262.41","","2026-07-24T01:43:32.4835921+08:00" +"11","990011","True","SUCCESS","feishu-webhook","200","273.61","","2026-07-24T01:43:33.0584092+08:00" +"12","990012","True","SUCCESS","feishu-webhook","200","264.94","","2026-07-24T01:43:33.6339578+08:00" +"13","990013","True","SUCCESS","feishu-webhook","200","284.47","","2026-07-24T01:43:34.2180557+08:00" +"14","990014","True","SUCCESS","feishu-webhook","200","253.45","","2026-07-24T01:43:34.8092073+08:00" +"15","990015","True","SUCCESS","feishu-webhook","200","277.02","","2026-07-24T01:43:35.3671590+08:00" +"16","990016","True","SUCCESS","feishu-webhook","200","293.27","","2026-07-24T01:43:35.9563718+08:00" +"17","990017","True","SUCCESS","feishu-webhook","200","269.71","","2026-07-24T01:43:36.5620590+08:00" +"18","990018","True","SUCCESS","feishu-webhook","200","258.86","","2026-07-24T01:43:37.1356808+08:00" +"19","990019","True","SUCCESS","feishu-webhook","200","252.75","","2026-07-24T01:43:37.7055791+08:00" +"20","990020","True","SUCCESS","feishu-webhook","200","297.71","","2026-07-24T01:43:38.2805537+08:00" +"21","990021","True","SUCCESS","feishu-webhook","200","280.16","","2026-07-24T01:43:38.8895753+08:00" +"22","990022","True","SUCCESS","feishu-webhook","200","380.55","","2026-07-24T01:43:39.4768963+08:00" +"23","990023","True","SUCCESS","feishu-webhook","200","267.31","","2026-07-24T01:43:40.1621761+08:00" +"24","990024","True","SUCCESS","feishu-webhook","200","268.41","","2026-07-24T01:43:40.7519172+08:00" +"25","990025","True","SUCCESS","feishu-webhook","200","311.92","","2026-07-24T01:43:41.3289994+08:00" +"26","990026","True","SUCCESS","feishu-webhook","200","290.24","","2026-07-24T01:43:41.9496829+08:00" +"27","990027","True","SUCCESS","feishu-webhook","200","257.76","","2026-07-24T01:43:42.5532772+08:00" +"28","990028","True","SUCCESS","feishu-webhook","200","299.85","","2026-07-24T01:43:43.1275960+08:00" +"29","990029","True","SUCCESS","feishu-webhook","200","322.86","","2026-07-24T01:43:43.7525357+08:00" +"30","990030","True","SUCCESS","feishu-webhook","200","329.03","","2026-07-24T01:43:44.3877046+08:00" +"31","990031","True","SUCCESS","feishu-webhook","200","283.6","","2026-07-24T01:43:45.0249630+08:00" +"32","990032","True","SUCCESS","feishu-webhook","200","297.81","","2026-07-24T01:43:45.6181977+08:00" +"33","990033","True","SUCCESS","feishu-webhook","200","265.17","","2026-07-24T01:43:46.2286340+08:00" +"34","990034","True","SUCCESS","feishu-webhook","200","295.82","","2026-07-24T01:43:46.8059363+08:00" +"35","990035","True","SUCCESS","feishu-webhook","200","292.41","","2026-07-24T01:43:47.4251546+08:00" +"36","990036","True","SUCCESS","feishu-webhook","200","248.35","","2026-07-24T01:43:48.0333160+08:00" +"37","990037","True","SUCCESS","feishu-webhook","200","263.03","","2026-07-24T01:43:48.5979707+08:00" +"38","990038","True","SUCCESS","feishu-webhook","200","270.45","","2026-07-24T01:43:49.1703380+08:00" +"39","990039","True","SUCCESS","feishu-webhook","200","297.14","","2026-07-24T01:43:49.7471858+08:00" +"40","990040","True","SUCCESS","feishu-webhook","200","264.48","","2026-07-24T01:43:50.3515543+08:00" +"41","990041","True","SUCCESS","feishu-webhook","200","274.78","","2026-07-24T01:43:50.9379907+08:00" +"42","990042","True","SUCCESS","feishu-webhook","200","278.67","","2026-07-24T01:43:51.5282595+08:00" +"43","990043","True","SUCCESS","feishu-webhook","200","266.27","","2026-07-24T01:43:52.1195531+08:00" +"44","990044","True","SUCCESS","feishu-webhook","200","258.96","","2026-07-24T01:43:52.6948707+08:00" +"45","990045","True","SUCCESS","feishu-webhook","200","265.41","","2026-07-24T01:43:53.2658789+08:00" +"46","990046","True","SUCCESS","feishu-webhook","200","250.87","","2026-07-24T01:43:53.8433395+08:00" +"47","990047","True","SUCCESS","feishu-webhook","200","311.16","","2026-07-24T01:43:54.4043809+08:00" +"48","990048","True","SUCCESS","feishu-webhook","200","247.86","","2026-07-24T01:43:55.0210924+08:00" +"49","990049","True","SUCCESS","feishu-webhook","200","280.02","","2026-07-24T01:43:55.5808355+08:00" +"50","990050","True","SUCCESS","feishu-webhook","200","264.56","","2026-07-24T01:43:56.1651103+08:00" +"51","990051","True","SUCCESS","feishu-webhook","200","428.89","","2026-07-24T01:43:56.7413858+08:00" +"52","990052","True","SUCCESS","feishu-webhook","200","812.73","","2026-07-24T01:43:57.4763270+08:00" +"53","990053","True","SUCCESS","feishu-webhook","200","310.7","","2026-07-24T01:43:58.6046936+08:00" +"54","990054","True","SUCCESS","feishu-webhook","200","330.1","","2026-07-24T01:43:59.2371266+08:00" +"55","990055","True","SUCCESS","feishu-webhook","200","391.54","","2026-07-24T01:43:59.8841922+08:00" +"56","990056","True","SUCCESS","feishu-webhook","200","318.2","","2026-07-24T01:44:00.5832674+08:00" +"57","990057","True","SUCCESS","feishu-webhook","200","285.16","","2026-07-24T01:44:01.2186786+08:00" +"58","990058","True","SUCCESS","feishu-webhook","200","290.62","","2026-07-24T01:44:01.8135529+08:00" +"59","990059","True","SUCCESS","feishu-webhook","200","308.8","","2026-07-24T01:44:02.4134271+08:00" +"60","990060","True","SUCCESS","feishu-webhook","200","293.44","","2026-07-24T01:44:03.0290111+08:00" +"61","990061","True","SUCCESS","feishu-webhook","200","350.88","","2026-07-24T01:44:03.6353111+08:00" +"62","990062","True","SUCCESS","feishu-webhook","200","395.48","","2026-07-24T01:44:04.2874578+08:00" +"63","990063","True","SUCCESS","feishu-webhook","200","571.75","","2026-07-24T01:44:05.0024840+08:00" +"64","990064","True","SUCCESS","feishu-webhook","200","270.2","","2026-07-24T01:44:05.8821234+08:00" +"65","990065","True","SUCCESS","feishu-webhook","200","273.16","","2026-07-24T01:44:06.4632073+08:00" +"66","990066","True","SUCCESS","feishu-webhook","200","265.37","","2026-07-24T01:44:07.0469475+08:00" +"67","990067","True","SUCCESS","feishu-webhook","200","253.81","","2026-07-24T01:44:07.6165519+08:00" +"68","990068","True","SUCCESS","feishu-webhook","200","252.74","","2026-07-24T01:44:08.1864407+08:00" +"69","990069","True","SUCCESS","feishu-webhook","200","337.77","","2026-07-24T01:44:08.7454357+08:00" +"70","990070","True","SUCCESS","feishu-webhook","200","419.3","","2026-07-24T01:44:09.4089878+08:00" +"71","990071","True","SUCCESS","feishu-webhook","200","270.9","","2026-07-24T01:44:10.1330901+08:00" +"72","990072","True","SUCCESS","feishu-webhook","200","304.89","","2026-07-24T01:44:10.7215730+08:00" +"73","990073","True","SUCCESS","feishu-webhook","200","390.37","","2026-07-24T01:44:11.3429901+08:00" +"74","990074","True","SUCCESS","feishu-webhook","200","302.09","","2026-07-24T01:44:12.0461340+08:00" +"75","990075","True","SUCCESS","feishu-webhook","200","337.25","","2026-07-24T01:44:12.6695911+08:00" +"76","990076","True","SUCCESS","feishu-webhook","200","340.17","","2026-07-24T01:44:13.3247537+08:00" +"77","990077","True","SUCCESS","feishu-webhook","200","322.13","","2026-07-24T01:44:13.9805213+08:00" +"78","990078","True","SUCCESS","feishu-webhook","200","300.34","","2026-07-24T01:44:14.6166944+08:00" +"79","990079","True","SUCCESS","feishu-webhook","200","382.57","","2026-07-24T01:44:15.2254734+08:00" +"80","990080","True","SUCCESS","feishu-webhook","200","835.9","","2026-07-24T01:44:15.9188102+08:00" +"81","990081","True","SUCCESS","feishu-webhook","200","384.64","","2026-07-24T01:44:17.0683996+08:00" +"82","990082","True","SUCCESS","feishu-webhook","200","298.65","","2026-07-24T01:44:17.7691971+08:00" +"83","990083","True","SUCCESS","feishu-webhook","200","253.95","","2026-07-24T01:44:18.3923609+08:00" +"84","990084","True","SUCCESS","feishu-webhook","200","316.08","","2026-07-24T01:44:18.9658888+08:00" +"85","990085","True","SUCCESS","feishu-webhook","200","588.43","","2026-07-24T01:44:19.5849799+08:00" +"86","990086","True","SUCCESS","feishu-webhook","200","304.13","","2026-07-24T01:44:20.4866768+08:00" +"87","990087","True","SUCCESS","feishu-webhook","200","294.77","","2026-07-24T01:44:21.1112536+08:00" +"88","990088","True","SUCCESS","feishu-webhook","200","247.51","","2026-07-24T01:44:21.7181071+08:00" +"89","990089","True","SUCCESS","feishu-webhook","200","260.93","","2026-07-24T01:44:22.2708718+08:00" +"90","990090","True","SUCCESS","feishu-webhook","200","260.84","","2026-07-24T01:44:22.8452357+08:00" +"91","990091","True","SUCCESS","feishu-webhook","200","251.63","","2026-07-24T01:44:23.4169785+08:00" +"92","990092","True","SUCCESS","feishu-webhook","200","336.09","","2026-07-24T01:44:23.9801411+08:00" +"93","990093","True","SUCCESS","feishu-webhook","200","295.79","","2026-07-24T01:44:24.6312336+08:00" +"94","990094","True","SUCCESS","feishu-webhook","200","244.01","","2026-07-24T01:44:25.2409889+08:00" +"95","990095","True","SUCCESS","feishu-webhook","200","281.55","","2026-07-24T01:44:25.7867792+08:00" +"96","990096","True","SUCCESS","feishu-webhook","200","295.51","","2026-07-24T01:44:26.3859213+08:00" +"97","990097","True","SUCCESS","feishu-webhook","200","259.05","","2026-07-24T01:44:26.9911731+08:00" +"98","990098","True","SUCCESS","feishu-webhook","200","294","","2026-07-24T01:44:27.5539323+08:00" +"99","990099","True","SUCCESS","feishu-webhook","200","281.19","","2026-07-24T01:44:28.1604509+08:00" +"100","990100","True","SUCCESS","feishu-webhook","200","270","","2026-07-24T01:44:28.7638695+08:00" diff --git a/docs/evaluation/feishu-webhook-batch-summary.json b/docs/evaluation/feishu-webhook-batch-summary.json new file mode 100644 index 0000000..c2bd77c --- /dev/null +++ b/docs/evaluation/feishu-webhook-batch-summary.json @@ -0,0 +1 @@ +{"evidenceName":"shopops-feishu-webhook-batch-v1","generatedAt":"2026-07-24T01:44:29.0421976+08:00","startedAt":"2026-07-24T01:43:26.8473509+08:00","baseUrl":"http://localhost:8080","requestCount":100,"successCount":100,"successRate":100,"webhookModeCount":100,"webhookModeRate":100,"http200Count":100,"http200Rate":100,"avgLatencyMs":311.9,"minLatencyMs":244.01,"maxLatencyMs":835.9,"detailFile":"docs/evaluation/feishu-webhook-batch-details.csv","claimBoundary":"This verifies configured Feishu webhook HTTP delivery through ShopOps. Keep the Feishu group screenshot and backend logs as external evidence."} diff --git a/docs/evaluation/manual-report-timing-estimated.csv b/docs/evaluation/manual-report-timing-estimated.csv new file mode 100644 index 0000000..7efd404 --- /dev/null +++ b/docs/evaluation/manual-report-timing-estimated.csv @@ -0,0 +1,6 @@ +runId,dataset,task,manualMinutes,agentAssistedMinutes,basis,notes +estimate-001,olist-public,daily_review_excel_report,32.0,4.0,fixed_workflow_estimate,Order metrics review plus negative review sampling plus Excel summary. +estimate-002,olist-public,negative_comment_analysis,35.0,4.3,fixed_workflow_estimate,Review filtering sentiment grouping root-cause summary and recommendation writing. +estimate-003,olist-criteo-public,operation_anomaly_review,37.0,4.1,fixed_workflow_estimate,Order review comment risk ad low-conversion summary and action list. +estimate-004,olist-public,product_risk_review,34.0,4.2,fixed_workflow_estimate,Product candidate screening low-score evidence aggregation and report formatting. +estimate-005,olist-criteo-uci-store-sales,full_multi_source_daily_review,39.0,4.4,fixed_workflow_estimate,Multi-source order comment product ad and external-event summary. diff --git a/docs/evaluation/manual-report-timing-template.csv b/docs/evaluation/manual-report-timing-template.csv new file mode 100644 index 0000000..5ec0179 --- /dev/null +++ b/docs/evaluation/manual-report-timing-template.csv @@ -0,0 +1,2 @@ +runId,operator,dataset,task,startedAt,finishedAt,manualMinutes,notes +manual-001,your-name,olist-2018-08-07,daily_review_excel_report,,,,Fill after timing the manual workflow. diff --git a/docs/evaluation/manual-report-timing.csv b/docs/evaluation/manual-report-timing.csv new file mode 100644 index 0000000..4e69ffc --- /dev/null +++ b/docs/evaluation/manual-report-timing.csv @@ -0,0 +1 @@ +runId,operator,dataset,task,startedAt,finishedAt,manualMinutes,notes diff --git a/docs/evaluation/olist-real-business-samples.json b/docs/evaluation/olist-real-business-samples.json new file mode 100644 index 0000000..41b6a0b --- /dev/null +++ b/docs/evaluation/olist-real-business-samples.json @@ -0,0 +1,8972 @@ +[ + { + "sampleId": "OLIST-ORDER-001", + "sampleType": "order_anomaly", + "businessDate": "2016-10-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 10212.22, + "sevenDayAvgGmv": 1838.77, + "gmvDeltaRate": 4.5538, + "orderCount": 47 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-002", + "sampleType": "order_anomaly", + "businessDate": "2017-11-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 179200.03, + "sevenDayAvgGmv": 37203.91, + "gmvDeltaRate": 3.8167, + "orderCount": 1176 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-003", + "sampleType": "order_anomaly", + "businessDate": "2017-01-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 3062.33, + "sevenDayAvgGmv": 902.64, + "gmvDeltaRate": 2.3926, + "orderCount": 12 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-004", + "sampleType": "order_anomaly", + "businessDate": "2016-10-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 9398.61, + "sevenDayAvgGmv": 3278.19, + "gmvDeltaRate": 1.867, + "orderCount": 51 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-005", + "sampleType": "order_anomaly", + "businessDate": "2017-01-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 15191.96, + "sevenDayAvgGmv": 5856.56, + "gmvDeltaRate": 1.594, + "orderCount": 86 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-006", + "sampleType": "order_anomaly", + "businessDate": "2017-04-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 23433.86, + "sevenDayAvgGmv": 9672.48, + "gmvDeltaRate": 1.4227, + "orderCount": 71 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-007", + "sampleType": "order_anomaly", + "businessDate": "2017-03-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 18923.17, + "sevenDayAvgGmv": 8153.89, + "gmvDeltaRate": 1.3208, + "orderCount": 99 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-008", + "sampleType": "order_anomaly", + "businessDate": "2017-01-10", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 1571.17, + "sevenDayAvgGmv": 687.04, + "gmvDeltaRate": 1.2869, + "orderCount": 6 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-009", + "sampleType": "order_anomaly", + "businessDate": "2018-01-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37154.62, + "sevenDayAvgGmv": 17572.19, + "gmvDeltaRate": 1.1144, + "orderCount": 225 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-010", + "sampleType": "order_anomaly", + "businessDate": "2017-01-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 10434.31, + "sevenDayAvgGmv": 5035.0, + "gmvDeltaRate": 1.0724, + "orderCount": 63 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-011", + "sampleType": "order_anomaly", + "businessDate": "2018-01-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 40998.15, + "sevenDayAvgGmv": 19869.38, + "gmvDeltaRate": 1.0634, + "orderCount": 258 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-012", + "sampleType": "order_anomaly", + "businessDate": "2017-08-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37025.7, + "sevenDayAvgGmv": 18089.43, + "gmvDeltaRate": 1.0468, + "orderCount": 137 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-013", + "sampleType": "order_anomaly", + "businessDate": "2016-12-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 19.62, + "sevenDayAvgGmv": 6638.76, + "gmvDeltaRate": -0.997, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-014", + "sampleType": "order_anomaly", + "businessDate": "2016-10-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 61.99, + "sevenDayAvgGmv": 8332.0, + "gmvDeltaRate": -0.9926, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-015", + "sampleType": "order_anomaly", + "businessDate": "2018-08-31", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 63.89, + "sevenDayAvgGmv": 6718.01, + "gmvDeltaRate": -0.9905, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-016", + "sampleType": "order_anomaly", + "businessDate": "2018-09-10", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 51.17, + "sevenDayAvgGmv": 2499.9, + "gmvDeltaRate": -0.9795, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-017", + "sampleType": "order_anomaly", + "businessDate": "2018-08-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 705.04, + "sevenDayAvgGmv": 9436.96, + "gmvDeltaRate": -0.9253, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-018", + "sampleType": "order_anomaly", + "businessDate": "2018-09-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 458.64, + "sevenDayAvgGmv": 5091.31, + "gmvDeltaRate": -0.9099, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-019", + "sampleType": "order_anomaly", + "businessDate": "2018-09-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 84.58, + "sevenDayAvgGmv": 908.92, + "gmvDeltaRate": -0.9069, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-020", + "sampleType": "order_anomaly", + "businessDate": "2017-01-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 2502.69, + "sevenDayAvgGmv": 1337.31, + "gmvDeltaRate": 0.8714, + "orderCount": 13 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-021", + "sampleType": "order_anomaly", + "businessDate": "2017-01-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 707.27, + "sevenDayAvgGmv": 5182.68, + "gmvDeltaRate": -0.8635, + "orderCount": 32 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-022", + "sampleType": "order_anomaly", + "businessDate": "2017-01-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7553.89, + "sevenDayAvgGmv": 4071.78, + "gmvDeltaRate": 0.8552, + "orderCount": 39 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-023", + "sampleType": "order_anomaly", + "businessDate": "2018-09-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 84.58, + "sevenDayAvgGmv": 539.17, + "gmvDeltaRate": -0.8431, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-024", + "sampleType": "order_anomaly", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 26863.58, + "sevenDayAvgGmv": 14582.29, + "gmvDeltaRate": 0.8422, + "orderCount": 96 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-025", + "sampleType": "order_anomaly", + "businessDate": "2018-09-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 258.67, + "sevenDayAvgGmv": 1617.21, + "gmvDeltaRate": -0.8401, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-026", + "sampleType": "order_anomaly", + "businessDate": "2017-01-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 2903.97, + "sevenDayAvgGmv": 1593.8, + "gmvDeltaRate": 0.822, + "orderCount": 12 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-027", + "sampleType": "order_anomaly", + "businessDate": "2018-08-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 2381.83, + "sevenDayAvgGmv": 12582.68, + "gmvDeltaRate": -0.8107, + "orderCount": 14 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-028", + "sampleType": "order_anomaly", + "businessDate": "2016-10-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 8255.19, + "sevenDayAvgGmv": 4610.13, + "gmvDeltaRate": 0.7907, + "orderCount": 46 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-029", + "sampleType": "order_anomaly", + "businessDate": "2018-01-02", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 29494.74, + "sevenDayAvgGmv": 16758.3, + "gmvDeltaRate": 0.76, + "orderCount": 204 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-030", + "sampleType": "order_anomaly", + "businessDate": "2017-01-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 988.28, + "sevenDayAvgGmv": 3941.06, + "gmvDeltaRate": -0.7492, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-031", + "sampleType": "order_anomaly", + "businessDate": "2017-01-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 3712.24, + "sevenDayAvgGmv": 2124.77, + "gmvDeltaRate": 0.7471, + "orderCount": 19 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-032", + "sampleType": "order_anomaly", + "businessDate": "2017-01-27", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 12904.13, + "sevenDayAvgGmv": 7435.39, + "gmvDeltaRate": 0.7355, + "orderCount": 62 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-033", + "sampleType": "order_anomaly", + "businessDate": "2017-08-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 35466.27, + "sevenDayAvgGmv": 20528.03, + "gmvDeltaRate": 0.7277, + "orderCount": 181 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-034", + "sampleType": "order_anomaly", + "businessDate": "2017-12-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 6960.79, + "sevenDayAvgGmv": 24078.38, + "gmvDeltaRate": -0.7109, + "orderCount": 59 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-035", + "sampleType": "order_anomaly", + "businessDate": "2018-08-27", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 6229.95, + "sevenDayAvgGmv": 21209.21, + "gmvDeltaRate": -0.7063, + "orderCount": 67 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-036", + "sampleType": "order_anomaly", + "businessDate": "2017-11-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 50621.24, + "sevenDayAvgGmv": 29861.92, + "gmvDeltaRate": 0.6952, + "orderCount": 230 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-037", + "sampleType": "order_anomaly", + "businessDate": "2018-08-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 5216.72, + "sevenDayAvgGmv": 16334.56, + "gmvDeltaRate": -0.6806, + "orderCount": 44 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-038", + "sampleType": "order_anomaly", + "businessDate": "2016-10-08", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 9716.13, + "sevenDayAvgGmv": 5783.59, + "gmvDeltaRate": 0.6799, + "orderCount": 42 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-039", + "sampleType": "order_anomaly", + "businessDate": "2018-06-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 57345.56, + "sevenDayAvgGmv": 34539.62, + "gmvDeltaRate": 0.6603, + "orderCount": 294 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-040", + "sampleType": "order_anomaly", + "businessDate": "2017-09-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 34497.47, + "sevenDayAvgGmv": 20809.11, + "gmvDeltaRate": 0.6578, + "orderCount": 121 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-041", + "sampleType": "order_anomaly", + "businessDate": "2018-09-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 191.46, + "sevenDayAvgGmv": 542.13, + "gmvDeltaRate": -0.6468, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-042", + "sampleType": "order_anomaly", + "businessDate": "2017-02-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 12582.52, + "sevenDayAvgGmv": 7689.74, + "gmvDeltaRate": 0.6363, + "orderCount": 55 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-043", + "sampleType": "order_anomaly", + "businessDate": "2018-08-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 11450.76, + "sevenDayAvgGmv": 30932.73, + "gmvDeltaRate": -0.6298, + "orderCount": 99 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-044", + "sampleType": "order_anomaly", + "businessDate": "2017-01-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 4683.38, + "sevenDayAvgGmv": 2876.22, + "gmvDeltaRate": 0.6283, + "orderCount": 33 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-045", + "sampleType": "order_anomaly", + "businessDate": "2018-06-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37284.05, + "sevenDayAvgGmv": 22903.71, + "gmvDeltaRate": 0.6279, + "orderCount": 184 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-046", + "sampleType": "order_anomaly", + "businessDate": "2018-07-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 11277.24, + "sevenDayAvgGmv": 29456.77, + "gmvDeltaRate": -0.6172, + "orderCount": 91 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-047", + "sampleType": "order_anomaly", + "businessDate": "2018-08-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 9304.0, + "sevenDayAvgGmv": 24164.26, + "gmvDeltaRate": -0.615, + "orderCount": 73 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-048", + "sampleType": "order_anomaly", + "businessDate": "2018-07-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 35228.7, + "sevenDayAvgGmv": 21836.48, + "gmvDeltaRate": 0.6133, + "orderCount": 124 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-049", + "sampleType": "order_anomaly", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 20574.68, + "sevenDayAvgGmv": 12811.29, + "gmvDeltaRate": 0.606, + "orderCount": 68 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-050", + "sampleType": "order_anomaly", + "businessDate": "2018-07-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 51392.43, + "sevenDayAvgGmv": 32077.44, + "gmvDeltaRate": 0.6021, + "orderCount": 307 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-051", + "sampleType": "order_anomaly", + "businessDate": "2017-02-19", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 4477.65, + "sevenDayAvgGmv": 11230.78, + "gmvDeltaRate": -0.6013, + "orderCount": 40 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-052", + "sampleType": "order_anomaly", + "businessDate": "2017-06-21", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7275.1, + "sevenDayAvgGmv": 18119.94, + "gmvDeltaRate": -0.5985, + "orderCount": 35 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-053", + "sampleType": "order_anomaly", + "businessDate": "2017-07-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 32450.89, + "sevenDayAvgGmv": 20371.89, + "gmvDeltaRate": 0.5929, + "orderCount": 192 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-054", + "sampleType": "order_anomaly", + "businessDate": "2017-04-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 20774.55, + "sevenDayAvgGmv": 13072.94, + "gmvDeltaRate": 0.5891, + "orderCount": 96 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-055", + "sampleType": "order_anomaly", + "businessDate": "2017-02-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 5648.37, + "sevenDayAvgGmv": 13567.41, + "gmvDeltaRate": -0.5837, + "orderCount": 49 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-056", + "sampleType": "order_anomaly", + "businessDate": "2018-08-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 11737.76, + "sevenDayAvgGmv": 26729.59, + "gmvDeltaRate": -0.5609, + "orderCount": 69 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-057", + "sampleType": "order_anomaly", + "businessDate": "2018-09-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 221.54, + "sevenDayAvgGmv": 503.96, + "gmvDeltaRate": -0.5604, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-058", + "sampleType": "order_anomaly", + "businessDate": "2017-02-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 15747.17, + "sevenDayAvgGmv": 10129.57, + "gmvDeltaRate": 0.5546, + "orderCount": 67 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-059", + "sampleType": "order_anomaly", + "businessDate": "2018-10-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 222.03, + "sevenDayAvgGmv": 143.88, + "gmvDeltaRate": 0.5431, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-060", + "sampleType": "order_anomaly", + "businessDate": "2018-10-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 80.38, + "sevenDayAvgGmv": 175.41, + "gmvDeltaRate": -0.5418, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-061", + "sampleType": "order_anomaly", + "businessDate": "2017-07-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 26556.07, + "sevenDayAvgGmv": 17310.43, + "gmvDeltaRate": 0.5341, + "orderCount": 154 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-062", + "sampleType": "order_anomaly", + "businessDate": "2017-01-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 3893.61, + "sevenDayAvgGmv": 2544.44, + "gmvDeltaRate": 0.5302, + "orderCount": 32 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-063", + "sampleType": "order_anomaly", + "businessDate": "2017-01-08", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 809.63, + "sevenDayAvgGmv": 1721.77, + "gmvDeltaRate": -0.5298, + "orderCount": 6 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-064", + "sampleType": "order_anomaly", + "businessDate": "2017-11-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 52584.62, + "sevenDayAvgGmv": 34415.14, + "gmvDeltaRate": 0.528, + "orderCount": 283 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-065", + "sampleType": "order_anomaly", + "businessDate": "2018-05-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 62568.25, + "sevenDayAvgGmv": 40953.2, + "gmvDeltaRate": 0.5278, + "orderCount": 372 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-066", + "sampleType": "order_anomaly", + "businessDate": "2017-07-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 24664.58, + "sevenDayAvgGmv": 16227.05, + "gmvDeltaRate": 0.52, + "orderCount": 145 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-067", + "sampleType": "order_anomaly", + "businessDate": "2018-01-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 8486.29, + "sevenDayAvgGmv": 17354.86, + "gmvDeltaRate": -0.511, + "orderCount": 74 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-068", + "sampleType": "order_anomaly", + "businessDate": "2017-06-19", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 25933.44, + "sevenDayAvgGmv": 17218.63, + "gmvDeltaRate": 0.5061, + "orderCount": 156 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-069", + "sampleType": "order_anomaly", + "businessDate": "2017-03-19", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7728.08, + "sevenDayAvgGmv": 15610.74, + "gmvDeltaRate": -0.505, + "orderCount": 56 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-070", + "sampleType": "order_anomaly", + "businessDate": "2018-03-15", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 51935.36, + "sevenDayAvgGmv": 34559.47, + "gmvDeltaRate": 0.5028, + "orderCount": 290 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-071", + "sampleType": "order_anomaly", + "businessDate": "2017-01-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 1447.99, + "sevenDayAvgGmv": 2902.93, + "gmvDeltaRate": -0.5012, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-072", + "sampleType": "order_anomaly", + "businessDate": "2017-11-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37026.73, + "sevenDayAvgGmv": 74191.34, + "gmvDeltaRate": -0.5009, + "orderCount": 267 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-073", + "sampleType": "order_anomaly", + "businessDate": "2017-03-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7642.02, + "sevenDayAvgGmv": 15231.81, + "gmvDeltaRate": -0.4983, + "orderCount": 64 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-074", + "sampleType": "order_anomaly", + "businessDate": "2017-03-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 22913.37, + "sevenDayAvgGmv": 15325.53, + "gmvDeltaRate": 0.4951, + "orderCount": 114 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-075", + "sampleType": "order_anomaly", + "businessDate": "2018-09-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 94.63, + "sevenDayAvgGmv": 186.58, + "gmvDeltaRate": -0.4928, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-076", + "sampleType": "order_anomaly", + "businessDate": "2018-05-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 23086.12, + "sevenDayAvgGmv": 44829.53, + "gmvDeltaRate": -0.485, + "orderCount": 161 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-077", + "sampleType": "order_anomaly", + "businessDate": "2017-09-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 12574.83, + "sevenDayAvgGmv": 24390.16, + "gmvDeltaRate": -0.4844, + "orderCount": 88 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-078", + "sampleType": "order_anomaly", + "businessDate": "2018-07-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 32635.24, + "sevenDayAvgGmv": 22019.23, + "gmvDeltaRate": 0.4821, + "orderCount": 168 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-079", + "sampleType": "order_anomaly", + "businessDate": "2017-05-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 10675.67, + "sevenDayAvgGmv": 20438.88, + "gmvDeltaRate": -0.4777, + "orderCount": 73 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-ORDER-080", + "sampleType": "order_anomaly", + "businessDate": "2017-09-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 32784.96, + "sevenDayAvgGmv": 22236.88, + "gmvDeltaRate": 0.4744, + "orderCount": 206 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "sampleId": "OLIST-REFUND-001", + "sampleType": "refund_increase", + "businessDate": "2018-10-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 89.71, + "gmv": 89.71, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-002", + "sampleType": "refund_increase", + "businessDate": "2018-10-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 222.03, + "gmv": 222.03, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-003", + "sampleType": "refund_increase", + "businessDate": "2018-10-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 197.55, + "gmv": 197.55, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-004", + "sampleType": "refund_increase", + "businessDate": "2018-10-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 80.38, + "gmv": 80.38, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-005", + "sampleType": "refund_increase", + "businessDate": "2018-09-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 137.03, + "gmv": 137.03, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-006", + "sampleType": "refund_increase", + "businessDate": "2018-09-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 94.63, + "gmv": 94.63, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-007", + "sampleType": "refund_increase", + "businessDate": "2018-09-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 221.54, + "gmv": 221.54, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-008", + "sampleType": "refund_increase", + "businessDate": "2018-09-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 191.46, + "gmv": 191.46, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-009", + "sampleType": "refund_increase", + "businessDate": "2018-09-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 84.58, + "gmv": 84.58, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-010", + "sampleType": "refund_increase", + "businessDate": "2018-09-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 414.04, + "gmv": 414.04, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-011", + "sampleType": "refund_increase", + "businessDate": "2018-09-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 84.58, + "gmv": 84.58, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-012", + "sampleType": "refund_increase", + "businessDate": "2018-09-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 258.67, + "gmv": 258.67, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-013", + "sampleType": "refund_increase", + "businessDate": "2018-09-10", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 51.17, + "gmv": 51.17, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-014", + "sampleType": "refund_increase", + "businessDate": "2018-09-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2443.2, + "gmv": 2443.2, + "refundProxyRate": 1.0, + "orderCount": 3 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-015", + "sampleType": "refund_increase", + "businessDate": "2018-08-31", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 63.89, + "gmv": 63.89, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-016", + "sampleType": "refund_increase", + "businessDate": "2018-08-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 705.04, + "gmv": 705.04, + "refundProxyRate": 1.0, + "orderCount": 4 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-017", + "sampleType": "refund_increase", + "businessDate": "2016-10-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 61.99, + "gmv": 61.99, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-018", + "sampleType": "refund_increase", + "businessDate": "2016-10-02", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 109.34, + "gmv": 109.34, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-019", + "sampleType": "refund_increase", + "businessDate": "2016-09-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 40.95, + "gmv": 40.95, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-020", + "sampleType": "refund_increase", + "businessDate": "2016-09-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 75.06, + "gmv": 75.06, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-021", + "sampleType": "refund_increase", + "businessDate": "2018-09-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 292.18, + "gmv": 458.64, + "refundProxyRate": 0.6371, + "orderCount": 4 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-022", + "sampleType": "refund_increase", + "businessDate": "2018-07-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 12277.87, + "gmv": 35228.7, + "refundProxyRate": 0.3485, + "orderCount": 124 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-023", + "sampleType": "refund_increase", + "businessDate": "2018-08-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 619.13, + "gmv": 2381.83, + "refundProxyRate": 0.2599, + "orderCount": 14 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-024", + "sampleType": "refund_increase", + "businessDate": "2016-10-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2137.31, + "gmv": 9398.61, + "refundProxyRate": 0.2274, + "orderCount": 51 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-025", + "sampleType": "refund_increase", + "businessDate": "2017-03-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 4268.48, + "gmv": 18923.17, + "refundProxyRate": 0.2256, + "orderCount": 99 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-026", + "sampleType": "refund_increase", + "businessDate": "2018-08-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1095.49, + "gmv": 5216.72, + "refundProxyRate": 0.21, + "orderCount": 44 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-027", + "sampleType": "refund_increase", + "businessDate": "2017-04-14", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2189.48, + "gmv": 10515.9, + "refundProxyRate": 0.2082, + "orderCount": 54 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-028", + "sampleType": "refund_increase", + "businessDate": "2016-10-09", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 857.47, + "gmv": 4152.11, + "refundProxyRate": 0.2065, + "orderCount": 26 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-029", + "sampleType": "refund_increase", + "businessDate": "2017-03-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2532.04, + "gmv": 13515.12, + "refundProxyRate": 0.1873, + "orderCount": 105 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-030", + "sampleType": "refund_increase", + "businessDate": "2016-10-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1900.28, + "gmv": 10212.22, + "refundProxyRate": 0.1861, + "orderCount": 47 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-031", + "sampleType": "refund_increase", + "businessDate": "2017-03-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 4205.53, + "gmv": 22913.37, + "refundProxyRate": 0.1835, + "orderCount": 114 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-032", + "sampleType": "refund_increase", + "businessDate": "2017-03-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2761.38, + "gmv": 15533.69, + "refundProxyRate": 0.1778, + "orderCount": 80 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-033", + "sampleType": "refund_increase", + "businessDate": "2017-06-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2728.59, + "gmv": 19348.54, + "refundProxyRate": 0.141, + "orderCount": 115 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-034", + "sampleType": "refund_increase", + "businessDate": "2017-04-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1488.14, + "gmv": 10765.57, + "refundProxyRate": 0.1382, + "orderCount": 65 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-035", + "sampleType": "refund_increase", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1766.68, + "gmv": 13386.91, + "refundProxyRate": 0.132, + "orderCount": 79 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-036", + "sampleType": "refund_increase", + "businessDate": "2017-03-21", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1770.87, + "gmv": 14937.51, + "refundProxyRate": 0.1186, + "orderCount": 97 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-037", + "sampleType": "refund_increase", + "businessDate": "2017-08-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 3327.9, + "gmv": 28398.61, + "refundProxyRate": 0.1172, + "orderCount": 174 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-038", + "sampleType": "refund_increase", + "businessDate": "2017-04-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1949.52, + "gmv": 17711.57, + "refundProxyRate": 0.1101, + "orderCount": 115 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-039", + "sampleType": "refund_increase", + "businessDate": "2017-06-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2149.55, + "gmv": 19733.69, + "refundProxyRate": 0.1089, + "orderCount": 90 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-040", + "sampleType": "refund_increase", + "businessDate": "2017-09-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2232.1, + "gmv": 21328.86, + "refundProxyRate": 0.1047, + "orderCount": 99 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-041", + "sampleType": "refund_increase", + "businessDate": "2017-08-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1523.15, + "gmv": 15928.58, + "refundProxyRate": 0.0956, + "orderCount": 96 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-042", + "sampleType": "refund_increase", + "businessDate": "2017-06-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1486.29, + "gmv": 16236.74, + "refundProxyRate": 0.0915, + "orderCount": 95 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-043", + "sampleType": "refund_increase", + "businessDate": "2017-02-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 851.71, + "gmv": 9308.3, + "refundProxyRate": 0.0915, + "orderCount": 54 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-044", + "sampleType": "refund_increase", + "businessDate": "2017-10-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1966.16, + "gmv": 21890.58, + "refundProxyRate": 0.0898, + "orderCount": 130 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-045", + "sampleType": "refund_increase", + "businessDate": "2017-03-27", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1816.7, + "gmv": 20549.29, + "refundProxyRate": 0.0884, + "orderCount": 111 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-046", + "sampleType": "refund_increase", + "businessDate": "2017-12-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1786.99, + "gmv": 20552.64, + "refundProxyRate": 0.0869, + "orderCount": 135 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-047", + "sampleType": "refund_increase", + "businessDate": "2017-02-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 816.41, + "gmv": 9393.37, + "refundProxyRate": 0.0869, + "orderCount": 63 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-048", + "sampleType": "refund_increase", + "businessDate": "2017-02-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 665.31, + "gmv": 7803.72, + "refundProxyRate": 0.0853, + "orderCount": 55 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-049", + "sampleType": "refund_increase", + "businessDate": "2017-02-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 878.33, + "gmv": 10310.99, + "refundProxyRate": 0.0852, + "orderCount": 73 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-050", + "sampleType": "refund_increase", + "businessDate": "2016-10-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1013.7, + "gmv": 11914.65, + "refundProxyRate": 0.0851, + "orderCount": 63 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-051", + "sampleType": "refund_increase", + "businessDate": "2018-08-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 3288.73, + "gmv": 40872.77, + "refundProxyRate": 0.0805, + "orderCount": 257 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-052", + "sampleType": "refund_increase", + "businessDate": "2017-11-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1749.14, + "gmv": 21752.57, + "refundProxyRate": 0.0804, + "orderCount": 144 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-053", + "sampleType": "refund_increase", + "businessDate": "2017-10-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1650.16, + "gmv": 20572.64, + "refundProxyRate": 0.0802, + "orderCount": 88 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-054", + "sampleType": "refund_increase", + "businessDate": "2016-10-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 645.6, + "gmv": 8255.19, + "refundProxyRate": 0.0782, + "orderCount": 46 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-055", + "sampleType": "refund_increase", + "businessDate": "2018-08-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 4732.62, + "gmv": 62057.77, + "refundProxyRate": 0.0763, + "orderCount": 370 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-056", + "sampleType": "refund_increase", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1520.77, + "gmv": 20574.68, + "refundProxyRate": 0.0739, + "orderCount": 68 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-057", + "sampleType": "refund_increase", + "businessDate": "2017-02-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 415.22, + "gmv": 5648.37, + "refundProxyRate": 0.0735, + "orderCount": 49 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-058", + "sampleType": "refund_increase", + "businessDate": "2017-07-09", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 785.41, + "gmv": 10701.14, + "refundProxyRate": 0.0734, + "orderCount": 94 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-059", + "sampleType": "refund_increase", + "businessDate": "2017-07-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1605.28, + "gmv": 22950.01, + "refundProxyRate": 0.0699, + "orderCount": 162 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-060", + "sampleType": "refund_increase", + "businessDate": "2017-03-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 581.23, + "gmv": 8789.14, + "refundProxyRate": 0.0661, + "orderCount": 74 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-061", + "sampleType": "refund_increase", + "businessDate": "2017-12-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1068.58, + "gmv": 16425.64, + "refundProxyRate": 0.0651, + "orderCount": 109 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-062", + "sampleType": "refund_increase", + "businessDate": "2017-02-14", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 960.39, + "gmv": 15309.08, + "refundProxyRate": 0.0627, + "orderCount": 76 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-063", + "sampleType": "refund_increase", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1620.77, + "gmv": 26863.58, + "refundProxyRate": 0.0603, + "orderCount": 96 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-064", + "sampleType": "refund_increase", + "businessDate": "2017-05-31", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1449.81, + "gmv": 24063.38, + "refundProxyRate": 0.0602, + "orderCount": 129 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-065", + "sampleType": "refund_increase", + "businessDate": "2016-10-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 35.61, + "gmv": 595.14, + "refundProxyRate": 0.0598, + "orderCount": 8 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-066", + "sampleType": "refund_increase", + "businessDate": "2018-07-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1950.2, + "gmv": 32962.26, + "refundProxyRate": 0.0592, + "orderCount": 215 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-067", + "sampleType": "refund_increase", + "businessDate": "2017-07-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1329.93, + "gmv": 22517.84, + "refundProxyRate": 0.0591, + "orderCount": 142 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-068", + "sampleType": "refund_increase", + "businessDate": "2017-01-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 180.81, + "gmv": 3062.33, + "refundProxyRate": 0.059, + "orderCount": 12 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-069", + "sampleType": "refund_increase", + "businessDate": "2017-07-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1373.58, + "gmv": 24964.63, + "refundProxyRate": 0.055, + "orderCount": 165 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-REFUND-070", + "sampleType": "refund_increase", + "businessDate": "2017-07-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 912.61, + "gmv": 16676.75, + "refundProxyRate": 0.0547, + "orderCount": 121 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "OLIST-COMMENT-001", + "sampleType": "low_score_comment", + "businessDate": "2016-10-06", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6916ca4502d6d3bfd39818759d55d536", + "orderId": "bfbd0f9bdef84302105ad712db648a6c", + "productId": "5a6b04657a4c5ee34285d1e4619a96b4", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-002", + "sampleType": "low_score_comment", + "businessDate": "2016-10-20", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "b28309e8253951a954123e039d3242f7", + "orderId": "8beb59392e21af5eb9547ae1a9938d06", + "productId": "c66def7098f4d87751f40c3a4855ced1", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-003", + "sampleType": "low_score_comment", + "businessDate": "2016-10-20", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "3ec60dec755e23c788b026be90faa337", + "orderId": "fb5114c39f632a52598cf770c6076620", + "productId": "269e87010f6d5e57015a90b00983e334", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-004", + "sampleType": "low_score_comment", + "businessDate": "2016-10-21", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "68527c158a36d2fd93c284664ccc6dcc", + "orderId": "8c72f52f7655510c1ec81f3b9019c638", + "productId": "4a90b44b456e79e7a33435fdd36e551f", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-005", + "sampleType": "low_score_comment", + "businessDate": "2016-10-21", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6f97d8b5afaf78f8658cfc0634840b40", + "orderId": "cbbb524a0e1646aa6cf7a3c0bbe517ad", + "productId": "bab7ff9abbcc13690a62d015f2ca8e44", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-006", + "sampleType": "low_score_comment", + "businessDate": "2016-10-22", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "efef5a00aac989951350619e06681dcb", + "orderId": "ac2b7c522d811acba0aa270ed3e112e4", + "productId": "4632bc49b300378ed4f1d48f424d414e", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-007", + "sampleType": "low_score_comment", + "businessDate": "2016-10-22", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "b8ee78b3ced2f119b89b611a0efdba7b", + "orderId": "f688669f48063536e082bb32d634cd46", + "productId": "c66def7098f4d87751f40c3a4855ced1", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-008", + "sampleType": "low_score_comment", + "businessDate": "2016-10-22", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "cef1ee03ded4d6272894a2eead6e1328", + "orderId": "2e7a8482f6fb09756ca50c10d7bfc047", + "productId": "c1488892604e4ba5cff5b4eb4d595400", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-009", + "sampleType": "low_score_comment", + "businessDate": "2016-10-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "5d369f0070f24cb17ec69c8ae95b85c3", + "orderId": "b88cd65e1d90bf6e185bf9b6f0b614cd", + "productId": "57e5c7033739b88d673eba67e9cf9376", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-010", + "sampleType": "low_score_comment", + "businessDate": "2016-10-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0aa8b628ffe8130e26b668f9f3a2f6ef", + "orderId": "f7310018040436b01ab03f81b301b5de", + "productId": "ecf23a6c1689e2bed38171ececac6138", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-011", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "24c08f393f2d716d30adbd58e9a6939c", + "orderId": "59e7ca596664da0a459a145eb95cc9c5", + "productId": "bf128b5dced56e2ec0391179eb70443d", + "category": "baby", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-012", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "1edb1e0331873cc2085a59daa354a510", + "orderId": "79ffdd52a918bbe867895a4b183d6457", + "productId": "5691a536d459e5cb326b7bedce928067", + "category": "air_conditioning", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-013", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "b13013b811c2325934e8e049683bdcf2", + "orderId": "51725d3e4bdfc97e28b40543310da8a3", + "productId": "79938780eb7ffb7289f59a9a283bc06b", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-014", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "34d62feeefaf60ef6ff7204af19fe109", + "orderId": "71303d7e93b399f5bcd537d124c0bcfa", + "productId": "d2998d7ced12f83f9b832f33cf6507b6", + "category": "baby", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-015", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "91f30fe56a84d369d913e7bf6d1d85a5", + "orderId": "e9555dc20eba7e4e62210df1f438ea00", + "productId": "21fb5057dd6a737df6851a7ab7a130da", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-016", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "61fcfc9aad23649e8a5b653d539a2d19", + "orderId": "45ec58d30f2023e4dac16d956a657ddd", + "productId": "afad7a4420a4348d41da23ed8d0902dd", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-017", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d565a7363d2e9836a02775db90e54f3d", + "orderId": "5cd498954e2b37d71b315166809b4bd7", + "productId": "896a64a7f34cdfef2c60ce59fa2a148f", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-018", + "sampleType": "low_score_comment", + "businessDate": "2016-10-28", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0ed5802ea93f04e9bf2364c664dadbbd", + "orderId": "96123b9ae5a9cdfd4efe5fe402a94675", + "productId": "8a8ffceebd3e62e6b982760275d38128", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-019", + "sampleType": "low_score_comment", + "businessDate": "2016-10-28", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9d4df583085fec1900dfac4efd0b085a", + "orderId": "2e32dea8a4d1ae5499a67674b387bc6a", + "productId": "f9bb291280bceedf7840b89e1e75b89c", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-020", + "sampleType": "low_score_comment", + "businessDate": "2016-10-29", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "604097d05c7b80206fc808f6781ebfc4", + "orderId": "f883e09a1fb01318052c6ab839efb34a", + "productId": "d984b9203bd56960bbdda0bb7f05f781", + "category": "fashion_bags_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-021", + "sampleType": "low_score_comment", + "businessDate": "2016-10-29", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a93139d9d1314158c080e3db7e79618b", + "orderId": "e5fa5a7210941f7d56d0208e4e071d35", + "productId": "f3c2d01a84c947b078e32bbef0718962", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-022", + "sampleType": "low_score_comment", + "businessDate": "2016-10-30", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "35166e4e735bdbc0d586522eaadbf563", + "orderId": "cb29497c3782a76b57327c055d58b0e0", + "productId": "8adc1d29aa4fd4d758a91ef997c8a0a2", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-023", + "sampleType": "low_score_comment", + "businessDate": "2016-10-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "00e927398b7a872a23c8990b38b7026a", + "orderId": "021d08e4057e5b6414c8d2f69f4f72a0", + "productId": "a819714dd23a6ac18b1be2b13686017b", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-024", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d6bf917f19cd51622bf95a1e686a779e", + "orderId": "7a7d2c889e27d93b2005462a8788e168", + "productId": "f6fe388c9bfc145a2790437f1e4888d9", + "category": "fashion_male_clothing", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-025", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c1644211f1fe90951c81499cbd08f7b3", + "orderId": "ae0913baa54f18027667d8049c36fde2", + "productId": "0f3c8906e5b08127d539956bc587074c", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-026", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c5075a206ee6306f4d08cf95670de225", + "orderId": "34c718970b33419ed6d537a90366231b", + "productId": "7ed8c74b7ad2f1790a24a24c071da537", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-027", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "444d04d7ca0131b3b40619f81d0facd5", + "orderId": "d207cc272675637bfed0062edffd0818", + "productId": "107177bf61755f05c604fe57e02467d6", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-028", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "46e746815b9560ce0b1df90666dca37e", + "orderId": "62246c16a32a0866943f17d7b42db940", + "productId": "2c818013dbc95f5cd2d6a393a31813e0", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-029", + "sampleType": "low_score_comment", + "businessDate": "2016-11-02", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a36150969fe6bd09ed011dd78aeb0189", + "orderId": "ef1b29b591d31d57c0d7337460dd83c9", + "productId": "bfce5e847034e1fbbc1ed0bff6a372c7", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-030", + "sampleType": "low_score_comment", + "businessDate": "2016-11-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "af980ca9bafbc96e2fbb0576a76310a7", + "orderId": "7cb5aaf8b7b7b439174c2e4efdf4c7a3", + "productId": "8bff0b13faf092077c3bba691c07ff16", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-031", + "sampleType": "low_score_comment", + "businessDate": "2016-11-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c5a815f89971cd69e828bc8c2d992524", + "orderId": "8d47519f5c9c42540b37bd3db0492878", + "productId": "3d37da85f5e66558333fb5daee494736", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-032", + "sampleType": "low_score_comment", + "businessDate": "2016-11-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7c550b9bf9cd966aaf4d713682fe63da", + "orderId": "9315757eaf0e782619bed131508dbddb", + "productId": "e41a6ac2f57a273eb0d214c7cbab5db9", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-033", + "sampleType": "low_score_comment", + "businessDate": "2016-11-09", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "f9fe37d91c506b29a0b4d9107f667bde", + "orderId": "65d1e226dfaeb8cdc42f665422522d14", + "productId": "9c7bdf67b06b419aefb93cfdfc96c55d", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-034", + "sampleType": "low_score_comment", + "businessDate": "2016-11-10", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7d02f4eb2feb119b854edcbabe18a44f", + "orderId": "2c45c33d2f9cb8ff8b1c86cc28c11c30", + "productId": "e24f73b7631ee3fbb2ab700a9acaa258", + "category": "fashion_bags_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-035", + "sampleType": "low_score_comment", + "businessDate": "2016-11-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a450b65b40eef4bd63aed18e935770b6", + "orderId": "7e2dddf174cc4d2768bf39c43ab2bd7a", + "productId": "e41a6ac2f57a273eb0d214c7cbab5db9", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-036", + "sampleType": "low_score_comment", + "businessDate": "2016-11-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a9815ff889a8e9c67023e892f642edf5", + "orderId": "b7026ba7432929d99880463305b8ce98", + "productId": "f3dd572f31692bb5b6ab21d2af0673b1", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-037", + "sampleType": "low_score_comment", + "businessDate": "2016-11-15", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "2c9eac63112b72ae2dd2102b056bf942", + "orderId": "e2eaf909eb6ba881117aa407992a5ffb", + "productId": "b73f6899a58fe7a37e55149e9a11c717", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-038", + "sampleType": "low_score_comment", + "businessDate": "2016-11-18", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "77bfe4bdc0cd1d42f8354ae9231897e3", + "orderId": "98974b076b01553d49ee6467905675a7", + "productId": "ecf23a6c1689e2bed38171ececac6138", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-039", + "sampleType": "low_score_comment", + "businessDate": "2016-11-18", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "517623f52b801129ac4b4c560d70635b", + "orderId": "262118ce178bb3e4590a3adcf6d62e6b", + "productId": "6aeed495dcb87dd06532f70dea6ebb5a", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-040", + "sampleType": "low_score_comment", + "businessDate": "2016-11-18", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "815e1b04599377590d462178d524b69a", + "orderId": "b2f92b2f7047cd8b35580d629d7b3bfb", + "productId": "8f1e43e0e3374ed8c84df748034d6179", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-041", + "sampleType": "low_score_comment", + "businessDate": "2016-11-19", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "db848ccc3e7f893c8eb4a04a861a0ac4", + "orderId": "ed8c7b1b3eb256c70ce0c74231e1da88", + "productId": "29bedbfbe73ea473396306b4f0c010ec", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-042", + "sampleType": "low_score_comment", + "businessDate": "2016-11-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "845e2bc6ae8e8a91c1c84cf2aaee9880", + "orderId": "711b9be9c346d9ecdb9d38a5e1e7e39b", + "productId": "d6f3bd7b1fc04fb1a2effb51ae44ab17", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-043", + "sampleType": "low_score_comment", + "businessDate": "2016-11-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "153ef790db4a65fb8acb9f66e7f32299", + "orderId": "6b3ee7697a02619a0ace2b3f0aa46bde", + "productId": "4c7d4a2efde21e3bf1660926fabc6a9d", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-044", + "sampleType": "low_score_comment", + "businessDate": "2016-11-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "deab3ad3f78fd4ef275d9788978b92c9", + "orderId": "4dd47e84e6b8ff4a63d0b8425e6d788e", + "productId": "2aa489c905e1d41d8c716a6d6912d8c2", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-045", + "sampleType": "low_score_comment", + "businessDate": "2016-11-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "911489d0bc7092faa2e845b5300acde7", + "orderId": "5cc475c7c03290048eb2e742cd64cb5e", + "productId": "3410cbd7df2130ec3cb9300ef0fe3df1", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-046", + "sampleType": "low_score_comment", + "businessDate": "2016-11-30", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0b637962a16eb130be75783b53f7fa6d", + "orderId": "60856ac7677a70cd87ad25d9b34d051b", + "productId": "a18c130946b89ab774bc5948fe71e2a5", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-047", + "sampleType": "low_score_comment", + "businessDate": "2016-11-30", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "921049da2de940d19c9948ea7eee6155", + "orderId": "edb2a55c055efbb898171ec9fd840ab9", + "productId": "e7ffaa35a5caaca3366f5cc5705b5fb2", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-048", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "2d84d56571c0faa1650252595226d07a", + "orderId": "a6475bb7a50387e3c665534e15bd40ac", + "productId": "39731b928af43b0f49dd60d4706e403f", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-049", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "033baa4238fcac803931108093d2456a", + "orderId": "2fd1c83dd4714cf3cf796fffb6c8de62", + "productId": "17c7ec33a1657924ad493e6978b4bf91", + "category": "baby", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-050", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "26cd23041b56b17585d0e6c720443693", + "orderId": "dc18a044b56ed174037ca164cdf2e921", + "productId": "faa268ecc8a8434cb4ebee091b3222d6", + "category": "electronics", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-051", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9399c464901dcf9d6a40e6dde8ebdf59", + "orderId": "770d331c84e5b214bd9dc70a10b829d0", + "productId": "eba7488e1c67729f045ab43fac426f2e", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-052", + "sampleType": "low_score_comment", + "businessDate": "2016-12-02", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "3b850443ee703ff8381534dc0349847d", + "orderId": "ed83f6065ae47112c8cfbd22e231b6d8", + "productId": "bcb4f6803e8889a70dc5ed14c2f5f785", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-053", + "sampleType": "low_score_comment", + "businessDate": "2016-12-02", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6a6d47eaea5802fde29dad23aca026b0", + "orderId": "3c3ca08854ca922fe8e9cedfd6841c8a", + "productId": "ac6c24af9f913c9375a3ea77883bda6e", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-054", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9190e6754710d977b6bc3185688e3ffe", + "orderId": "7d7bf3ee337c36ce012762da5f28f53a", + "productId": "4d7ccacbf7d2dd3e566cf5f149fb92e8", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-055", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d7486b4da781b9d7dc5484ce65868081", + "orderId": "45973912e490866800c0aea8f63099c8", + "productId": "46d66b9ad911a2cea5e3c9127aa7fac5", + "category": "air_conditioning", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-056", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "41ed8254635784cbc62d612c5ededecc", + "orderId": "35b8e54d765e6b217e2dc5ab34f6b323", + "productId": "b4763c2caeeac2424b64aa199789b81b", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-057", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "135e5d955a1420b964a8b9a5e6ddd881", + "orderId": "063b573b88fc80e516aba87df524f809", + "productId": "3d37da85f5e66558333fb5daee494736", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-058", + "sampleType": "low_score_comment", + "businessDate": "2016-12-04", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "ca7077026f9092b0d08e03bd95d33f94", + "orderId": "42c5091238dc63339c79f5f35f8a5a6b", + "productId": "4b88b15eb9d5ad74ffa095bcd4ddb64f", + "category": "market_place", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-059", + "sampleType": "low_score_comment", + "businessDate": "2016-12-04", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7b6cf1c09041a79e596a1f1793790c13", + "orderId": "f69ae31bce06a78d626762b53067c7e0", + "productId": "3cdff94d5455b793b415be775cace03c", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-060", + "sampleType": "low_score_comment", + "businessDate": "2016-12-07", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "e75346401b7cced62b4aa709ba3d0edb", + "orderId": "5cb8558cbb7c0c2f00f43468579d3e3c", + "productId": "ad5396bf96af6ede77130e54ad266c61", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-061", + "sampleType": "low_score_comment", + "businessDate": "2016-12-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "3918306fc04f31c393a12070f6e66966", + "orderId": "6e5fe7366a2e1bfbf3257dba0af1267f", + "productId": "65bb78cf0bbc3ca6406f30e6793736f9", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-062", + "sampleType": "low_score_comment", + "businessDate": "2016-12-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0a55a99c93ca3fa4119c5fed56081806", + "orderId": "dd845e1cdb19f08d029a727adc9a5a77", + "productId": "6d2928252aa5ba6a5fc439571dd0d748", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-063", + "sampleType": "low_score_comment", + "businessDate": "2016-12-09", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6d06808638ec0701bccd70bc8d462c28", + "orderId": "97d2f8fe76f2f253b8291e17b5383884", + "productId": "a8255c87078b4bd9bc05fe7290ca5c25", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-064", + "sampleType": "low_score_comment", + "businessDate": "2016-12-09", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "8757f5e0a1f891b890039b0d95c321c8", + "orderId": "4551b488487e6cfa31f9e35073d3c5d4", + "productId": "1e571e871a93944c5c48e6226f2cd94e", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-065", + "sampleType": "low_score_comment", + "businessDate": "2016-12-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "160850927a5f16f903dc83a05e0a5826", + "orderId": "d3c8851a6651eeff2f73b0e011ac45d0", + "productId": "ca17b18b38db6e0d2c33d362322f2a06", + "category": "books_technical", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-066", + "sampleType": "low_score_comment", + "businessDate": "2016-12-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "e146e108db2520d865889322dba96355", + "orderId": "eb45ce36240dbf895bef98be0d1a85d3", + "productId": "54c31c4585d30843421c7ea07d80f84e", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-067", + "sampleType": "low_score_comment", + "businessDate": "2016-12-14", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7e0c87e8ff306146ef6dc005938cd146", + "orderId": "552e0a8dae101e32155120202f427b71", + "productId": "e4fe462cce9f36e312b869418a86bc3a", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-068", + "sampleType": "low_score_comment", + "businessDate": "2016-12-14", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d10c67a24f4506d9aed50cb4cf9d7953", + "orderId": "c4e980a1d822db426982878b3cfdda6e", + "productId": "04df667e73ca2fab4b9a97c86466b699", + "category": "watches_gifts", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-069", + "sampleType": "low_score_comment", + "businessDate": "2016-12-14", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "50c851bd79dc0b19f3d9c523ca747df8", + "orderId": "54bb06e1ca86bd99ee2a8d6288bf4ede", + "productId": "bef13288a0f8b26d763411ced1dfa268", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-070", + "sampleType": "low_score_comment", + "businessDate": "2016-12-16", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6a91e35dd43fa13587108e698937cef8", + "orderId": "bfd31c6f76ff82a41e7beb05565aec4d", + "productId": "b4b1c13bd539cdda68bd9a5e899767fb", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-071", + "sampleType": "low_score_comment", + "businessDate": "2016-12-16", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0e78e53b34bbdb054bc13e8c1a4bfc77", + "orderId": "dbbbc904081f8e928028432e2e3d7686", + "productId": "f38ce47371f868581f8c2df4ffa47fb6", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-072", + "sampleType": "low_score_comment", + "businessDate": "2016-12-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "38b7052e458c9d2f5f4e620a52df56ae", + "orderId": "799dc0fd216e2a8e571a2684ddb6f940", + "productId": "4a92216ec92c54fca6f132ae1988390d", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-073", + "sampleType": "low_score_comment", + "businessDate": "2017-01-04", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "f7c4ece51a1f0f3ebf9a67db7df64036", + "orderId": "56eb381fff8db8d35134693062514084", + "productId": "7f524cd9e1d47c5aa4b15b54d6d146cb", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-074", + "sampleType": "low_score_comment", + "businessDate": "2017-01-17", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "537af341b003976eae54d043d0fa121d", + "orderId": "811eadaef225935d84d4d3fdcca7ee85", + "productId": "4a90b44b456e79e7a33435fdd36e551f", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-075", + "sampleType": "low_score_comment", + "businessDate": "2017-01-19", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7d41f8269eb532a7f86290e33669b667", + "orderId": "b174fa32929e4af3622213e835cfa84a", + "productId": "6d811b6e8cada9a8f7f38bb315620e1b", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-076", + "sampleType": "low_score_comment", + "businessDate": "2017-01-21", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "43c846975cad387b7c0a36aad510f825", + "orderId": "ad818323f40e1a353eb3a3874d138c51", + "productId": "20090bcd0d43eb49feb63d53d387780b", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-077", + "sampleType": "low_score_comment", + "businessDate": "2017-01-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6faba0c70369c63f6e99f49c836fe2c9", + "orderId": "b5c037cf61074d84c0a994fa0d024064", + "productId": "be7815756efd025355c3e09139c3f2ac", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-078", + "sampleType": "low_score_comment", + "businessDate": "2017-01-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "005a68c1e45d2ef683bbdc7354c9d3d8", + "orderId": "db0b12b763f716df3f27218724161479", + "productId": "d41d8cd98f00b204e9800998ecf8427e", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-079", + "sampleType": "low_score_comment", + "businessDate": "2017-01-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "ad6cf8eaea460341666797f3fea1773f", + "orderId": "f7b9821d83a86f942cd40560f3c06622", + "productId": "4a90b44b456e79e7a33435fdd36e551f", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-080", + "sampleType": "low_score_comment", + "businessDate": "2017-01-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "ca9f56b7298eb6b17e4ba2150a88df4d", + "orderId": "d809ddde66fee6223df16b11231491f9", + "productId": "d12a5178024ccefb3582170a9ab45a0d", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-081", + "sampleType": "low_score_comment", + "businessDate": "2017-01-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "755509047344db65b4c12fe56626765d", + "orderId": "08d7ec7381dc51d41a0e4d86314b7a98", + "productId": "7fd93eccaf2d461cb6bc4bbd1aa91f1a", + "category": "watches_gifts", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-082", + "sampleType": "low_score_comment", + "businessDate": "2017-01-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "05a82ef7eec443d16dd35560ec541067", + "orderId": "ed5c53daefe487fab95ccd2afaf61bb0", + "productId": "77794668e2278bf0045019b0d8a308b2", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-083", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "71fbc1feab3216ba3f837a9dbc36d3db", + "orderId": "616b813dbea8acc9de0ca0380cd89b83", + "productId": "dbd024d4182504993ad1e3cd2ee9d9e9", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-084", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "8ca59ec52d44279f47d41121bfe3de98", + "orderId": "5497655681652e7e1306139bb5d04a14", + "productId": "f32af0a8b0bcb05b60f05e8907ad8866", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-085", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "53e616f83058b7f7ee042c1f3c2ec051", + "orderId": "51ceba3ba51d4b4543e7f78e181e0ba9", + "productId": "7c68e7297c7df2535c9f0dcd61007f64", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-086", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "8b5afd726cc86efde6b416387b9d3ef4", + "orderId": "0571cdb407bf04b419c94ffd7acbd874", + "productId": "91b08d34d0ba4db44da2dc382867ba49", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-087", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d058dca0fce39b0bf287bd8729f7c08c", + "orderId": "e09dd765041e9934d762d51ccb26adee", + "productId": "7c68e7297c7df2535c9f0dcd61007f64", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-088", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "25eddf8dc03be2e15aec8ac8a32f1923", + "orderId": "df537c849af44beef86a7ef7de12126a", + "productId": "dbd024d4182504993ad1e3cd2ee9d9e9", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-089", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c68ab10732712c84ea727750535b2596", + "orderId": "7b4fb0197b18a0fd0e75f9e44b3fc757", + "productId": "b150110bc5afad8ff2cce5cd50c8e2a2", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-COMMENT-090", + "sampleType": "low_score_comment", + "businessDate": "2017-02-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9e628acdf082a5eeea001b1ded5d94a1", + "orderId": "54d744a4410b1edccc36c6d1f1c7e097", + "productId": "baeb8e1a680cf9e1f13557d74b6cec3d", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-PRODUCT-001", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "99a4788cb24856965c36a24e339b6058", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 64, + "avgReviewScore": 3.95, + "salesQuantity": 488, + "revenue": 43025.56 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-002", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "aca2eb7d00ea1a7b8ebd4e68314663af", + "category": "furniture_decor", + "metrics": { + "lowScoreReviewCount": 52, + "avgReviewScore": 4.1, + "salesQuantity": 527, + "revenue": 37608.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-003", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "422879e10f46682990de24d770e7f83d", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 48, + "avgReviewScore": 4.14, + "salesQuantity": 484, + "revenue": 26577.22 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-004", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "53759a2ecddad2bb87a079a1f1519f73", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 48, + "avgReviewScore": 4.02, + "salesQuantity": 373, + "revenue": 20387.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-005", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "389d119b48cf3043d311335e499d9c6b", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 39, + "avgReviewScore": 4.18, + "salesQuantity": 392, + "revenue": 21440.59 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-006", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7c1bd920dbdf22470b68bde975dd3ccf", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 44, + "avgReviewScore": 3.88, + "salesQuantity": 231, + "revenue": 13866.69 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-007", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2b4609f8948be18874494203496bc318", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 40, + "avgReviewScore": 4.07, + "salesQuantity": 260, + "revenue": 22717.22 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-008", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "53b36df67ebb7c41585e8d54d6772e08", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 36, + "avgReviewScore": 4.25, + "salesQuantity": 323, + "revenue": 37683.42 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-009", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "d1c427060a0f73f6b889a5c7c61f2ac4", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 34, + "avgReviewScore": 4.24, + "salesQuantity": 343, + "revenue": 47214.51 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-010", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e0d64dcfaa3b6db5c54ca298ae101d05", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 40, + "avgReviewScore": 3.8, + "salesQuantity": 194, + "revenue": 31786.82 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-011", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "368c6c730842d78016ad823897a372db", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 30, + "avgReviewScore": 4.22, + "salesQuantity": 388, + "revenue": 21056.8 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-012", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "154e7e31ebfa092203795c972e5804a6", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 27, + "avgReviewScore": 4.31, + "salesQuantity": 281, + "revenue": 6325.19 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-013", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e53e557d5a159f5aa2c5e995dfdf244b", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 37, + "avgReviewScore": 3.64, + "salesQuantity": 183, + "revenue": 15439.25 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-014", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "3dd2a17168ec895c781a9191c1e95ad7", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 4.3, + "salesQuantity": 274, + "revenue": 41082.6 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-015", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "5a848e4ab52fd5445cdc07aab1c40e48", + "category": "unknown", + "metrics": { + "lowScoreReviewCount": 27, + "avgReviewScore": 4.13, + "salesQuantity": 197, + "revenue": 24229.03 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-016", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "89b121bee266dcd25688a1ba72eefb61", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 38, + "avgReviewScore": 2.28, + "salesQuantity": 68, + "revenue": 5433.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-017", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "b5e13c9a353102f79c6206ff5cb61a50", + "category": "toys", + "metrics": { + "lowScoreReviewCount": 35, + "avgReviewScore": 2.95, + "salesQuantity": 91, + "revenue": 7810.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-018", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "3fbc0ef745950c7932d5f2a446189725", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 28, + "avgReviewScore": 3.89, + "salesQuantity": 150, + "revenue": 9862.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-019", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "0a57f7d2c983bcf8188589a5fea4a8da", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 30, + "avgReviewScore": 3.59, + "salesQuantity": 104, + "revenue": 11907.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-020", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "a92930c327948861c015c919a0bcb4a8", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 24, + "avgReviewScore": 3.85, + "salesQuantity": 160, + "revenue": 12475.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-021", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "d285360f29ac7fd97640bf0baef03de0", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 27, + "avgReviewScore": 3.73, + "salesQuantity": 123, + "revenue": 31623.81 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-022", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "461f43be3bdf8844e65b62d9ac2c7a5a", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 24, + "avgReviewScore": 4.01, + "salesQuantity": 146, + "revenue": 20593.22 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-023", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "84f456958365164420cfc80fbe4c7fab", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 28, + "avgReviewScore": 3.33, + "salesQuantity": 111, + "revenue": 10304.96 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-024", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "bb50f2e236e5eea0100680137654686c", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 4.21, + "salesQuantity": 195, + "revenue": 63885.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-025", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "42a2c92a0979a949ca4ea89ec5c7b934", + "category": "housewares", + "metrics": { + "lowScoreReviewCount": 22, + "avgReviewScore": 4.06, + "salesQuantity": 183, + "revenue": 10870.1 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-026", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "35afc973633aaeb6b877ff57b2793310", + "category": "home_confort", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 3.89, + "salesQuantity": 165, + "revenue": 14484.89 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-027", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "a62e25e09e05e6faf31d90c6ec1aa3d1", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 20, + "avgReviewScore": 4.16, + "salesQuantity": 226, + "revenue": 24051.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-028", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "19c91ef95d509ea33eda93495c4d3481", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 21, + "avgReviewScore": 4.12, + "salesQuantity": 156, + "revenue": 18889.44 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-029", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "4c2394abfbac7ff59ec7a420918562fa", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 24, + "avgReviewScore": 3.78, + "salesQuantity": 123, + "revenue": 10453.77 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-030", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "b1d207586fca400a2370d50a9ba1da98", + "category": "unknown", + "metrics": { + "lowScoreReviewCount": 31, + "avgReviewScore": 2.02, + "salesQuantity": 48, + "revenue": 7152.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-031", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7a10781637204d8d10485c71a6108a2e", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 21, + "avgReviewScore": 4.07, + "salesQuantity": 143, + "revenue": 30467.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-032", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "656e0eca68dcecf6a31b8ececfabe3e8", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 3.93, + "salesQuantity": 141, + "revenue": 12477.6 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-033", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "36f60d45225e60c7da4558b070ce4b60", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 3.67, + "salesQuantity": 127, + "revenue": 11240.96 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-034", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "4fe644d766c7566dbc46fb851363cb3b", + "category": "art", + "metrics": { + "lowScoreReviewCount": 22, + "avgReviewScore": 3.75, + "salesQuantity": 107, + "revenue": 10803.72 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-035", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "d017a2151d543a9885604dc62a3d9dcc", + "category": "fashion_bags_accessories", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 4.11, + "salesQuantity": 140, + "revenue": 6860.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-036", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "6cdd53843498f92890544667809f1595", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 4.32, + "salesQuantity": 156, + "revenue": 54730.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-037", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "165f86fe8b799a708a20ee4ba125c289", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 21, + "avgReviewScore": 3.84, + "salesQuantity": 109, + "revenue": 17820.91 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-038", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "06edb72f1e0c64b14c5b79353f7abea3", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 18, + "avgReviewScore": 4.07, + "salesQuantity": 143, + "revenue": 5831.77 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-039", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "437c05a395e9e47f9762e677a7068ce7", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 4.16, + "salesQuantity": 155, + "revenue": 7757.91 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-040", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "b532349fe46b38fbc7bb3914c1bdae07", + "category": "furniture_decor", + "metrics": { + "lowScoreReviewCount": 22, + "avgReviewScore": 3.63, + "salesQuantity": 169, + "revenue": 6162.11 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-041", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "6f3b5b605d91b7439c5e3f5a8dffeea7", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 4.09, + "salesQuantity": 117, + "revenue": 19009.4 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-042", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "8c591ab0ca519558779df02023177f44", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 4.15, + "salesQuantity": 141, + "revenue": 14492.14 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-043", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "89321f94e35fc6d7903d36f74e351d40", + "category": "food", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 3.99, + "salesQuantity": 119, + "revenue": 3375.71 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-044", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "4298b7e67dc399c200662b569563a2b2", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 3.71, + "salesQuantity": 88, + "revenue": 12479.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-045", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "c4baedd846ed09b85f78a781b522f126", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 4.28, + "salesQuantity": 149, + "revenue": 14989.03 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-046", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "43423cdffde7fda63d0414ed38c11a73", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 3.69, + "salesQuantity": 93, + "revenue": 5780.28 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-047", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7ce94ab189134e2d3c05f496d635419c", + "category": "electronics", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 4.04, + "salesQuantity": 106, + "revenue": 1446.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-048", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "52c80cedd4e90108bf4fa6a206ef6b03", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 4.16, + "salesQuantity": 118, + "revenue": 20495.56 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-049", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "cd46a885543f0e169a49f1eb25c04e43", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 1.61, + "salesQuantity": 30, + "revenue": 2999.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-050", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2028bf1b01cafb2d2b1901fca4083222", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.28, + "salesQuantity": 138, + "revenue": 7675.62 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-051", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e7cc48a9daff5436f63d3aad9426f28b", + "category": "telephony", + "metrics": { + "lowScoreReviewCount": 18, + "avgReviewScore": 3.53, + "salesQuantity": 93, + "revenue": 16216.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-052", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ee0c1cf2fbeae95205b4aa506f1469f0", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 4.11, + "salesQuantity": 89, + "revenue": 4598.11 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-053", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "c6dd917a0be2a704582055949915ab32", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 12, + "avgReviewScore": 4.25, + "salesQuantity": 120, + "revenue": 11868.42 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-054", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "25c38557cf793876c5abdd5931f922db", + "category": "baby", + "metrics": { + "lowScoreReviewCount": 20, + "avgReviewScore": 2.68, + "salesQuantity": 38, + "revenue": 38907.32 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-055", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ee406bf28024d97771c4b1e8b7e8e219", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 4.15, + "salesQuantity": 90, + "revenue": 12914.1 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-056", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "f1c7f353075ce59d8a6f3cf58f419c9c", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 9, + "avgReviewScore": 4.37, + "salesQuantity": 154, + "revenue": 29997.36 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-057", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "3f14d740544f37ece8a9e7bc8349797e", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 3.81, + "salesQuantity": 91, + "revenue": 7731.03 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-058", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "0aabfb375647d9738ad0f7b4ea3653b1", + "category": "consoles_games", + "metrics": { + "lowScoreReviewCount": 10, + "avgReviewScore": 4.25, + "salesQuantity": 142, + "revenue": 3416.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-059", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "601a360bd2a916ecef0e88de72a6531a", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.33, + "salesQuantity": 119, + "revenue": 15159.81 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-060", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2a5806f10d0f00e5ad032dd2e3c8806e", + "category": "office_furniture", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 3.25, + "salesQuantity": 55, + "revenue": 9421.45 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-061", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "6c3effec7c8ddba466d4f03f982c7aa3", + "category": "consoles_games", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.92, + "salesQuantity": 97, + "revenue": 2384.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-062", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "08574b074924071f4e201e151b152b4e", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 12, + "avgReviewScore": 4.09, + "salesQuantity": 113, + "revenue": 10759.3 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-063", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "75d6b6963340c6063f7f4cfcccfe6a30", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 12, + "avgReviewScore": 4.16, + "salesQuantity": 93, + "revenue": 5288.07 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-064", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "362b773250263786dd58670d2df42c3b", + "category": "sports_leisure", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 3.43, + "salesQuantity": 73, + "revenue": 3782.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-065", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "1dec4c88c685d5a07bf01dcb0f8bf9f8", + "category": "auto", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 2.74, + "salesQuantity": 35, + "revenue": 19965.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-066", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e0cf79767c5b016251fe139915c59a26", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 8, + "avgReviewScore": 4.51, + "salesQuantity": 137, + "revenue": 4096.3 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-067", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "617186c3d97ea56c9c683a8a3974e8c1", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.3, + "salesQuantity": 95, + "revenue": 7924.05 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-068", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e59dd207c69d86e890febadc796d1078", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 14, + "avgReviewScore": 3.72, + "salesQuantity": 62, + "revenue": 9043.37 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-069", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2ffdf10e724b958c0f7ea69e97d32f64", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 3.3, + "salesQuantity": 52, + "revenue": 10916.6 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-070", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "386486367c1f9d4f587a8864ccb6902b", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 3.46, + "salesQuantity": 55, + "revenue": 6128.25 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-071", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ec2d43cc59763ec91694573b31f1c29a", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 9, + "avgReviewScore": 4.33, + "salesQuantity": 131, + "revenue": 6011.77 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-072", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "8c292ca193d326152e335d77176746f0", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.09, + "salesQuantity": 92, + "revenue": 14139.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-073", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "dab2413ead0edda9967edbc9bda2a64e", + "category": "telephony", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.66, + "salesQuantity": 68, + "revenue": 2038.88 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-074", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7e0dc102074f8285580c9777f79c90cf", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.75, + "salesQuantity": 72, + "revenue": 2582.8 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-075", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "54d9ac713e253fa1fae9c8003b011c2a", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 8, + "avgReviewScore": 4.35, + "salesQuantity": 114, + "revenue": 3656.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-076", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ea44caac707f7f1325182a538007f838", + "category": "baby", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.82, + "salesQuantity": 63, + "revenue": 3198.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-077", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "0cf41187284d7f099adc8415a743ebbd", + "category": "baby", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 2.87, + "salesQuantity": 35, + "revenue": 1256.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-078", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "bbaef2eadf31fe3ea6702077398be06c", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.77, + "salesQuantity": 65, + "revenue": 3704.35 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-079", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "595fac2a385ac33a80bd5114aec74eb8", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 9, + "avgReviewScore": 4.43, + "salesQuantity": 106, + "revenue": 12636.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-PRODUCT-080", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "777d2e438a1b645f3aec9bd57e92672c", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 10, + "avgReviewScore": 4.1, + "salesQuantity": 94, + "revenue": 6567.8 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "sampleId": "OLIST-DELAY-001", + "sampleType": "delivery_delay_risk", + "businessDate": "2016-10-06", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "bfbd0f9bdef84302105ad712db648a6c", + "reviewId": "6916ca4502d6d3bfd39818759d55d536", + "productId": "5a6b04657a4c5ee34285d1e4619a96b4", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-002", + "sampleType": "delivery_delay_risk", + "businessDate": "2016-11-27", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5cc475c7c03290048eb2e742cd64cb5e", + "reviewId": "911489d0bc7092faa2e845b5300acde7", + "productId": "3410cbd7df2130ec3cb9300ef0fe3df1", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-003", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-02-17", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "89898719573722b59b173f76fb213501", + "reviewId": "19232d185d499934b048f16285e6d20e", + "productId": "3889a02f55ae9a5e5e321c4a4d2eee64", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-004", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-02-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3c116d50bb76160ee1d7a2e8f5791427", + "reviewId": "154073a27ed4fc007c9b8c4439ae83f5", + "productId": "9fa0c72476690fbc66bcacc498fe7fd6", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-005", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-01", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "bf79e4fa55a389d494f47feb2654892c", + "reviewId": "6b63898cfd07a3793858c7591753983e", + "productId": "fe09eb5f7bfcb79d05df7c4e83ec204e", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-006", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-02", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5d6e9993ecc20a59e637ce711858d081", + "reviewId": "97e60b155b921d80a70650674b8ad2e5", + "productId": "3c2f792f1041177a81913a977431a99e", + "category": "electronics", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-007", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-03", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4fa07e91d7b4f8b191e3a6ab40f14f54", + "reviewId": "48d1f2a1dbb0cac3e9f04e7b962c86e7", + "productId": "11875b30b49585209e608f40e8082e65", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-008", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-04", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "fcafab7fc942d51e9f45bfeeb5bb684d", + "reviewId": "b78ffbba38f07d0efbb7f7647f3a7097", + "productId": "9b1c7bc7cad0519369a5ea04afe303f7", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-009", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-05", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "21dfb91aa3e9fa351ae6f12da1c53fb9", + "reviewId": "9f1d9a5aaedfe8ac4ccc267e43a40a2b", + "productId": "0b50295ca2c740dec15bb6fec6e8a3e2", + "category": "fashion_underwear_beach", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-010", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "fbee80ef6891c144af8ff9dc788aaa89", + "reviewId": "389c453b569a52990da32722f07c18d8", + "productId": "89c111575a1b19782a2e660eff07dd8a", + "category": "fashion_bags_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-011", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "b96f5299909903eedc435d396f90f726", + "reviewId": "89cd5131fdd598b29789a8a4ad616f7c", + "productId": "c6edce374ec89184d740f3e674add5f4", + "category": "watches_gifts", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-012", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-10", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5629fdbbd11b9755743ba8b8f517f8cc", + "reviewId": "33a67e99de7baa0bb6ebf4fc0fb0c397", + "productId": "20205e1ea024aec43a7a3fc0d8f7a287", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-013", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-10", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d3aa5667ad65af7fa58a5481d0aff07a", + "reviewId": "6e97423635790db1bf4d3f2311d0ec59", + "productId": "7858ef2bdbf08f635dedbe5cd1dc966e", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-014", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-11", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "cfd5e54c14f22b62683cea7ed91caa24", + "reviewId": "c0ffa7eb30ef0434b39a1a557f80a733", + "productId": "94fb2ab4419d523ecce8e5d56676788d", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-015", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-11", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "b04215f2cbc4e1fdd167427e657c7d16", + "reviewId": "d8c7bd905f4be8112a724a1cb1137dd5", + "productId": "f9d151cf2fc10d41cce64b782856320f", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-016", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-12", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "7d86c4aa9e59504b23f16c7ca68954a7", + "reviewId": "874b3612c564c7516c780ddc5e7e44ac", + "productId": "e8d7b12572b213ba22acebb8983a4615", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-017", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "695eed4f6656d10f32a49760523169de", + "reviewId": "73b022300fec142e9939aba068921a79", + "productId": "cf78006a2a6b0429b9663edd99bb38f9", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-018", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "66cd3a1c2edd13d9da86b50aca9e3d32", + "reviewId": "fd0cf5c069a2da217b7fe5da6307e908", + "productId": "a4d8f727f92014da5dd64116af14634c", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-019", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "67e9625c39f8c6e529f81ad4c28acc5e", + "reviewId": "ab2e034121ea2d0235db4d43b83fba5b", + "productId": "fa80471d26662bb653b2286e4b735a5a", + "category": "auto", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-020", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5a90bdab22ab69f4095415dd55451b66", + "reviewId": "25a3f93b2c04231a3bdadca8bfe31c64", + "productId": "d0fe4295267f15ccaceac4fb233d8c9a", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-021", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "194a9f43598155086b091e0c827ad480", + "reviewId": "245d316770c8e8ada158c0fc56794854", + "productId": "73f5461cce8ab8a4db14936789113bfc", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-022", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "dc5cb627d7efea62719ee5d36aa9254b", + "reviewId": "79a1f09a1fa57eed5af596c4fdbe5131", + "productId": "f838e96e79703e5e94c13c86609530c5", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-023", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-17", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "efd2c0c31366671a99bb3eba61b5459a", + "reviewId": "3ad0d3ff003118a0d4478f851f5e3149", + "productId": "2f02a124a827f65bfcc0baf443dad405", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-024", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-18", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3ac0423d1e7e335f83c8fa3600ae47d7", + "reviewId": "35b31761452ee352746a6015417cd0b4", + "productId": "a3fc0390c2d3101f940c0d6e78006e4e", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-025", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-18", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3195c228f36c525c75f392549eff247f", + "reviewId": "fb273933480c85e5897cea81904ce534", + "productId": "a1ccbdad642a580304988cd472018896", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-026", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-18", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "abbbf52551bc34cd52a7851c06dfca90", + "reviewId": "1d2783cf7a04a2b804081fdf2729db11", + "productId": "6f1ccca9f878a413a495487eb649ab32", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-027", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-19", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "76279ee78a4924f44a3a83ef23b169b8", + "reviewId": "5f8884f89aa21b0c12a0ce6c48ec7bd1", + "productId": "2a5806f10d0f00e5ad032dd2e3c8806e", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-028", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-19", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4456ddfcb3350b652f0318df9b7f3cde", + "reviewId": "6387c2ef4ca190ef97609cec9622c66e", + "productId": "62e456c867c6e980b926b96362a76468", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-029", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-22", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "93da2265260e364c8e81f490b7d92e07", + "reviewId": "c43dc86e31db842af4f81d269f723574", + "productId": "084461b396a7e044af9229534fa03b51", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-030", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "1095806f851129963474b5f20d6520fd", + "reviewId": "3ee73291305a46b3000317df81f7c1d6", + "productId": "d07c0177e489e871713b83a518446ac7", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-031", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "f73d73f08d9e97a496861a69bf371880", + "reviewId": "a9bf07f67913191c2b58bc8e03fd1bd6", + "productId": "310794f4911fb5f5f2add5e9ad72b21f", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-032", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a380e6e7800d5e6d6fb008fe587e4202", + "reviewId": "85567db9f0f2a4000a8ff95f2200b61a", + "productId": "caa5c299fe513376ba573cfd401822c8", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-033", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d573a47c29466bb2e4e46aef0ff04f23", + "reviewId": "0c95d3a2b40f67fe6c8c6ea1fbc07f23", + "productId": "97ac99fefa9cf4eb8f825136a89e8f40", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-034", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c40c8f44fadbd73ec33576de59af7037", + "reviewId": "6fc4e2702f84a1a71fe7dd3bd9747a7d", + "productId": "403f76f6cb6bac59fe7dcb462ec42ac3", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-035", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "523d7597c0c82db94fd16b4213e2f0ab", + "reviewId": "dec3b89256e4f35e00cf26fb0e016ba0", + "productId": "0db0a25da8420d8e6d918b552c3c4891", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-036", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "18e4264c34fe91aab3b39ea012932f3d", + "reviewId": "0488ce54fae74a52af3255785ef718ae", + "productId": "cd59f488cef311feb633141ad1e8563d", + "category": "food", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-037", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-26", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c39c97c1d22e4a4486ce849afb668211", + "reviewId": "20ed06776b2a815d8e3091ff153dda3a", + "productId": "3bcf64d8d26d6e06bd568d27fe31d8e8", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-038", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-26", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "674e1f5ca0441058cc7fa110cb4f49eb", + "reviewId": "bde49b90bd1f490e9d74aa1081ab697c", + "productId": "00250175f79f584c14ab5cecd80553cd", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-039", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-29", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "06215d34c1ec4e1106eb12ae5fd0370f", + "reviewId": "58fba994301774191d7fef8f8af5bcd7", + "productId": "42130cd7a981706499a4d337f2f7f621", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-040", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-29", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "91415c7eb3a9313812484623efc7ee27", + "reviewId": "161c215e2b76dde78b90f987cdba9bde", + "productId": "eb551aa4ed7eb5e2839d5b7d2896bece", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-041", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-29", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3dbf60040199f502ec5dd67f86b804ab", + "reviewId": "811c25e89f3d101069689b571b1818a6", + "productId": "3d22445510fe5a03299a8d2a5da7abf4", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-042", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-30", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "9d5d3058706c16d0557d9b43c95ed70e", + "reviewId": "7b2ae7a7b8930d783c4cd39d1033f431", + "productId": "404a57563d487aecbc2b1a01d9b89aab", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-043", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c8d355d9b0027d16b4f22804df2bbc2d", + "reviewId": "e0a3c5ef82be25048f998dba7a7f9c5f", + "productId": "ff6154cee42bf2718cca4865f0620e04", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-044", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a17c7cad1ce274604db62cc3d2def2c9", + "reviewId": "1c2dc552d0c5a1788d7c3dbf91443b49", + "productId": "46f739c1cd676603026c0af4d29ef7a5", + "category": "auto", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-045", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "00d03eb3425f41a599ae2f788e23c07f", + "reviewId": "e19f31db602ae8378c04a6d0608aa476", + "productId": "c35498fbb4358837ae16850f50c3fd22", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-046", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5667af66694cc07bce46f7af2ed32ed6", + "reviewId": "6ad530bb54fb56183cb64898c5226872", + "productId": "f5c47e637a96fcf0de8c1c6baa75d856", + "category": "electronics", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-047", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "777c67eab7c0712ccde8ffbb22715adb", + "reviewId": "be7e2989673cb2a147b87ba73277da9e", + "productId": "73df0070248804951b5c6ba9537c6fc3", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-048", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "2ba1366baecad3c3536f27546d129017", + "reviewId": "23ee6bc2492808dca0e807e131ec9aeb", + "productId": "e4176515d2055eb7771645c597f8b40c", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-049", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-02", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a685d016c8a26f71a0bb67821070e398", + "reviewId": "19d60869413aa63834affc9ecc9d9f90", + "productId": "ebd7c847c1e1cb69ec374ae0ebee1f4c", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-050", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-02", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "64fee01b4774a493de37aafa79a3d434", + "reviewId": "ba850a2a553e93c345ebaf412aa29a1f", + "productId": "1a06a6a66ab23d70e02b8f92650e268f", + "category": "home_confort", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-051", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-05", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d5bcb8f80071a67b57f191f45f7faf88", + "reviewId": "1f816e3ff358fd6d7eef326e15c23cbe", + "productId": "1750753e77dc38c4afe6fc90f02c39bc", + "category": "toys", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-052", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-05", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "7d0a7957897551b77224fc297e8f6046", + "reviewId": "92e49e5d5ea4a8aa76c10fcf0fd90350", + "productId": "abe6b1e401ce596ad0c493aeedb488a4", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-053", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4ef8fef15b3a1986d266d349b21ab021", + "reviewId": "9364ac5f9db46b2ea389cea4e5389529", + "productId": "fc3e972df7e263b301e2bee77ac2a6d3", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-054", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "6b63433212c602eeba6a683bdc5e6b4b", + "reviewId": "27bb6d509932b0d5f18cb41e458496d6", + "productId": "5d030df086e7b38e143350d4c99db48d", + "category": "furniture_living_room", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-055", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-07", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d079556268ebfb6ee516faac531c2f78", + "reviewId": "72c6cfd29ed7dd89c9025eb5f453724f", + "productId": "3a7c9b0413d7b9cc7f4a18318fc5afb3", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-056", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-08", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "8a7679380ddbbbe7495aa2d1cafd515b", + "reviewId": "8a16c25ba338614974d204c5b6444b52", + "productId": "861857117917aaa99611defcc0d514cd", + "category": "food", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-057", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-08", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "285ab9426d6982034523a855f55a885e", + "reviewId": "38477ef6c23d3478a0f012503919803a", + "productId": "0c6fc9b9317a68d1cda098c063914b72", + "category": "musical_instruments", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-058", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-08", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "6cbad422849c13ec8f4517ee01a6c02b", + "reviewId": "709342ef7d2d7786b744e2f2c83cb357", + "productId": "c1488892604e4ba5cff5b4eb4d595400", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-059", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "0a8f35ef46160ef897c27ba8c423d823", + "reviewId": "4742655b1e39dd8f4ae75fa947d35bb0", + "productId": "3a002b488f85e2b30838e413c9241f18", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-060", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "427be8c69327b86f12e65fb5fedfde5c", + "reviewId": "91243d50c25245df8fa3fa148488d764", + "productId": "ad5f871bf1f82cf7aed349162ab802e6", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-061", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "2fe324febf907e3ea3f2aa9650869fa5", + "reviewId": "2f48a889d5738776ab5180f2b4fbb4e5", + "productId": "b75683e29689c1a989ae97883e8cad56", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-062", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "179643231d5131dc81e54ce16437972f", + "reviewId": "3848b75c5bfe221557d5a85708d9c906", + "productId": "552a2a10932c4abaff715fe6a4d61280", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-063", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "40d702a17a6d8b52548cb922505283a9", + "reviewId": "2caddd407fc1d84f1eb3b79641071af2", + "productId": "92c1eb75a887a500d9689fbad65e27e3", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-064", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-12", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "854d9f86041d38857c38795f8c133494", + "reviewId": "1d7649f44d4bea2700421c4a52d46893", + "productId": "fb01a5fc09b9b9563c2ee41a22f07d54", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-065", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-13", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "85aa425106ebd563ef29f08d6cb0f4d0", + "reviewId": "3b838d7cb25f28fe79abc1fc679c853b", + "productId": "37e4c14527273be66b84b8836bba463b", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-066", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-13", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "440d0d17af552815d15a9e41abe49359", + "reviewId": "b72948c0912824f5660a661fcb3ef512", + "productId": "3bec03860f3782ef8993056e01b8229a", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-067", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-14", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3f3f818c758f0f9ed76a1d49d8d7e6f3", + "reviewId": "f95689ce5d00e28c1756545f87e2627c", + "productId": "ec8514b52ebb78103c68fddbb2d9f0a8", + "category": "musical_instruments", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-068", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-14", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "1e2e0bd44283a412e965e041198550c2", + "reviewId": "841ca4c7309936db53ec53e72d91d77f", + "productId": "dfb97c88e066dc22165f31648efe1312", + "category": "auto", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-069", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "70be4f36c3ba5f5c95734da20d4c34a7", + "reviewId": "af3e49496fc86e553113e545869ca2b9", + "productId": "99a4788cb24856965c36a24e339b6058", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-070", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5503b14ddf7853393e5acf02e0128442", + "reviewId": "fd887ad0739a64ca018a91f0f297cd6b", + "productId": "b57a4072f1286a401272930c85221f91", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-071", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "f891a5652a32da88979c1328c7cb73db", + "reviewId": "d98088708b78c7a6d3b9652c70b112bd", + "productId": "dcfeedf441c38e5e7e58ffce194af2bb", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-072", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "545c329642c609a7e1e3ab759eed9dc5", + "reviewId": "e3e1d48d963d615dc1237d25761731b9", + "productId": "50147c350ddbaff0646aeac455c7473e", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-073", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-19", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a88edef387e2a7e457695664bf0ddfc0", + "reviewId": "aba19e5eab0160c4694c6ebbab7b4a4c", + "productId": "bf84efc59aa20236fc3cb0d7a9e7ca44", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-074", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4d2e2634819452adb3313ccb5abd344f", + "reviewId": "3cd07e6913fe06ddbf4522cd3a308c2d", + "productId": "777d2e438a1b645f3aec9bd57e92672c", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-075", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5207664bb97d53e5e9cdfd0163380e2f", + "reviewId": "04323bc37f851b35eacd18ae256bf98c", + "productId": "234df98e1a567a28c8ff2079fd55198b", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-076", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c565668594ff62ffd95ef9f06d90742f", + "reviewId": "ebc14f2a8751892c6d3fc4632babe50b", + "productId": "47a67549d9b00310453dec1c3902e391", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-077", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "6854558dc4979ad704ccd9ff6a90e628", + "reviewId": "b4da3b9037daf7ea39dd8c4a8f675ef0", + "productId": "6bbe55cf8f85c87b6eebb775a53402f4", + "category": "tablets_printing_image", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-078", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a53ebffcfdb8c4e47308374591571f96", + "reviewId": "63bcd08d96493aaf37a206e1b0de0834", + "productId": "be29c68650ca8ac7209aeb238df7f05f", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-079", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-21", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3c314f50bc654f3c4e317b055681dff9", + "reviewId": "9fd59cd04b42f600df9f25e54082a8d1", + "productId": "a87567bdce60de6f901e3d7c6d8df820", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "OLIST-DELAY-080", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-21", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "95e7bfc2e335e44766ce4eb5f5771e30", + "reviewId": "20b4d0deb7a5b4d4bf478f2ed658a455", + "productId": "83a1778b0d5b20c0724c97e35f083082", + "category": "toys", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + } +] diff --git a/docs/evaluation/public-real-business-samples.json b/docs/evaluation/public-real-business-samples.json new file mode 100644 index 0000000..3e511e2 --- /dev/null +++ b/docs/evaluation/public-real-business-samples.json @@ -0,0 +1,18612 @@ +[ + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-001", + "sampleType": "order_anomaly", + "businessDate": "2016-10-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 10212.22, + "sevenDayAvgGmv": 1838.77, + "gmvDeltaRate": 4.5538, + "orderCount": 47 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-002", + "sampleType": "order_anomaly", + "businessDate": "2017-11-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 179200.03, + "sevenDayAvgGmv": 37203.91, + "gmvDeltaRate": 3.8167, + "orderCount": 1176 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-003", + "sampleType": "order_anomaly", + "businessDate": "2017-01-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 3062.33, + "sevenDayAvgGmv": 902.64, + "gmvDeltaRate": 2.3926, + "orderCount": 12 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-004", + "sampleType": "order_anomaly", + "businessDate": "2016-10-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 9398.61, + "sevenDayAvgGmv": 3278.19, + "gmvDeltaRate": 1.867, + "orderCount": 51 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-005", + "sampleType": "order_anomaly", + "businessDate": "2017-01-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 15191.96, + "sevenDayAvgGmv": 5856.56, + "gmvDeltaRate": 1.594, + "orderCount": 86 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-006", + "sampleType": "order_anomaly", + "businessDate": "2017-04-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 23433.86, + "sevenDayAvgGmv": 9672.48, + "gmvDeltaRate": 1.4227, + "orderCount": 71 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-007", + "sampleType": "order_anomaly", + "businessDate": "2017-03-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 18923.17, + "sevenDayAvgGmv": 8153.89, + "gmvDeltaRate": 1.3208, + "orderCount": 99 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-008", + "sampleType": "order_anomaly", + "businessDate": "2017-01-10", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 1571.17, + "sevenDayAvgGmv": 687.04, + "gmvDeltaRate": 1.2869, + "orderCount": 6 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-009", + "sampleType": "order_anomaly", + "businessDate": "2018-01-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37154.62, + "sevenDayAvgGmv": 17572.19, + "gmvDeltaRate": 1.1144, + "orderCount": 225 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-010", + "sampleType": "order_anomaly", + "businessDate": "2017-01-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 10434.31, + "sevenDayAvgGmv": 5035.0, + "gmvDeltaRate": 1.0724, + "orderCount": 63 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-011", + "sampleType": "order_anomaly", + "businessDate": "2018-01-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 40998.15, + "sevenDayAvgGmv": 19869.38, + "gmvDeltaRate": 1.0634, + "orderCount": 258 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-012", + "sampleType": "order_anomaly", + "businessDate": "2017-08-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37025.7, + "sevenDayAvgGmv": 18089.43, + "gmvDeltaRate": 1.0468, + "orderCount": 137 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-013", + "sampleType": "order_anomaly", + "businessDate": "2016-12-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 19.62, + "sevenDayAvgGmv": 6638.76, + "gmvDeltaRate": -0.997, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-014", + "sampleType": "order_anomaly", + "businessDate": "2016-10-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 61.99, + "sevenDayAvgGmv": 8332.0, + "gmvDeltaRate": -0.9926, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-015", + "sampleType": "order_anomaly", + "businessDate": "2018-08-31", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 63.89, + "sevenDayAvgGmv": 6718.01, + "gmvDeltaRate": -0.9905, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-016", + "sampleType": "order_anomaly", + "businessDate": "2018-09-10", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 51.17, + "sevenDayAvgGmv": 2499.9, + "gmvDeltaRate": -0.9795, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-017", + "sampleType": "order_anomaly", + "businessDate": "2018-08-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 705.04, + "sevenDayAvgGmv": 9436.96, + "gmvDeltaRate": -0.9253, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-018", + "sampleType": "order_anomaly", + "businessDate": "2018-09-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 458.64, + "sevenDayAvgGmv": 5091.31, + "gmvDeltaRate": -0.9099, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-019", + "sampleType": "order_anomaly", + "businessDate": "2018-09-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 84.58, + "sevenDayAvgGmv": 908.92, + "gmvDeltaRate": -0.9069, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-020", + "sampleType": "order_anomaly", + "businessDate": "2017-01-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 2502.69, + "sevenDayAvgGmv": 1337.31, + "gmvDeltaRate": 0.8714, + "orderCount": 13 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-021", + "sampleType": "order_anomaly", + "businessDate": "2017-01-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 707.27, + "sevenDayAvgGmv": 5182.68, + "gmvDeltaRate": -0.8635, + "orderCount": 32 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-022", + "sampleType": "order_anomaly", + "businessDate": "2017-01-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7553.89, + "sevenDayAvgGmv": 4071.78, + "gmvDeltaRate": 0.8552, + "orderCount": 39 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-023", + "sampleType": "order_anomaly", + "businessDate": "2018-09-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 84.58, + "sevenDayAvgGmv": 539.17, + "gmvDeltaRate": -0.8431, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-024", + "sampleType": "order_anomaly", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 26863.58, + "sevenDayAvgGmv": 14582.29, + "gmvDeltaRate": 0.8422, + "orderCount": 96 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-025", + "sampleType": "order_anomaly", + "businessDate": "2018-09-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 258.67, + "sevenDayAvgGmv": 1617.21, + "gmvDeltaRate": -0.8401, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-026", + "sampleType": "order_anomaly", + "businessDate": "2017-01-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 2903.97, + "sevenDayAvgGmv": 1593.8, + "gmvDeltaRate": 0.822, + "orderCount": 12 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-027", + "sampleType": "order_anomaly", + "businessDate": "2018-08-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 2381.83, + "sevenDayAvgGmv": 12582.68, + "gmvDeltaRate": -0.8107, + "orderCount": 14 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-028", + "sampleType": "order_anomaly", + "businessDate": "2016-10-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 8255.19, + "sevenDayAvgGmv": 4610.13, + "gmvDeltaRate": 0.7907, + "orderCount": 46 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-029", + "sampleType": "order_anomaly", + "businessDate": "2018-01-02", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 29494.74, + "sevenDayAvgGmv": 16758.3, + "gmvDeltaRate": 0.76, + "orderCount": 204 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-030", + "sampleType": "order_anomaly", + "businessDate": "2017-01-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 988.28, + "sevenDayAvgGmv": 3941.06, + "gmvDeltaRate": -0.7492, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-031", + "sampleType": "order_anomaly", + "businessDate": "2017-01-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 3712.24, + "sevenDayAvgGmv": 2124.77, + "gmvDeltaRate": 0.7471, + "orderCount": 19 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-032", + "sampleType": "order_anomaly", + "businessDate": "2017-01-27", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 12904.13, + "sevenDayAvgGmv": 7435.39, + "gmvDeltaRate": 0.7355, + "orderCount": 62 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-033", + "sampleType": "order_anomaly", + "businessDate": "2017-08-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 35466.27, + "sevenDayAvgGmv": 20528.03, + "gmvDeltaRate": 0.7277, + "orderCount": 181 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-034", + "sampleType": "order_anomaly", + "businessDate": "2017-12-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 6960.79, + "sevenDayAvgGmv": 24078.38, + "gmvDeltaRate": -0.7109, + "orderCount": 59 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-035", + "sampleType": "order_anomaly", + "businessDate": "2018-08-27", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 6229.95, + "sevenDayAvgGmv": 21209.21, + "gmvDeltaRate": -0.7063, + "orderCount": 67 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-036", + "sampleType": "order_anomaly", + "businessDate": "2017-11-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 50621.24, + "sevenDayAvgGmv": 29861.92, + "gmvDeltaRate": 0.6952, + "orderCount": 230 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-037", + "sampleType": "order_anomaly", + "businessDate": "2018-08-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 5216.72, + "sevenDayAvgGmv": 16334.56, + "gmvDeltaRate": -0.6806, + "orderCount": 44 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-038", + "sampleType": "order_anomaly", + "businessDate": "2016-10-08", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 9716.13, + "sevenDayAvgGmv": 5783.59, + "gmvDeltaRate": 0.6799, + "orderCount": 42 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-039", + "sampleType": "order_anomaly", + "businessDate": "2018-06-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 57345.56, + "sevenDayAvgGmv": 34539.62, + "gmvDeltaRate": 0.6603, + "orderCount": 294 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-040", + "sampleType": "order_anomaly", + "businessDate": "2017-09-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 34497.47, + "sevenDayAvgGmv": 20809.11, + "gmvDeltaRate": 0.6578, + "orderCount": 121 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-041", + "sampleType": "order_anomaly", + "businessDate": "2018-09-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 191.46, + "sevenDayAvgGmv": 542.13, + "gmvDeltaRate": -0.6468, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-042", + "sampleType": "order_anomaly", + "businessDate": "2017-02-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 12582.52, + "sevenDayAvgGmv": 7689.74, + "gmvDeltaRate": 0.6363, + "orderCount": 55 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-043", + "sampleType": "order_anomaly", + "businessDate": "2018-08-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 11450.76, + "sevenDayAvgGmv": 30932.73, + "gmvDeltaRate": -0.6298, + "orderCount": 99 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-044", + "sampleType": "order_anomaly", + "businessDate": "2017-01-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 4683.38, + "sevenDayAvgGmv": 2876.22, + "gmvDeltaRate": 0.6283, + "orderCount": 33 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-045", + "sampleType": "order_anomaly", + "businessDate": "2018-06-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37284.05, + "sevenDayAvgGmv": 22903.71, + "gmvDeltaRate": 0.6279, + "orderCount": 184 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-046", + "sampleType": "order_anomaly", + "businessDate": "2018-07-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 11277.24, + "sevenDayAvgGmv": 29456.77, + "gmvDeltaRate": -0.6172, + "orderCount": 91 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-047", + "sampleType": "order_anomaly", + "businessDate": "2018-08-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 9304.0, + "sevenDayAvgGmv": 24164.26, + "gmvDeltaRate": -0.615, + "orderCount": 73 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-048", + "sampleType": "order_anomaly", + "businessDate": "2018-07-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 35228.7, + "sevenDayAvgGmv": 21836.48, + "gmvDeltaRate": 0.6133, + "orderCount": 124 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-049", + "sampleType": "order_anomaly", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 20574.68, + "sevenDayAvgGmv": 12811.29, + "gmvDeltaRate": 0.606, + "orderCount": 68 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-050", + "sampleType": "order_anomaly", + "businessDate": "2018-07-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 51392.43, + "sevenDayAvgGmv": 32077.44, + "gmvDeltaRate": 0.6021, + "orderCount": 307 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-051", + "sampleType": "order_anomaly", + "businessDate": "2017-02-19", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 4477.65, + "sevenDayAvgGmv": 11230.78, + "gmvDeltaRate": -0.6013, + "orderCount": 40 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-052", + "sampleType": "order_anomaly", + "businessDate": "2017-06-21", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7275.1, + "sevenDayAvgGmv": 18119.94, + "gmvDeltaRate": -0.5985, + "orderCount": 35 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-053", + "sampleType": "order_anomaly", + "businessDate": "2017-07-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 32450.89, + "sevenDayAvgGmv": 20371.89, + "gmvDeltaRate": 0.5929, + "orderCount": 192 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-054", + "sampleType": "order_anomaly", + "businessDate": "2017-04-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 20774.55, + "sevenDayAvgGmv": 13072.94, + "gmvDeltaRate": 0.5891, + "orderCount": 96 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-055", + "sampleType": "order_anomaly", + "businessDate": "2017-02-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 5648.37, + "sevenDayAvgGmv": 13567.41, + "gmvDeltaRate": -0.5837, + "orderCount": 49 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-056", + "sampleType": "order_anomaly", + "businessDate": "2018-08-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 11737.76, + "sevenDayAvgGmv": 26729.59, + "gmvDeltaRate": -0.5609, + "orderCount": 69 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-057", + "sampleType": "order_anomaly", + "businessDate": "2018-09-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 221.54, + "sevenDayAvgGmv": 503.96, + "gmvDeltaRate": -0.5604, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-058", + "sampleType": "order_anomaly", + "businessDate": "2017-02-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 15747.17, + "sevenDayAvgGmv": 10129.57, + "gmvDeltaRate": 0.5546, + "orderCount": 67 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-059", + "sampleType": "order_anomaly", + "businessDate": "2018-10-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 222.03, + "sevenDayAvgGmv": 143.88, + "gmvDeltaRate": 0.5431, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-060", + "sampleType": "order_anomaly", + "businessDate": "2018-10-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 80.38, + "sevenDayAvgGmv": 175.41, + "gmvDeltaRate": -0.5418, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-061", + "sampleType": "order_anomaly", + "businessDate": "2017-07-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 26556.07, + "sevenDayAvgGmv": 17310.43, + "gmvDeltaRate": 0.5341, + "orderCount": 154 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-062", + "sampleType": "order_anomaly", + "businessDate": "2017-01-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 3893.61, + "sevenDayAvgGmv": 2544.44, + "gmvDeltaRate": 0.5302, + "orderCount": 32 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-063", + "sampleType": "order_anomaly", + "businessDate": "2017-01-08", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 809.63, + "sevenDayAvgGmv": 1721.77, + "gmvDeltaRate": -0.5298, + "orderCount": 6 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-064", + "sampleType": "order_anomaly", + "businessDate": "2017-11-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 52584.62, + "sevenDayAvgGmv": 34415.14, + "gmvDeltaRate": 0.528, + "orderCount": 283 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-065", + "sampleType": "order_anomaly", + "businessDate": "2018-05-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 62568.25, + "sevenDayAvgGmv": 40953.2, + "gmvDeltaRate": 0.5278, + "orderCount": 372 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-066", + "sampleType": "order_anomaly", + "businessDate": "2017-07-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 24664.58, + "sevenDayAvgGmv": 16227.05, + "gmvDeltaRate": 0.52, + "orderCount": 145 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-067", + "sampleType": "order_anomaly", + "businessDate": "2018-01-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 8486.29, + "sevenDayAvgGmv": 17354.86, + "gmvDeltaRate": -0.511, + "orderCount": 74 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-068", + "sampleType": "order_anomaly", + "businessDate": "2017-06-19", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 25933.44, + "sevenDayAvgGmv": 17218.63, + "gmvDeltaRate": 0.5061, + "orderCount": 156 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-069", + "sampleType": "order_anomaly", + "businessDate": "2017-03-19", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7728.08, + "sevenDayAvgGmv": 15610.74, + "gmvDeltaRate": -0.505, + "orderCount": 56 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-070", + "sampleType": "order_anomaly", + "businessDate": "2018-03-15", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 51935.36, + "sevenDayAvgGmv": 34559.47, + "gmvDeltaRate": 0.5028, + "orderCount": 290 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-071", + "sampleType": "order_anomaly", + "businessDate": "2017-01-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 1447.99, + "sevenDayAvgGmv": 2902.93, + "gmvDeltaRate": -0.5012, + "orderCount": 4 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-072", + "sampleType": "order_anomaly", + "businessDate": "2017-11-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 37026.73, + "sevenDayAvgGmv": 74191.34, + "gmvDeltaRate": -0.5009, + "orderCount": 267 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-073", + "sampleType": "order_anomaly", + "businessDate": "2017-03-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 7642.02, + "sevenDayAvgGmv": 15231.81, + "gmvDeltaRate": -0.4983, + "orderCount": 64 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-074", + "sampleType": "order_anomaly", + "businessDate": "2017-03-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 22913.37, + "sevenDayAvgGmv": 15325.53, + "gmvDeltaRate": 0.4951, + "orderCount": 114 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-075", + "sampleType": "order_anomaly", + "businessDate": "2018-09-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 94.63, + "sevenDayAvgGmv": 186.58, + "gmvDeltaRate": -0.4928, + "orderCount": 1 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-076", + "sampleType": "order_anomaly", + "businessDate": "2018-05-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 23086.12, + "sevenDayAvgGmv": 44829.53, + "gmvDeltaRate": -0.485, + "orderCount": 161 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-077", + "sampleType": "order_anomaly", + "businessDate": "2017-09-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 12574.83, + "sevenDayAvgGmv": 24390.16, + "gmvDeltaRate": -0.4844, + "orderCount": 88 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-078", + "sampleType": "order_anomaly", + "businessDate": "2018-07-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 32635.24, + "sevenDayAvgGmv": 22019.23, + "gmvDeltaRate": 0.4821, + "orderCount": 168 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-079", + "sampleType": "order_anomaly", + "businessDate": "2017-05-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 10675.67, + "sevenDayAvgGmv": 20438.88, + "gmvDeltaRate": -0.4777, + "orderCount": 73 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-ORDER-080", + "sampleType": "order_anomaly", + "businessDate": "2017-09-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": 32784.96, + "sevenDayAvgGmv": 22236.88, + "gmvDeltaRate": 0.4744, + "orderCount": 206 + }, + "expectedSignals": [ + "gmv_anomaly", + "order_volume_anomaly" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail", + "report.generate_daily_review" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-001", + "sampleType": "refund_increase", + "businessDate": "2018-10-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 89.71, + "gmv": 89.71, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-002", + "sampleType": "refund_increase", + "businessDate": "2018-10-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 222.03, + "gmv": 222.03, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-003", + "sampleType": "refund_increase", + "businessDate": "2018-10-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 197.55, + "gmv": 197.55, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-004", + "sampleType": "refund_increase", + "businessDate": "2018-10-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 80.38, + "gmv": 80.38, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-005", + "sampleType": "refund_increase", + "businessDate": "2018-09-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 137.03, + "gmv": 137.03, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-006", + "sampleType": "refund_increase", + "businessDate": "2018-09-26", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 94.63, + "gmv": 94.63, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-007", + "sampleType": "refund_increase", + "businessDate": "2018-09-25", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 221.54, + "gmv": 221.54, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-008", + "sampleType": "refund_increase", + "businessDate": "2018-09-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 191.46, + "gmv": 191.46, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-009", + "sampleType": "refund_increase", + "businessDate": "2018-09-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 84.58, + "gmv": 84.58, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-010", + "sampleType": "refund_increase", + "businessDate": "2018-09-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 414.04, + "gmv": 414.04, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-011", + "sampleType": "refund_increase", + "businessDate": "2018-09-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 84.58, + "gmv": 84.58, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-012", + "sampleType": "refund_increase", + "businessDate": "2018-09-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 258.67, + "gmv": 258.67, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-013", + "sampleType": "refund_increase", + "businessDate": "2018-09-10", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 51.17, + "gmv": 51.17, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-014", + "sampleType": "refund_increase", + "businessDate": "2018-09-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2443.2, + "gmv": 2443.2, + "refundProxyRate": 1.0, + "orderCount": 3 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-015", + "sampleType": "refund_increase", + "businessDate": "2018-08-31", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 63.89, + "gmv": 63.89, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-016", + "sampleType": "refund_increase", + "businessDate": "2018-08-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 705.04, + "gmv": 705.04, + "refundProxyRate": 1.0, + "orderCount": 4 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-017", + "sampleType": "refund_increase", + "businessDate": "2016-10-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 61.99, + "gmv": 61.99, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-018", + "sampleType": "refund_increase", + "businessDate": "2016-10-02", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 109.34, + "gmv": 109.34, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-019", + "sampleType": "refund_increase", + "businessDate": "2016-09-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 40.95, + "gmv": 40.95, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-020", + "sampleType": "refund_increase", + "businessDate": "2016-09-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 75.06, + "gmv": 75.06, + "refundProxyRate": 1.0, + "orderCount": 1 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-021", + "sampleType": "refund_increase", + "businessDate": "2018-09-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 292.18, + "gmv": 458.64, + "refundProxyRate": 0.6371, + "orderCount": 4 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-022", + "sampleType": "refund_increase", + "businessDate": "2018-07-12", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 12277.87, + "gmv": 35228.7, + "refundProxyRate": 0.3485, + "orderCount": 124 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-023", + "sampleType": "refund_increase", + "businessDate": "2018-08-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 619.13, + "gmv": 2381.83, + "refundProxyRate": 0.2599, + "orderCount": 14 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-024", + "sampleType": "refund_increase", + "businessDate": "2016-10-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2137.31, + "gmv": 9398.61, + "refundProxyRate": 0.2274, + "orderCount": 51 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-025", + "sampleType": "refund_increase", + "businessDate": "2017-03-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 4268.48, + "gmv": 18923.17, + "refundProxyRate": 0.2256, + "orderCount": 99 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-026", + "sampleType": "refund_increase", + "businessDate": "2018-08-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1095.49, + "gmv": 5216.72, + "refundProxyRate": 0.21, + "orderCount": 44 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-027", + "sampleType": "refund_increase", + "businessDate": "2017-04-14", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2189.48, + "gmv": 10515.9, + "refundProxyRate": 0.2082, + "orderCount": 54 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-028", + "sampleType": "refund_increase", + "businessDate": "2016-10-09", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 857.47, + "gmv": 4152.11, + "refundProxyRate": 0.2065, + "orderCount": 26 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-029", + "sampleType": "refund_increase", + "businessDate": "2017-03-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2532.04, + "gmv": 13515.12, + "refundProxyRate": 0.1873, + "orderCount": 105 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-030", + "sampleType": "refund_increase", + "businessDate": "2016-10-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1900.28, + "gmv": 10212.22, + "refundProxyRate": 0.1861, + "orderCount": 47 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-031", + "sampleType": "refund_increase", + "businessDate": "2017-03-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 4205.53, + "gmv": 22913.37, + "refundProxyRate": 0.1835, + "orderCount": 114 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-032", + "sampleType": "refund_increase", + "businessDate": "2017-03-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2761.38, + "gmv": 15533.69, + "refundProxyRate": 0.1778, + "orderCount": 80 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-033", + "sampleType": "refund_increase", + "businessDate": "2017-06-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2728.59, + "gmv": 19348.54, + "refundProxyRate": 0.141, + "orderCount": 115 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-034", + "sampleType": "refund_increase", + "businessDate": "2017-04-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1488.14, + "gmv": 10765.57, + "refundProxyRate": 0.1382, + "orderCount": 65 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-035", + "sampleType": "refund_increase", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1766.68, + "gmv": 13386.91, + "refundProxyRate": 0.132, + "orderCount": 79 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-036", + "sampleType": "refund_increase", + "businessDate": "2017-03-21", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1770.87, + "gmv": 14937.51, + "refundProxyRate": 0.1186, + "orderCount": 97 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-037", + "sampleType": "refund_increase", + "businessDate": "2017-08-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 3327.9, + "gmv": 28398.61, + "refundProxyRate": 0.1172, + "orderCount": 174 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-038", + "sampleType": "refund_increase", + "businessDate": "2017-04-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1949.52, + "gmv": 17711.57, + "refundProxyRate": 0.1101, + "orderCount": 115 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-039", + "sampleType": "refund_increase", + "businessDate": "2017-06-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2149.55, + "gmv": 19733.69, + "refundProxyRate": 0.1089, + "orderCount": 90 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-040", + "sampleType": "refund_increase", + "businessDate": "2017-09-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 2232.1, + "gmv": 21328.86, + "refundProxyRate": 0.1047, + "orderCount": 99 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-041", + "sampleType": "refund_increase", + "businessDate": "2017-08-13", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1523.15, + "gmv": 15928.58, + "refundProxyRate": 0.0956, + "orderCount": 96 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-042", + "sampleType": "refund_increase", + "businessDate": "2017-06-30", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1486.29, + "gmv": 16236.74, + "refundProxyRate": 0.0915, + "orderCount": 95 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-043", + "sampleType": "refund_increase", + "businessDate": "2017-02-18", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 851.71, + "gmv": 9308.3, + "refundProxyRate": 0.0915, + "orderCount": 54 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-044", + "sampleType": "refund_increase", + "businessDate": "2017-10-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1966.16, + "gmv": 21890.58, + "refundProxyRate": 0.0898, + "orderCount": 130 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-045", + "sampleType": "refund_increase", + "businessDate": "2017-03-27", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1816.7, + "gmv": 20549.29, + "refundProxyRate": 0.0884, + "orderCount": 111 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-046", + "sampleType": "refund_increase", + "businessDate": "2017-12-29", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1786.99, + "gmv": 20552.64, + "refundProxyRate": 0.0869, + "orderCount": 135 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-047", + "sampleType": "refund_increase", + "businessDate": "2017-02-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 816.41, + "gmv": 9393.37, + "refundProxyRate": 0.0869, + "orderCount": 63 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-048", + "sampleType": "refund_increase", + "businessDate": "2017-02-16", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 665.31, + "gmv": 7803.72, + "refundProxyRate": 0.0853, + "orderCount": 55 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-049", + "sampleType": "refund_increase", + "businessDate": "2017-02-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 878.33, + "gmv": 10310.99, + "refundProxyRate": 0.0852, + "orderCount": 73 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-050", + "sampleType": "refund_increase", + "businessDate": "2016-10-04", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1013.7, + "gmv": 11914.65, + "refundProxyRate": 0.0851, + "orderCount": 63 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-051", + "sampleType": "refund_increase", + "businessDate": "2018-08-17", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 3288.73, + "gmv": 40872.77, + "refundProxyRate": 0.0805, + "orderCount": 257 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-052", + "sampleType": "refund_increase", + "businessDate": "2017-11-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1749.14, + "gmv": 21752.57, + "refundProxyRate": 0.0804, + "orderCount": 144 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-053", + "sampleType": "refund_increase", + "businessDate": "2017-10-28", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1650.16, + "gmv": 20572.64, + "refundProxyRate": 0.0802, + "orderCount": 88 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-054", + "sampleType": "refund_increase", + "businessDate": "2016-10-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 645.6, + "gmv": 8255.19, + "refundProxyRate": 0.0782, + "orderCount": 46 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-055", + "sampleType": "refund_increase", + "businessDate": "2018-08-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 4732.62, + "gmv": 62057.77, + "refundProxyRate": 0.0763, + "orderCount": 370 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-056", + "sampleType": "refund_increase", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1520.77, + "gmv": 20574.68, + "refundProxyRate": 0.0739, + "orderCount": 68 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-057", + "sampleType": "refund_increase", + "businessDate": "2017-02-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 415.22, + "gmv": 5648.37, + "refundProxyRate": 0.0735, + "orderCount": 49 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-058", + "sampleType": "refund_increase", + "businessDate": "2017-07-09", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 785.41, + "gmv": 10701.14, + "refundProxyRate": 0.0734, + "orderCount": 94 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-059", + "sampleType": "refund_increase", + "businessDate": "2017-07-24", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1605.28, + "gmv": 22950.01, + "refundProxyRate": 0.0699, + "orderCount": 162 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-060", + "sampleType": "refund_increase", + "businessDate": "2017-03-05", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 581.23, + "gmv": 8789.14, + "refundProxyRate": 0.0661, + "orderCount": 74 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-061", + "sampleType": "refund_increase", + "businessDate": "2017-12-23", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1068.58, + "gmv": 16425.64, + "refundProxyRate": 0.0651, + "orderCount": 109 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-062", + "sampleType": "refund_increase", + "businessDate": "2017-02-14", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 960.39, + "gmv": 15309.08, + "refundProxyRate": 0.0627, + "orderCount": 76 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-063", + "sampleType": "refund_increase", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1620.77, + "gmv": 26863.58, + "refundProxyRate": 0.0603, + "orderCount": 96 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-064", + "sampleType": "refund_increase", + "businessDate": "2017-05-31", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1449.81, + "gmv": 24063.38, + "refundProxyRate": 0.0602, + "orderCount": 129 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-065", + "sampleType": "refund_increase", + "businessDate": "2016-10-03", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 35.61, + "gmv": 595.14, + "refundProxyRate": 0.0598, + "orderCount": 8 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-066", + "sampleType": "refund_increase", + "businessDate": "2018-07-22", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1950.2, + "gmv": 32962.26, + "refundProxyRate": 0.0592, + "orderCount": 215 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-067", + "sampleType": "refund_increase", + "businessDate": "2017-07-20", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1329.93, + "gmv": 22517.84, + "refundProxyRate": 0.0591, + "orderCount": 142 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-068", + "sampleType": "refund_increase", + "businessDate": "2017-01-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 180.81, + "gmv": 3062.33, + "refundProxyRate": 0.059, + "orderCount": 12 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-069", + "sampleType": "refund_increase", + "businessDate": "2017-07-11", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 1373.58, + "gmv": 24964.63, + "refundProxyRate": 0.055, + "orderCount": 165 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-REFUND-070", + "sampleType": "refund_increase", + "businessDate": "2017-07-07", + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": 912.61, + "gmv": 16676.75, + "refundProxyRate": 0.0547, + "orderCount": 121 + }, + "expectedSignals": [ + "refund_proxy_increase", + "after_sales_risk" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-001", + "sampleType": "low_score_comment", + "businessDate": "2016-10-06", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6916ca4502d6d3bfd39818759d55d536", + "orderId": "bfbd0f9bdef84302105ad712db648a6c", + "productId": "5a6b04657a4c5ee34285d1e4619a96b4", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-002", + "sampleType": "low_score_comment", + "businessDate": "2016-10-20", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "b28309e8253951a954123e039d3242f7", + "orderId": "8beb59392e21af5eb9547ae1a9938d06", + "productId": "c66def7098f4d87751f40c3a4855ced1", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-003", + "sampleType": "low_score_comment", + "businessDate": "2016-10-20", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "3ec60dec755e23c788b026be90faa337", + "orderId": "fb5114c39f632a52598cf770c6076620", + "productId": "269e87010f6d5e57015a90b00983e334", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-004", + "sampleType": "low_score_comment", + "businessDate": "2016-10-21", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "68527c158a36d2fd93c284664ccc6dcc", + "orderId": "8c72f52f7655510c1ec81f3b9019c638", + "productId": "4a90b44b456e79e7a33435fdd36e551f", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-005", + "sampleType": "low_score_comment", + "businessDate": "2016-10-21", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6f97d8b5afaf78f8658cfc0634840b40", + "orderId": "cbbb524a0e1646aa6cf7a3c0bbe517ad", + "productId": "bab7ff9abbcc13690a62d015f2ca8e44", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-006", + "sampleType": "low_score_comment", + "businessDate": "2016-10-22", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "efef5a00aac989951350619e06681dcb", + "orderId": "ac2b7c522d811acba0aa270ed3e112e4", + "productId": "4632bc49b300378ed4f1d48f424d414e", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-007", + "sampleType": "low_score_comment", + "businessDate": "2016-10-22", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "b8ee78b3ced2f119b89b611a0efdba7b", + "orderId": "f688669f48063536e082bb32d634cd46", + "productId": "c66def7098f4d87751f40c3a4855ced1", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-008", + "sampleType": "low_score_comment", + "businessDate": "2016-10-22", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "cef1ee03ded4d6272894a2eead6e1328", + "orderId": "2e7a8482f6fb09756ca50c10d7bfc047", + "productId": "c1488892604e4ba5cff5b4eb4d595400", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-009", + "sampleType": "low_score_comment", + "businessDate": "2016-10-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "5d369f0070f24cb17ec69c8ae95b85c3", + "orderId": "b88cd65e1d90bf6e185bf9b6f0b614cd", + "productId": "57e5c7033739b88d673eba67e9cf9376", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-010", + "sampleType": "low_score_comment", + "businessDate": "2016-10-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0aa8b628ffe8130e26b668f9f3a2f6ef", + "orderId": "f7310018040436b01ab03f81b301b5de", + "productId": "ecf23a6c1689e2bed38171ececac6138", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-011", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "24c08f393f2d716d30adbd58e9a6939c", + "orderId": "59e7ca596664da0a459a145eb95cc9c5", + "productId": "bf128b5dced56e2ec0391179eb70443d", + "category": "baby", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-012", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "1edb1e0331873cc2085a59daa354a510", + "orderId": "79ffdd52a918bbe867895a4b183d6457", + "productId": "5691a536d459e5cb326b7bedce928067", + "category": "air_conditioning", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-013", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "b13013b811c2325934e8e049683bdcf2", + "orderId": "51725d3e4bdfc97e28b40543310da8a3", + "productId": "79938780eb7ffb7289f59a9a283bc06b", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-014", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "34d62feeefaf60ef6ff7204af19fe109", + "orderId": "71303d7e93b399f5bcd537d124c0bcfa", + "productId": "d2998d7ced12f83f9b832f33cf6507b6", + "category": "baby", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-015", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "91f30fe56a84d369d913e7bf6d1d85a5", + "orderId": "e9555dc20eba7e4e62210df1f438ea00", + "productId": "21fb5057dd6a737df6851a7ab7a130da", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-016", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "61fcfc9aad23649e8a5b653d539a2d19", + "orderId": "45ec58d30f2023e4dac16d956a657ddd", + "productId": "afad7a4420a4348d41da23ed8d0902dd", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-017", + "sampleType": "low_score_comment", + "businessDate": "2016-10-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d565a7363d2e9836a02775db90e54f3d", + "orderId": "5cd498954e2b37d71b315166809b4bd7", + "productId": "896a64a7f34cdfef2c60ce59fa2a148f", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-018", + "sampleType": "low_score_comment", + "businessDate": "2016-10-28", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0ed5802ea93f04e9bf2364c664dadbbd", + "orderId": "96123b9ae5a9cdfd4efe5fe402a94675", + "productId": "8a8ffceebd3e62e6b982760275d38128", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-019", + "sampleType": "low_score_comment", + "businessDate": "2016-10-28", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9d4df583085fec1900dfac4efd0b085a", + "orderId": "2e32dea8a4d1ae5499a67674b387bc6a", + "productId": "f9bb291280bceedf7840b89e1e75b89c", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-020", + "sampleType": "low_score_comment", + "businessDate": "2016-10-29", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "604097d05c7b80206fc808f6781ebfc4", + "orderId": "f883e09a1fb01318052c6ab839efb34a", + "productId": "d984b9203bd56960bbdda0bb7f05f781", + "category": "fashion_bags_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-021", + "sampleType": "low_score_comment", + "businessDate": "2016-10-29", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a93139d9d1314158c080e3db7e79618b", + "orderId": "e5fa5a7210941f7d56d0208e4e071d35", + "productId": "f3c2d01a84c947b078e32bbef0718962", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-022", + "sampleType": "low_score_comment", + "businessDate": "2016-10-30", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "35166e4e735bdbc0d586522eaadbf563", + "orderId": "cb29497c3782a76b57327c055d58b0e0", + "productId": "8adc1d29aa4fd4d758a91ef997c8a0a2", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-023", + "sampleType": "low_score_comment", + "businessDate": "2016-10-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "00e927398b7a872a23c8990b38b7026a", + "orderId": "021d08e4057e5b6414c8d2f69f4f72a0", + "productId": "a819714dd23a6ac18b1be2b13686017b", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-024", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d6bf917f19cd51622bf95a1e686a779e", + "orderId": "7a7d2c889e27d93b2005462a8788e168", + "productId": "f6fe388c9bfc145a2790437f1e4888d9", + "category": "fashion_male_clothing", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-025", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c1644211f1fe90951c81499cbd08f7b3", + "orderId": "ae0913baa54f18027667d8049c36fde2", + "productId": "0f3c8906e5b08127d539956bc587074c", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-026", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c5075a206ee6306f4d08cf95670de225", + "orderId": "34c718970b33419ed6d537a90366231b", + "productId": "7ed8c74b7ad2f1790a24a24c071da537", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-027", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "444d04d7ca0131b3b40619f81d0facd5", + "orderId": "d207cc272675637bfed0062edffd0818", + "productId": "107177bf61755f05c604fe57e02467d6", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-028", + "sampleType": "low_score_comment", + "businessDate": "2016-11-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "46e746815b9560ce0b1df90666dca37e", + "orderId": "62246c16a32a0866943f17d7b42db940", + "productId": "2c818013dbc95f5cd2d6a393a31813e0", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-029", + "sampleType": "low_score_comment", + "businessDate": "2016-11-02", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a36150969fe6bd09ed011dd78aeb0189", + "orderId": "ef1b29b591d31d57c0d7337460dd83c9", + "productId": "bfce5e847034e1fbbc1ed0bff6a372c7", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-030", + "sampleType": "low_score_comment", + "businessDate": "2016-11-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "af980ca9bafbc96e2fbb0576a76310a7", + "orderId": "7cb5aaf8b7b7b439174c2e4efdf4c7a3", + "productId": "8bff0b13faf092077c3bba691c07ff16", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-031", + "sampleType": "low_score_comment", + "businessDate": "2016-11-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c5a815f89971cd69e828bc8c2d992524", + "orderId": "8d47519f5c9c42540b37bd3db0492878", + "productId": "3d37da85f5e66558333fb5daee494736", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-032", + "sampleType": "low_score_comment", + "businessDate": "2016-11-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7c550b9bf9cd966aaf4d713682fe63da", + "orderId": "9315757eaf0e782619bed131508dbddb", + "productId": "e41a6ac2f57a273eb0d214c7cbab5db9", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-033", + "sampleType": "low_score_comment", + "businessDate": "2016-11-09", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "f9fe37d91c506b29a0b4d9107f667bde", + "orderId": "65d1e226dfaeb8cdc42f665422522d14", + "productId": "9c7bdf67b06b419aefb93cfdfc96c55d", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-034", + "sampleType": "low_score_comment", + "businessDate": "2016-11-10", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7d02f4eb2feb119b854edcbabe18a44f", + "orderId": "2c45c33d2f9cb8ff8b1c86cc28c11c30", + "productId": "e24f73b7631ee3fbb2ab700a9acaa258", + "category": "fashion_bags_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-035", + "sampleType": "low_score_comment", + "businessDate": "2016-11-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a450b65b40eef4bd63aed18e935770b6", + "orderId": "7e2dddf174cc4d2768bf39c43ab2bd7a", + "productId": "e41a6ac2f57a273eb0d214c7cbab5db9", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-036", + "sampleType": "low_score_comment", + "businessDate": "2016-11-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "a9815ff889a8e9c67023e892f642edf5", + "orderId": "b7026ba7432929d99880463305b8ce98", + "productId": "f3dd572f31692bb5b6ab21d2af0673b1", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-037", + "sampleType": "low_score_comment", + "businessDate": "2016-11-15", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "2c9eac63112b72ae2dd2102b056bf942", + "orderId": "e2eaf909eb6ba881117aa407992a5ffb", + "productId": "b73f6899a58fe7a37e55149e9a11c717", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-038", + "sampleType": "low_score_comment", + "businessDate": "2016-11-18", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "77bfe4bdc0cd1d42f8354ae9231897e3", + "orderId": "98974b076b01553d49ee6467905675a7", + "productId": "ecf23a6c1689e2bed38171ececac6138", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-039", + "sampleType": "low_score_comment", + "businessDate": "2016-11-18", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "517623f52b801129ac4b4c560d70635b", + "orderId": "262118ce178bb3e4590a3adcf6d62e6b", + "productId": "6aeed495dcb87dd06532f70dea6ebb5a", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-040", + "sampleType": "low_score_comment", + "businessDate": "2016-11-18", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "815e1b04599377590d462178d524b69a", + "orderId": "b2f92b2f7047cd8b35580d629d7b3bfb", + "productId": "8f1e43e0e3374ed8c84df748034d6179", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-041", + "sampleType": "low_score_comment", + "businessDate": "2016-11-19", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "db848ccc3e7f893c8eb4a04a861a0ac4", + "orderId": "ed8c7b1b3eb256c70ce0c74231e1da88", + "productId": "29bedbfbe73ea473396306b4f0c010ec", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-042", + "sampleType": "low_score_comment", + "businessDate": "2016-11-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "845e2bc6ae8e8a91c1c84cf2aaee9880", + "orderId": "711b9be9c346d9ecdb9d38a5e1e7e39b", + "productId": "d6f3bd7b1fc04fb1a2effb51ae44ab17", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-043", + "sampleType": "low_score_comment", + "businessDate": "2016-11-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "153ef790db4a65fb8acb9f66e7f32299", + "orderId": "6b3ee7697a02619a0ace2b3f0aa46bde", + "productId": "4c7d4a2efde21e3bf1660926fabc6a9d", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-044", + "sampleType": "low_score_comment", + "businessDate": "2016-11-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "deab3ad3f78fd4ef275d9788978b92c9", + "orderId": "4dd47e84e6b8ff4a63d0b8425e6d788e", + "productId": "2aa489c905e1d41d8c716a6d6912d8c2", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-045", + "sampleType": "low_score_comment", + "businessDate": "2016-11-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "911489d0bc7092faa2e845b5300acde7", + "orderId": "5cc475c7c03290048eb2e742cd64cb5e", + "productId": "3410cbd7df2130ec3cb9300ef0fe3df1", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-046", + "sampleType": "low_score_comment", + "businessDate": "2016-11-30", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0b637962a16eb130be75783b53f7fa6d", + "orderId": "60856ac7677a70cd87ad25d9b34d051b", + "productId": "a18c130946b89ab774bc5948fe71e2a5", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-047", + "sampleType": "low_score_comment", + "businessDate": "2016-11-30", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "921049da2de940d19c9948ea7eee6155", + "orderId": "edb2a55c055efbb898171ec9fd840ab9", + "productId": "e7ffaa35a5caaca3366f5cc5705b5fb2", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-048", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "2d84d56571c0faa1650252595226d07a", + "orderId": "a6475bb7a50387e3c665534e15bd40ac", + "productId": "39731b928af43b0f49dd60d4706e403f", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-049", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "033baa4238fcac803931108093d2456a", + "orderId": "2fd1c83dd4714cf3cf796fffb6c8de62", + "productId": "17c7ec33a1657924ad493e6978b4bf91", + "category": "baby", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-050", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "26cd23041b56b17585d0e6c720443693", + "orderId": "dc18a044b56ed174037ca164cdf2e921", + "productId": "faa268ecc8a8434cb4ebee091b3222d6", + "category": "electronics", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-051", + "sampleType": "low_score_comment", + "businessDate": "2016-12-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9399c464901dcf9d6a40e6dde8ebdf59", + "orderId": "770d331c84e5b214bd9dc70a10b829d0", + "productId": "eba7488e1c67729f045ab43fac426f2e", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-052", + "sampleType": "low_score_comment", + "businessDate": "2016-12-02", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "3b850443ee703ff8381534dc0349847d", + "orderId": "ed83f6065ae47112c8cfbd22e231b6d8", + "productId": "bcb4f6803e8889a70dc5ed14c2f5f785", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-053", + "sampleType": "low_score_comment", + "businessDate": "2016-12-02", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6a6d47eaea5802fde29dad23aca026b0", + "orderId": "3c3ca08854ca922fe8e9cedfd6841c8a", + "productId": "ac6c24af9f913c9375a3ea77883bda6e", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-054", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9190e6754710d977b6bc3185688e3ffe", + "orderId": "7d7bf3ee337c36ce012762da5f28f53a", + "productId": "4d7ccacbf7d2dd3e566cf5f149fb92e8", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-055", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d7486b4da781b9d7dc5484ce65868081", + "orderId": "45973912e490866800c0aea8f63099c8", + "productId": "46d66b9ad911a2cea5e3c9127aa7fac5", + "category": "air_conditioning", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-056", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "41ed8254635784cbc62d612c5ededecc", + "orderId": "35b8e54d765e6b217e2dc5ab34f6b323", + "productId": "b4763c2caeeac2424b64aa199789b81b", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-057", + "sampleType": "low_score_comment", + "businessDate": "2016-12-03", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "135e5d955a1420b964a8b9a5e6ddd881", + "orderId": "063b573b88fc80e516aba87df524f809", + "productId": "3d37da85f5e66558333fb5daee494736", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-058", + "sampleType": "low_score_comment", + "businessDate": "2016-12-04", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "ca7077026f9092b0d08e03bd95d33f94", + "orderId": "42c5091238dc63339c79f5f35f8a5a6b", + "productId": "4b88b15eb9d5ad74ffa095bcd4ddb64f", + "category": "market_place", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-059", + "sampleType": "low_score_comment", + "businessDate": "2016-12-04", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7b6cf1c09041a79e596a1f1793790c13", + "orderId": "f69ae31bce06a78d626762b53067c7e0", + "productId": "3cdff94d5455b793b415be775cace03c", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-060", + "sampleType": "low_score_comment", + "businessDate": "2016-12-07", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "e75346401b7cced62b4aa709ba3d0edb", + "orderId": "5cb8558cbb7c0c2f00f43468579d3e3c", + "productId": "ad5396bf96af6ede77130e54ad266c61", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-061", + "sampleType": "low_score_comment", + "businessDate": "2016-12-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "3918306fc04f31c393a12070f6e66966", + "orderId": "6e5fe7366a2e1bfbf3257dba0af1267f", + "productId": "65bb78cf0bbc3ca6406f30e6793736f9", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-062", + "sampleType": "low_score_comment", + "businessDate": "2016-12-08", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0a55a99c93ca3fa4119c5fed56081806", + "orderId": "dd845e1cdb19f08d029a727adc9a5a77", + "productId": "6d2928252aa5ba6a5fc439571dd0d748", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-063", + "sampleType": "low_score_comment", + "businessDate": "2016-12-09", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6d06808638ec0701bccd70bc8d462c28", + "orderId": "97d2f8fe76f2f253b8291e17b5383884", + "productId": "a8255c87078b4bd9bc05fe7290ca5c25", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-064", + "sampleType": "low_score_comment", + "businessDate": "2016-12-09", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "8757f5e0a1f891b890039b0d95c321c8", + "orderId": "4551b488487e6cfa31f9e35073d3c5d4", + "productId": "1e571e871a93944c5c48e6226f2cd94e", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-065", + "sampleType": "low_score_comment", + "businessDate": "2016-12-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "160850927a5f16f903dc83a05e0a5826", + "orderId": "d3c8851a6651eeff2f73b0e011ac45d0", + "productId": "ca17b18b38db6e0d2c33d362322f2a06", + "category": "books_technical", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-066", + "sampleType": "low_score_comment", + "businessDate": "2016-12-11", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "e146e108db2520d865889322dba96355", + "orderId": "eb45ce36240dbf895bef98be0d1a85d3", + "productId": "54c31c4585d30843421c7ea07d80f84e", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-067", + "sampleType": "low_score_comment", + "businessDate": "2016-12-14", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7e0c87e8ff306146ef6dc005938cd146", + "orderId": "552e0a8dae101e32155120202f427b71", + "productId": "e4fe462cce9f36e312b869418a86bc3a", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-068", + "sampleType": "low_score_comment", + "businessDate": "2016-12-14", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d10c67a24f4506d9aed50cb4cf9d7953", + "orderId": "c4e980a1d822db426982878b3cfdda6e", + "productId": "04df667e73ca2fab4b9a97c86466b699", + "category": "watches_gifts", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-069", + "sampleType": "low_score_comment", + "businessDate": "2016-12-14", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "50c851bd79dc0b19f3d9c523ca747df8", + "orderId": "54bb06e1ca86bd99ee2a8d6288bf4ede", + "productId": "bef13288a0f8b26d763411ced1dfa268", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-070", + "sampleType": "low_score_comment", + "businessDate": "2016-12-16", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6a91e35dd43fa13587108e698937cef8", + "orderId": "bfd31c6f76ff82a41e7beb05565aec4d", + "productId": "b4b1c13bd539cdda68bd9a5e899767fb", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-071", + "sampleType": "low_score_comment", + "businessDate": "2016-12-16", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "0e78e53b34bbdb054bc13e8c1a4bfc77", + "orderId": "dbbbc904081f8e928028432e2e3d7686", + "productId": "f38ce47371f868581f8c2df4ffa47fb6", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-072", + "sampleType": "low_score_comment", + "businessDate": "2016-12-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "38b7052e458c9d2f5f4e620a52df56ae", + "orderId": "799dc0fd216e2a8e571a2684ddb6f940", + "productId": "4a92216ec92c54fca6f132ae1988390d", + "category": "toys", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-073", + "sampleType": "low_score_comment", + "businessDate": "2017-01-04", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "f7c4ece51a1f0f3ebf9a67db7df64036", + "orderId": "56eb381fff8db8d35134693062514084", + "productId": "7f524cd9e1d47c5aa4b15b54d6d146cb", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-074", + "sampleType": "low_score_comment", + "businessDate": "2017-01-17", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "537af341b003976eae54d043d0fa121d", + "orderId": "811eadaef225935d84d4d3fdcca7ee85", + "productId": "4a90b44b456e79e7a33435fdd36e551f", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-075", + "sampleType": "low_score_comment", + "businessDate": "2017-01-19", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "7d41f8269eb532a7f86290e33669b667", + "orderId": "b174fa32929e4af3622213e835cfa84a", + "productId": "6d811b6e8cada9a8f7f38bb315620e1b", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-076", + "sampleType": "low_score_comment", + "businessDate": "2017-01-21", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "43c846975cad387b7c0a36aad510f825", + "orderId": "ad818323f40e1a353eb3a3874d138c51", + "productId": "20090bcd0d43eb49feb63d53d387780b", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-077", + "sampleType": "low_score_comment", + "businessDate": "2017-01-25", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "6faba0c70369c63f6e99f49c836fe2c9", + "orderId": "b5c037cf61074d84c0a994fa0d024064", + "productId": "be7815756efd025355c3e09139c3f2ac", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-078", + "sampleType": "low_score_comment", + "businessDate": "2017-01-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "005a68c1e45d2ef683bbdc7354c9d3d8", + "orderId": "db0b12b763f716df3f27218724161479", + "productId": "d41d8cd98f00b204e9800998ecf8427e", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-079", + "sampleType": "low_score_comment", + "businessDate": "2017-01-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "ad6cf8eaea460341666797f3fea1773f", + "orderId": "f7b9821d83a86f942cd40560f3c06622", + "productId": "4a90b44b456e79e7a33435fdd36e551f", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-080", + "sampleType": "low_score_comment", + "businessDate": "2017-01-26", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "ca9f56b7298eb6b17e4ba2150a88df4d", + "orderId": "d809ddde66fee6223df16b11231491f9", + "productId": "d12a5178024ccefb3582170a9ab45a0d", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-081", + "sampleType": "low_score_comment", + "businessDate": "2017-01-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "755509047344db65b4c12fe56626765d", + "orderId": "08d7ec7381dc51d41a0e4d86314b7a98", + "productId": "7fd93eccaf2d461cb6bc4bbd1aa91f1a", + "category": "watches_gifts", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-082", + "sampleType": "low_score_comment", + "businessDate": "2017-01-27", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "05a82ef7eec443d16dd35560ec541067", + "orderId": "ed5c53daefe487fab95ccd2afaf61bb0", + "productId": "77794668e2278bf0045019b0d8a308b2", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-083", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "71fbc1feab3216ba3f837a9dbc36d3db", + "orderId": "616b813dbea8acc9de0ca0380cd89b83", + "productId": "dbd024d4182504993ad1e3cd2ee9d9e9", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-084", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "8ca59ec52d44279f47d41121bfe3de98", + "orderId": "5497655681652e7e1306139bb5d04a14", + "productId": "f32af0a8b0bcb05b60f05e8907ad8866", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": false + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-085", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "53e616f83058b7f7ee042c1f3c2ec051", + "orderId": "51ceba3ba51d4b4543e7f78e181e0ba9", + "productId": "7c68e7297c7df2535c9f0dcd61007f64", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-086", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "8b5afd726cc86efde6b416387b9d3ef4", + "orderId": "0571cdb407bf04b419c94ffd7acbd874", + "productId": "91b08d34d0ba4db44da2dc382867ba49", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-087", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "d058dca0fce39b0bf287bd8729f7c08c", + "orderId": "e09dd765041e9934d762d51ccb26adee", + "productId": "7c68e7297c7df2535c9f0dcd61007f64", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-088", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "25eddf8dc03be2e15aec8ac8a32f1923", + "orderId": "df537c849af44beef86a7ef7de12126a", + "productId": "dbd024d4182504993ad1e3cd2ee9d9e9", + "category": "auto", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-089", + "sampleType": "low_score_comment", + "businessDate": "2017-01-31", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "c68ab10732712c84ea727750535b2596", + "orderId": "7b4fb0197b18a0fd0e75f9e44b3fc757", + "productId": "b150110bc5afad8ff2cce5cd50c8e2a2", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-COMMENT-090", + "sampleType": "low_score_comment", + "businessDate": "2017-02-01", + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": "9e628acdf082a5eeea001b1ded5d94a1", + "orderId": "54d744a4410b1edccc36c6d1f1c7e097", + "productId": "baeb8e1a680cf9e1f13557d74b6cec3d", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "hasCommentText": true + }, + "expectedSignals": [ + "low_score_review", + "customer_experience_risk" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-001", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "99a4788cb24856965c36a24e339b6058", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 64, + "avgReviewScore": 3.95, + "salesQuantity": 488, + "revenue": 43025.56 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-002", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "aca2eb7d00ea1a7b8ebd4e68314663af", + "category": "furniture_decor", + "metrics": { + "lowScoreReviewCount": 52, + "avgReviewScore": 4.1, + "salesQuantity": 527, + "revenue": 37608.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-003", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "422879e10f46682990de24d770e7f83d", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 48, + "avgReviewScore": 4.14, + "salesQuantity": 484, + "revenue": 26577.22 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-004", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "53759a2ecddad2bb87a079a1f1519f73", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 48, + "avgReviewScore": 4.02, + "salesQuantity": 373, + "revenue": 20387.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-005", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "389d119b48cf3043d311335e499d9c6b", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 39, + "avgReviewScore": 4.18, + "salesQuantity": 392, + "revenue": 21440.59 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-006", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7c1bd920dbdf22470b68bde975dd3ccf", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 44, + "avgReviewScore": 3.88, + "salesQuantity": 231, + "revenue": 13866.69 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-007", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2b4609f8948be18874494203496bc318", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 40, + "avgReviewScore": 4.07, + "salesQuantity": 260, + "revenue": 22717.22 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-008", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "53b36df67ebb7c41585e8d54d6772e08", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 36, + "avgReviewScore": 4.25, + "salesQuantity": 323, + "revenue": 37683.42 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-009", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "d1c427060a0f73f6b889a5c7c61f2ac4", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 34, + "avgReviewScore": 4.24, + "salesQuantity": 343, + "revenue": 47214.51 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-010", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e0d64dcfaa3b6db5c54ca298ae101d05", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 40, + "avgReviewScore": 3.8, + "salesQuantity": 194, + "revenue": 31786.82 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-011", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "368c6c730842d78016ad823897a372db", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 30, + "avgReviewScore": 4.22, + "salesQuantity": 388, + "revenue": 21056.8 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-012", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "154e7e31ebfa092203795c972e5804a6", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 27, + "avgReviewScore": 4.31, + "salesQuantity": 281, + "revenue": 6325.19 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-013", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e53e557d5a159f5aa2c5e995dfdf244b", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 37, + "avgReviewScore": 3.64, + "salesQuantity": 183, + "revenue": 15439.25 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-014", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "3dd2a17168ec895c781a9191c1e95ad7", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 4.3, + "salesQuantity": 274, + "revenue": 41082.6 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-015", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "5a848e4ab52fd5445cdc07aab1c40e48", + "category": "unknown", + "metrics": { + "lowScoreReviewCount": 27, + "avgReviewScore": 4.13, + "salesQuantity": 197, + "revenue": 24229.03 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-016", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "89b121bee266dcd25688a1ba72eefb61", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 38, + "avgReviewScore": 2.28, + "salesQuantity": 68, + "revenue": 5433.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-017", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "b5e13c9a353102f79c6206ff5cb61a50", + "category": "toys", + "metrics": { + "lowScoreReviewCount": 35, + "avgReviewScore": 2.95, + "salesQuantity": 91, + "revenue": 7810.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-018", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "3fbc0ef745950c7932d5f2a446189725", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 28, + "avgReviewScore": 3.89, + "salesQuantity": 150, + "revenue": 9862.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-019", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "0a57f7d2c983bcf8188589a5fea4a8da", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 30, + "avgReviewScore": 3.59, + "salesQuantity": 104, + "revenue": 11907.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-020", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "a92930c327948861c015c919a0bcb4a8", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 24, + "avgReviewScore": 3.85, + "salesQuantity": 160, + "revenue": 12475.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-021", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "d285360f29ac7fd97640bf0baef03de0", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 27, + "avgReviewScore": 3.73, + "salesQuantity": 123, + "revenue": 31623.81 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-022", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "461f43be3bdf8844e65b62d9ac2c7a5a", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 24, + "avgReviewScore": 4.01, + "salesQuantity": 146, + "revenue": 20593.22 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-023", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "84f456958365164420cfc80fbe4c7fab", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 28, + "avgReviewScore": 3.33, + "salesQuantity": 111, + "revenue": 10304.96 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-024", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "bb50f2e236e5eea0100680137654686c", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 4.21, + "salesQuantity": 195, + "revenue": 63885.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-025", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "42a2c92a0979a949ca4ea89ec5c7b934", + "category": "housewares", + "metrics": { + "lowScoreReviewCount": 22, + "avgReviewScore": 4.06, + "salesQuantity": 183, + "revenue": 10870.1 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-026", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "35afc973633aaeb6b877ff57b2793310", + "category": "home_confort", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 3.89, + "salesQuantity": 165, + "revenue": 14484.89 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-027", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "a62e25e09e05e6faf31d90c6ec1aa3d1", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 20, + "avgReviewScore": 4.16, + "salesQuantity": 226, + "revenue": 24051.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-028", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "19c91ef95d509ea33eda93495c4d3481", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 21, + "avgReviewScore": 4.12, + "salesQuantity": 156, + "revenue": 18889.44 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-029", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "4c2394abfbac7ff59ec7a420918562fa", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 24, + "avgReviewScore": 3.78, + "salesQuantity": 123, + "revenue": 10453.77 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-030", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "b1d207586fca400a2370d50a9ba1da98", + "category": "unknown", + "metrics": { + "lowScoreReviewCount": 31, + "avgReviewScore": 2.02, + "salesQuantity": 48, + "revenue": 7152.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-031", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7a10781637204d8d10485c71a6108a2e", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 21, + "avgReviewScore": 4.07, + "salesQuantity": 143, + "revenue": 30467.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-032", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "656e0eca68dcecf6a31b8ececfabe3e8", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 3.93, + "salesQuantity": 141, + "revenue": 12477.6 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-033", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "36f60d45225e60c7da4558b070ce4b60", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 3.67, + "salesQuantity": 127, + "revenue": 11240.96 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-034", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "4fe644d766c7566dbc46fb851363cb3b", + "category": "art", + "metrics": { + "lowScoreReviewCount": 22, + "avgReviewScore": 3.75, + "salesQuantity": 107, + "revenue": 10803.72 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-035", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "d017a2151d543a9885604dc62a3d9dcc", + "category": "fashion_bags_accessories", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 4.11, + "salesQuantity": 140, + "revenue": 6860.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-036", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "6cdd53843498f92890544667809f1595", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 4.32, + "salesQuantity": 156, + "revenue": 54730.2 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-037", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "165f86fe8b799a708a20ee4ba125c289", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 21, + "avgReviewScore": 3.84, + "salesQuantity": 109, + "revenue": 17820.91 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-038", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "06edb72f1e0c64b14c5b79353f7abea3", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 18, + "avgReviewScore": 4.07, + "salesQuantity": 143, + "revenue": 5831.77 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-039", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "437c05a395e9e47f9762e677a7068ce7", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 4.16, + "salesQuantity": 155, + "revenue": 7757.91 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-040", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "b532349fe46b38fbc7bb3914c1bdae07", + "category": "furniture_decor", + "metrics": { + "lowScoreReviewCount": 22, + "avgReviewScore": 3.63, + "salesQuantity": 169, + "revenue": 6162.11 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-041", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "6f3b5b605d91b7439c5e3f5a8dffeea7", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 4.09, + "salesQuantity": 117, + "revenue": 19009.4 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-042", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "8c591ab0ca519558779df02023177f44", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 4.15, + "salesQuantity": 141, + "revenue": 14492.14 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-043", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "89321f94e35fc6d7903d36f74e351d40", + "category": "food", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 3.99, + "salesQuantity": 119, + "revenue": 3375.71 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-044", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "4298b7e67dc399c200662b569563a2b2", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 3.71, + "salesQuantity": 88, + "revenue": 12479.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-045", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "c4baedd846ed09b85f78a781b522f126", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 4.28, + "salesQuantity": 149, + "revenue": 14989.03 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-046", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "43423cdffde7fda63d0414ed38c11a73", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 19, + "avgReviewScore": 3.69, + "salesQuantity": 93, + "revenue": 5780.28 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-047", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7ce94ab189134e2d3c05f496d635419c", + "category": "electronics", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 4.04, + "salesQuantity": 106, + "revenue": 1446.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-048", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "52c80cedd4e90108bf4fa6a206ef6b03", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 4.16, + "salesQuantity": 118, + "revenue": 20495.56 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-049", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "cd46a885543f0e169a49f1eb25c04e43", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 23, + "avgReviewScore": 1.61, + "salesQuantity": 30, + "revenue": 2999.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-050", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2028bf1b01cafb2d2b1901fca4083222", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.28, + "salesQuantity": 138, + "revenue": 7675.62 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-051", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e7cc48a9daff5436f63d3aad9426f28b", + "category": "telephony", + "metrics": { + "lowScoreReviewCount": 18, + "avgReviewScore": 3.53, + "salesQuantity": 93, + "revenue": 16216.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-052", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ee0c1cf2fbeae95205b4aa506f1469f0", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 4.11, + "salesQuantity": 89, + "revenue": 4598.11 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-053", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "c6dd917a0be2a704582055949915ab32", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 12, + "avgReviewScore": 4.25, + "salesQuantity": 120, + "revenue": 11868.42 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-054", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "25c38557cf793876c5abdd5931f922db", + "category": "baby", + "metrics": { + "lowScoreReviewCount": 20, + "avgReviewScore": 2.68, + "salesQuantity": 38, + "revenue": 38907.32 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-055", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ee406bf28024d97771c4b1e8b7e8e219", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 4.15, + "salesQuantity": 90, + "revenue": 12914.1 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-056", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "f1c7f353075ce59d8a6f3cf58f419c9c", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 9, + "avgReviewScore": 4.37, + "salesQuantity": 154, + "revenue": 29997.36 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-057", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "3f14d740544f37ece8a9e7bc8349797e", + "category": "computers_accessories", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 3.81, + "salesQuantity": 91, + "revenue": 7731.03 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-058", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "0aabfb375647d9738ad0f7b4ea3653b1", + "category": "consoles_games", + "metrics": { + "lowScoreReviewCount": 10, + "avgReviewScore": 4.25, + "salesQuantity": 142, + "revenue": 3416.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-059", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "601a360bd2a916ecef0e88de72a6531a", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.33, + "salesQuantity": 119, + "revenue": 15159.81 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-060", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2a5806f10d0f00e5ad032dd2e3c8806e", + "category": "office_furniture", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 3.25, + "salesQuantity": 55, + "revenue": 9421.45 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-061", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "6c3effec7c8ddba466d4f03f982c7aa3", + "category": "consoles_games", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.92, + "salesQuantity": 97, + "revenue": 2384.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-062", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "08574b074924071f4e201e151b152b4e", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 12, + "avgReviewScore": 4.09, + "salesQuantity": 113, + "revenue": 10759.3 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-063", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "75d6b6963340c6063f7f4cfcccfe6a30", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 12, + "avgReviewScore": 4.16, + "salesQuantity": 93, + "revenue": 5288.07 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-064", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "362b773250263786dd58670d2df42c3b", + "category": "sports_leisure", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 3.43, + "salesQuantity": 73, + "revenue": 3782.7 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-065", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "1dec4c88c685d5a07bf01dcb0f8bf9f8", + "category": "auto", + "metrics": { + "lowScoreReviewCount": 17, + "avgReviewScore": 2.74, + "salesQuantity": 35, + "revenue": 19965.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-066", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e0cf79767c5b016251fe139915c59a26", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 8, + "avgReviewScore": 4.51, + "salesQuantity": 137, + "revenue": 4096.3 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-067", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "617186c3d97ea56c9c683a8a3974e8c1", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.3, + "salesQuantity": 95, + "revenue": 7924.05 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-068", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "e59dd207c69d86e890febadc796d1078", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 14, + "avgReviewScore": 3.72, + "salesQuantity": 62, + "revenue": 9043.37 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-069", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "2ffdf10e724b958c0f7ea69e97d32f64", + "category": "watches_gifts", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 3.3, + "salesQuantity": 52, + "revenue": 10916.6 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-070", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "386486367c1f9d4f587a8864ccb6902b", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 15, + "avgReviewScore": 3.46, + "salesQuantity": 55, + "revenue": 6128.25 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-071", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ec2d43cc59763ec91694573b31f1c29a", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 9, + "avgReviewScore": 4.33, + "salesQuantity": 131, + "revenue": 6011.77 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-072", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "8c292ca193d326152e335d77176746f0", + "category": "health_beauty", + "metrics": { + "lowScoreReviewCount": 11, + "avgReviewScore": 4.09, + "salesQuantity": 92, + "revenue": 14139.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-073", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "dab2413ead0edda9967edbc9bda2a64e", + "category": "telephony", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.66, + "salesQuantity": 68, + "revenue": 2038.88 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-074", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "7e0dc102074f8285580c9777f79c90cf", + "category": "garden_tools", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.75, + "salesQuantity": 72, + "revenue": 2582.8 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-075", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "54d9ac713e253fa1fae9c8003b011c2a", + "category": "cool_stuff", + "metrics": { + "lowScoreReviewCount": 8, + "avgReviewScore": 4.35, + "salesQuantity": 114, + "revenue": 3656.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-076", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "ea44caac707f7f1325182a538007f838", + "category": "baby", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.82, + "salesQuantity": 63, + "revenue": 3198.0 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-077", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "0cf41187284d7f099adc8415a743ebbd", + "category": "baby", + "metrics": { + "lowScoreReviewCount": 16, + "avgReviewScore": 2.87, + "salesQuantity": 35, + "revenue": 1256.5 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-078", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "bbaef2eadf31fe3ea6702077398be06c", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 13, + "avgReviewScore": 3.77, + "salesQuantity": 65, + "revenue": 3704.35 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-079", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "595fac2a385ac33a80bd5114aec74eb8", + "category": "perfumery", + "metrics": { + "lowScoreReviewCount": 9, + "avgReviewScore": 4.43, + "salesQuantity": 106, + "revenue": 12636.9 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-PRODUCT-080", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": "777d2e438a1b645f3aec9bd57e92672c", + "category": "bed_bath_table", + "metrics": { + "lowScoreReviewCount": 10, + "avgReviewScore": 4.1, + "salesQuantity": 94, + "revenue": 6567.8 + }, + "expectedSignals": [ + "product_review_risk", + "product_optimization_candidate" + ], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-001", + "sampleType": "delivery_delay_risk", + "businessDate": "2016-10-06", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "bfbd0f9bdef84302105ad712db648a6c", + "reviewId": "6916ca4502d6d3bfd39818759d55d536", + "productId": "5a6b04657a4c5ee34285d1e4619a96b4", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-002", + "sampleType": "delivery_delay_risk", + "businessDate": "2016-11-27", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5cc475c7c03290048eb2e742cd64cb5e", + "reviewId": "911489d0bc7092faa2e845b5300acde7", + "productId": "3410cbd7df2130ec3cb9300ef0fe3df1", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-003", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-02-17", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "89898719573722b59b173f76fb213501", + "reviewId": "19232d185d499934b048f16285e6d20e", + "productId": "3889a02f55ae9a5e5e321c4a4d2eee64", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-004", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-02-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3c116d50bb76160ee1d7a2e8f5791427", + "reviewId": "154073a27ed4fc007c9b8c4439ae83f5", + "productId": "9fa0c72476690fbc66bcacc498fe7fd6", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-005", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-01", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "bf79e4fa55a389d494f47feb2654892c", + "reviewId": "6b63898cfd07a3793858c7591753983e", + "productId": "fe09eb5f7bfcb79d05df7c4e83ec204e", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-006", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-02", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5d6e9993ecc20a59e637ce711858d081", + "reviewId": "97e60b155b921d80a70650674b8ad2e5", + "productId": "3c2f792f1041177a81913a977431a99e", + "category": "electronics", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-007", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-03", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4fa07e91d7b4f8b191e3a6ab40f14f54", + "reviewId": "48d1f2a1dbb0cac3e9f04e7b962c86e7", + "productId": "11875b30b49585209e608f40e8082e65", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-008", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-04", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "fcafab7fc942d51e9f45bfeeb5bb684d", + "reviewId": "b78ffbba38f07d0efbb7f7647f3a7097", + "productId": "9b1c7bc7cad0519369a5ea04afe303f7", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-009", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-05", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "21dfb91aa3e9fa351ae6f12da1c53fb9", + "reviewId": "9f1d9a5aaedfe8ac4ccc267e43a40a2b", + "productId": "0b50295ca2c740dec15bb6fec6e8a3e2", + "category": "fashion_underwear_beach", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-010", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "fbee80ef6891c144af8ff9dc788aaa89", + "reviewId": "389c453b569a52990da32722f07c18d8", + "productId": "89c111575a1b19782a2e660eff07dd8a", + "category": "fashion_bags_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-011", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "b96f5299909903eedc435d396f90f726", + "reviewId": "89cd5131fdd598b29789a8a4ad616f7c", + "productId": "c6edce374ec89184d740f3e674add5f4", + "category": "watches_gifts", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-012", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-10", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5629fdbbd11b9755743ba8b8f517f8cc", + "reviewId": "33a67e99de7baa0bb6ebf4fc0fb0c397", + "productId": "20205e1ea024aec43a7a3fc0d8f7a287", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-013", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-10", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d3aa5667ad65af7fa58a5481d0aff07a", + "reviewId": "6e97423635790db1bf4d3f2311d0ec59", + "productId": "7858ef2bdbf08f635dedbe5cd1dc966e", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-014", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-11", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "cfd5e54c14f22b62683cea7ed91caa24", + "reviewId": "c0ffa7eb30ef0434b39a1a557f80a733", + "productId": "94fb2ab4419d523ecce8e5d56676788d", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-015", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-11", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "b04215f2cbc4e1fdd167427e657c7d16", + "reviewId": "d8c7bd905f4be8112a724a1cb1137dd5", + "productId": "f9d151cf2fc10d41cce64b782856320f", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-016", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-12", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "7d86c4aa9e59504b23f16c7ca68954a7", + "reviewId": "874b3612c564c7516c780ddc5e7e44ac", + "productId": "e8d7b12572b213ba22acebb8983a4615", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-017", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "695eed4f6656d10f32a49760523169de", + "reviewId": "73b022300fec142e9939aba068921a79", + "productId": "cf78006a2a6b0429b9663edd99bb38f9", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-018", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "66cd3a1c2edd13d9da86b50aca9e3d32", + "reviewId": "fd0cf5c069a2da217b7fe5da6307e908", + "productId": "a4d8f727f92014da5dd64116af14634c", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-019", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "67e9625c39f8c6e529f81ad4c28acc5e", + "reviewId": "ab2e034121ea2d0235db4d43b83fba5b", + "productId": "fa80471d26662bb653b2286e4b735a5a", + "category": "auto", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-020", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5a90bdab22ab69f4095415dd55451b66", + "reviewId": "25a3f93b2c04231a3bdadca8bfe31c64", + "productId": "d0fe4295267f15ccaceac4fb233d8c9a", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-021", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "194a9f43598155086b091e0c827ad480", + "reviewId": "245d316770c8e8ada158c0fc56794854", + "productId": "73f5461cce8ab8a4db14936789113bfc", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-022", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-16", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "dc5cb627d7efea62719ee5d36aa9254b", + "reviewId": "79a1f09a1fa57eed5af596c4fdbe5131", + "productId": "f838e96e79703e5e94c13c86609530c5", + "category": "perfumery", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-023", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-17", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "efd2c0c31366671a99bb3eba61b5459a", + "reviewId": "3ad0d3ff003118a0d4478f851f5e3149", + "productId": "2f02a124a827f65bfcc0baf443dad405", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-024", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-18", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3ac0423d1e7e335f83c8fa3600ae47d7", + "reviewId": "35b31761452ee352746a6015417cd0b4", + "productId": "a3fc0390c2d3101f940c0d6e78006e4e", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-025", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-18", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3195c228f36c525c75f392549eff247f", + "reviewId": "fb273933480c85e5897cea81904ce534", + "productId": "a1ccbdad642a580304988cd472018896", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-026", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-18", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "abbbf52551bc34cd52a7851c06dfca90", + "reviewId": "1d2783cf7a04a2b804081fdf2729db11", + "productId": "6f1ccca9f878a413a495487eb649ab32", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-027", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-19", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "76279ee78a4924f44a3a83ef23b169b8", + "reviewId": "5f8884f89aa21b0c12a0ce6c48ec7bd1", + "productId": "2a5806f10d0f00e5ad032dd2e3c8806e", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-028", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-19", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4456ddfcb3350b652f0318df9b7f3cde", + "reviewId": "6387c2ef4ca190ef97609cec9622c66e", + "productId": "62e456c867c6e980b926b96362a76468", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-029", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-22", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "93da2265260e364c8e81f490b7d92e07", + "reviewId": "c43dc86e31db842af4f81d269f723574", + "productId": "084461b396a7e044af9229534fa03b51", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-030", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "1095806f851129963474b5f20d6520fd", + "reviewId": "3ee73291305a46b3000317df81f7c1d6", + "productId": "d07c0177e489e871713b83a518446ac7", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-031", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "f73d73f08d9e97a496861a69bf371880", + "reviewId": "a9bf07f67913191c2b58bc8e03fd1bd6", + "productId": "310794f4911fb5f5f2add5e9ad72b21f", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-032", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-24", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a380e6e7800d5e6d6fb008fe587e4202", + "reviewId": "85567db9f0f2a4000a8ff95f2200b61a", + "productId": "caa5c299fe513376ba573cfd401822c8", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-033", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d573a47c29466bb2e4e46aef0ff04f23", + "reviewId": "0c95d3a2b40f67fe6c8c6ea1fbc07f23", + "productId": "97ac99fefa9cf4eb8f825136a89e8f40", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-034", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c40c8f44fadbd73ec33576de59af7037", + "reviewId": "6fc4e2702f84a1a71fe7dd3bd9747a7d", + "productId": "403f76f6cb6bac59fe7dcb462ec42ac3", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-035", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "523d7597c0c82db94fd16b4213e2f0ab", + "reviewId": "dec3b89256e4f35e00cf26fb0e016ba0", + "productId": "0db0a25da8420d8e6d918b552c3c4891", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-036", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-25", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "18e4264c34fe91aab3b39ea012932f3d", + "reviewId": "0488ce54fae74a52af3255785ef718ae", + "productId": "cd59f488cef311feb633141ad1e8563d", + "category": "food", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-037", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-26", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c39c97c1d22e4a4486ce849afb668211", + "reviewId": "20ed06776b2a815d8e3091ff153dda3a", + "productId": "3bcf64d8d26d6e06bd568d27fe31d8e8", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-038", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-26", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "674e1f5ca0441058cc7fa110cb4f49eb", + "reviewId": "bde49b90bd1f490e9d74aa1081ab697c", + "productId": "00250175f79f584c14ab5cecd80553cd", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-039", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-29", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "06215d34c1ec4e1106eb12ae5fd0370f", + "reviewId": "58fba994301774191d7fef8f8af5bcd7", + "productId": "42130cd7a981706499a4d337f2f7f621", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-040", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-29", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "91415c7eb3a9313812484623efc7ee27", + "reviewId": "161c215e2b76dde78b90f987cdba9bde", + "productId": "eb551aa4ed7eb5e2839d5b7d2896bece", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-041", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-29", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3dbf60040199f502ec5dd67f86b804ab", + "reviewId": "811c25e89f3d101069689b571b1818a6", + "productId": "3d22445510fe5a03299a8d2a5da7abf4", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-042", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-30", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "9d5d3058706c16d0557d9b43c95ed70e", + "reviewId": "7b2ae7a7b8930d783c4cd39d1033f431", + "productId": "404a57563d487aecbc2b1a01d9b89aab", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-043", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c8d355d9b0027d16b4f22804df2bbc2d", + "reviewId": "e0a3c5ef82be25048f998dba7a7f9c5f", + "productId": "ff6154cee42bf2718cca4865f0620e04", + "category": "garden_tools", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-044", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a17c7cad1ce274604db62cc3d2def2c9", + "reviewId": "1c2dc552d0c5a1788d7c3dbf91443b49", + "productId": "46f739c1cd676603026c0af4d29ef7a5", + "category": "auto", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-045", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "00d03eb3425f41a599ae2f788e23c07f", + "reviewId": "e19f31db602ae8378c04a6d0608aa476", + "productId": "c35498fbb4358837ae16850f50c3fd22", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-046", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-03-31", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5667af66694cc07bce46f7af2ed32ed6", + "reviewId": "6ad530bb54fb56183cb64898c5226872", + "productId": "f5c47e637a96fcf0de8c1c6baa75d856", + "category": "electronics", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-047", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "777c67eab7c0712ccde8ffbb22715adb", + "reviewId": "be7e2989673cb2a147b87ba73277da9e", + "productId": "73df0070248804951b5c6ba9537c6fc3", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-048", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-01", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "2ba1366baecad3c3536f27546d129017", + "reviewId": "23ee6bc2492808dca0e807e131ec9aeb", + "productId": "e4176515d2055eb7771645c597f8b40c", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-049", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-02", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a685d016c8a26f71a0bb67821070e398", + "reviewId": "19d60869413aa63834affc9ecc9d9f90", + "productId": "ebd7c847c1e1cb69ec374ae0ebee1f4c", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-050", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-02", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "64fee01b4774a493de37aafa79a3d434", + "reviewId": "ba850a2a553e93c345ebaf412aa29a1f", + "productId": "1a06a6a66ab23d70e02b8f92650e268f", + "category": "home_confort", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-051", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-05", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d5bcb8f80071a67b57f191f45f7faf88", + "reviewId": "1f816e3ff358fd6d7eef326e15c23cbe", + "productId": "1750753e77dc38c4afe6fc90f02c39bc", + "category": "toys", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-052", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-05", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "7d0a7957897551b77224fc297e8f6046", + "reviewId": "92e49e5d5ea4a8aa76c10fcf0fd90350", + "productId": "abe6b1e401ce596ad0c493aeedb488a4", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-053", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4ef8fef15b3a1986d266d349b21ab021", + "reviewId": "9364ac5f9db46b2ea389cea4e5389529", + "productId": "fc3e972df7e263b301e2bee77ac2a6d3", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-054", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-06", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "6b63433212c602eeba6a683bdc5e6b4b", + "reviewId": "27bb6d509932b0d5f18cb41e458496d6", + "productId": "5d030df086e7b38e143350d4c99db48d", + "category": "furniture_living_room", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-055", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-07", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "d079556268ebfb6ee516faac531c2f78", + "reviewId": "72c6cfd29ed7dd89c9025eb5f453724f", + "productId": "3a7c9b0413d7b9cc7f4a18318fc5afb3", + "category": "cool_stuff", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-056", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-08", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "8a7679380ddbbbe7495aa2d1cafd515b", + "reviewId": "8a16c25ba338614974d204c5b6444b52", + "productId": "861857117917aaa99611defcc0d514cd", + "category": "food", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-057", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-08", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "285ab9426d6982034523a855f55a885e", + "reviewId": "38477ef6c23d3478a0f012503919803a", + "productId": "0c6fc9b9317a68d1cda098c063914b72", + "category": "musical_instruments", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-058", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-08", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "6cbad422849c13ec8f4517ee01a6c02b", + "reviewId": "709342ef7d2d7786b744e2f2c83cb357", + "productId": "c1488892604e4ba5cff5b4eb4d595400", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-059", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "0a8f35ef46160ef897c27ba8c423d823", + "reviewId": "4742655b1e39dd8f4ae75fa947d35bb0", + "productId": "3a002b488f85e2b30838e413c9241f18", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-060", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "427be8c69327b86f12e65fb5fedfde5c", + "reviewId": "91243d50c25245df8fa3fa148488d764", + "productId": "ad5f871bf1f82cf7aed349162ab802e6", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-061", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "2fe324febf907e3ea3f2aa9650869fa5", + "reviewId": "2f48a889d5738776ab5180f2b4fbb4e5", + "productId": "b75683e29689c1a989ae97883e8cad56", + "category": "furniture_decor", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-062", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "179643231d5131dc81e54ce16437972f", + "reviewId": "3848b75c5bfe221557d5a85708d9c906", + "productId": "552a2a10932c4abaff715fe6a4d61280", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-063", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-09", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "40d702a17a6d8b52548cb922505283a9", + "reviewId": "2caddd407fc1d84f1eb3b79641071af2", + "productId": "92c1eb75a887a500d9689fbad65e27e3", + "category": "office_furniture", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-064", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-12", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "854d9f86041d38857c38795f8c133494", + "reviewId": "1d7649f44d4bea2700421c4a52d46893", + "productId": "fb01a5fc09b9b9563c2ee41a22f07d54", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-065", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-13", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "85aa425106ebd563ef29f08d6cb0f4d0", + "reviewId": "3b838d7cb25f28fe79abc1fc679c853b", + "productId": "37e4c14527273be66b84b8836bba463b", + "category": "unknown", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-066", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-13", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "440d0d17af552815d15a9e41abe49359", + "reviewId": "b72948c0912824f5660a661fcb3ef512", + "productId": "3bec03860f3782ef8993056e01b8229a", + "category": "consoles_games", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-067", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-14", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3f3f818c758f0f9ed76a1d49d8d7e6f3", + "reviewId": "f95689ce5d00e28c1756545f87e2627c", + "productId": "ec8514b52ebb78103c68fddbb2d9f0a8", + "category": "musical_instruments", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-068", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-14", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "1e2e0bd44283a412e965e041198550c2", + "reviewId": "841ca4c7309936db53ec53e72d91d77f", + "productId": "dfb97c88e066dc22165f31648efe1312", + "category": "auto", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-069", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "70be4f36c3ba5f5c95734da20d4c34a7", + "reviewId": "af3e49496fc86e553113e545869ca2b9", + "productId": "99a4788cb24856965c36a24e339b6058", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-070", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5503b14ddf7853393e5acf02e0128442", + "reviewId": "fd887ad0739a64ca018a91f0f297cd6b", + "productId": "b57a4072f1286a401272930c85221f91", + "category": "telephony", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-071", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "f891a5652a32da88979c1328c7cb73db", + "reviewId": "d98088708b78c7a6d3b9652c70b112bd", + "productId": "dcfeedf441c38e5e7e58ffce194af2bb", + "category": "health_beauty", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-072", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-15", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "545c329642c609a7e1e3ab759eed9dc5", + "reviewId": "e3e1d48d963d615dc1237d25761731b9", + "productId": "50147c350ddbaff0646aeac455c7473e", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-073", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-19", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a88edef387e2a7e457695664bf0ddfc0", + "reviewId": "aba19e5eab0160c4694c6ebbab7b4a4c", + "productId": "bf84efc59aa20236fc3cb0d7a9e7ca44", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-074", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "4d2e2634819452adb3313ccb5abd344f", + "reviewId": "3cd07e6913fe06ddbf4522cd3a308c2d", + "productId": "777d2e438a1b645f3aec9bd57e92672c", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-075", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "5207664bb97d53e5e9cdfd0163380e2f", + "reviewId": "04323bc37f851b35eacd18ae256bf98c", + "productId": "234df98e1a567a28c8ff2079fd55198b", + "category": "computers_accessories", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-076", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "c565668594ff62ffd95ef9f06d90742f", + "reviewId": "ebc14f2a8751892c6d3fc4632babe50b", + "productId": "47a67549d9b00310453dec1c3902e391", + "category": "housewares", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-077", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "6854558dc4979ad704ccd9ff6a90e628", + "reviewId": "b4da3b9037daf7ea39dd8c4a8f675ef0", + "productId": "6bbe55cf8f85c87b6eebb775a53402f4", + "category": "tablets_printing_image", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-078", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-20", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "a53ebffcfdb8c4e47308374591571f96", + "reviewId": "63bcd08d96493aaf37a206e1b0de0834", + "productId": "be29c68650ca8ac7209aeb238df7f05f", + "category": "sports_leisure", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-079", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-21", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "3c314f50bc654f3c4e317b055681dff9", + "reviewId": "9fd59cd04b42f600df9f25e54082a8d1", + "productId": "a87567bdce60de6f901e3d7c6d8df820", + "category": "bed_bath_table", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "dataset": "olist", + "sampleId": "OLIST-DELAY-080", + "sampleType": "delivery_delay_risk", + "businessDate": "2017-04-21", + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": "95e7bfc2e335e44766ce4eb5f5771e30", + "reviewId": "20b4d0deb7a5b4d4bf478f2ed658a455", + "productId": "83a1778b0d5b20c0724c97e35f083082", + "category": "toys", + "metrics": { + "reviewScore": 1, + "deliveredAfterEstimatedDate": true + }, + "expectedSignals": [ + "delivery_delay", + "customer_experience_risk" + ], + "recommendedTools": [ + "order.query_detail", + "comment.query_negative", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "CRITEO-AD-001", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7462178", + "metrics": { + "impressions": 15098, + "clicks": 4582, + "conversions": 51, + "cost": 8.5, + "ctr": 0.3035, + "ctrPercent": 30.35, + "conversionRate": 0.0111, + "conversionRatePercent": 1.11, + "costPerConversion": 0.17 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-002", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "14102485", + "metrics": { + "impressions": 13462, + "clicks": 4068, + "conversions": 70, + "cost": 9.63, + "ctr": 0.3022, + "ctrPercent": 30.22, + "conversionRate": 0.0172, + "conversionRatePercent": 1.72, + "costPerConversion": 0.14 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-003", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20843295", + "metrics": { + "impressions": 1305, + "clicks": 416, + "conversions": 4, + "cost": 0.49, + "ctr": 0.3188, + "ctrPercent": 31.88, + "conversionRate": 0.0096, + "conversionRatePercent": 0.96, + "costPerConversion": 0.12 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-004", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "30328739", + "metrics": { + "impressions": 16396, + "clicks": 5210, + "conversions": 119, + "cost": 10.61, + "ctr": 0.3178, + "ctrPercent": 31.78, + "conversionRate": 0.0228, + "conversionRatePercent": 2.28, + "costPerConversion": 0.09 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-005", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "15661602", + "metrics": { + "impressions": 10586, + "clicks": 3680, + "conversions": 67, + "cost": 5.85, + "ctr": 0.3476, + "ctrPercent": 34.76, + "conversionRate": 0.0182, + "conversionRatePercent": 1.82, + "costPerConversion": 0.09 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-006", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "1586481", + "metrics": { + "impressions": 19068, + "clicks": 5814, + "conversions": 128, + "cost": 11.17, + "ctr": 0.3049, + "ctrPercent": 30.49, + "conversionRate": 0.022, + "conversionRatePercent": 2.2, + "costPerConversion": 0.09 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-007", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20377297", + "metrics": { + "impressions": 20407, + "clicks": 6563, + "conversions": 155, + "cost": 13.3, + "ctr": 0.3216, + "ctrPercent": 32.16, + "conversionRate": 0.0236, + "conversionRatePercent": 2.36, + "costPerConversion": 0.09 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-008", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23385780", + "metrics": { + "impressions": 14280, + "clicks": 3931, + "conversions": 131, + "cost": 11.35, + "ctr": 0.2753, + "ctrPercent": 27.53, + "conversionRate": 0.0333, + "conversionRatePercent": 3.33, + "costPerConversion": 0.09 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-009", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "3144706", + "metrics": { + "impressions": 29905, + "clicks": 10527, + "conversions": 122, + "cost": 9.98, + "ctr": 0.352, + "ctrPercent": 35.2, + "conversionRate": 0.0116, + "conversionRatePercent": 1.16, + "costPerConversion": 0.08 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-010", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "10321103", + "metrics": { + "impressions": 22396, + "clicks": 8263, + "conversions": 171, + "cost": 14.08, + "ctr": 0.3689, + "ctrPercent": 36.89, + "conversionRate": 0.0207, + "conversionRatePercent": 2.07, + "costPerConversion": 0.08 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-011", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "11938638", + "metrics": { + "impressions": 44185, + "clicks": 12172, + "conversions": 178, + "cost": 13.83, + "ctr": 0.2755, + "ctrPercent": 27.55, + "conversionRate": 0.0146, + "conversionRatePercent": 1.46, + "costPerConversion": 0.08 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-012", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12700456", + "metrics": { + "impressions": 9876, + "clicks": 3700, + "conversions": 64, + "cost": 4.17, + "ctr": 0.3746, + "ctrPercent": 37.46, + "conversionRate": 0.0173, + "conversionRatePercent": 1.73, + "costPerConversion": 0.07 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-013", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "17661709", + "metrics": { + "impressions": 6185, + "clicks": 1719, + "conversions": 52, + "cost": 3.21, + "ctr": 0.2779, + "ctrPercent": 27.79, + "conversionRate": 0.0303, + "conversionRatePercent": 3.03, + "costPerConversion": 0.06 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-014", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "18323505", + "metrics": { + "impressions": 12791, + "clicks": 4095, + "conversions": 104, + "cost": 6.36, + "ctr": 0.3201, + "ctrPercent": 32.01, + "conversionRate": 0.0254, + "conversionRatePercent": 2.54, + "costPerConversion": 0.06 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-015", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "15500294", + "metrics": { + "impressions": 9714, + "clicks": 1633, + "conversions": 28, + "cost": 1.53, + "ctr": 0.1681, + "ctrPercent": 16.81, + "conversionRate": 0.0171, + "conversionRatePercent": 1.71, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-016", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "3313894", + "metrics": { + "impressions": 11754, + "clicks": 3953, + "conversions": 83, + "cost": 4.31, + "ctr": 0.3363, + "ctrPercent": 33.63, + "conversionRate": 0.021, + "conversionRatePercent": 2.1, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-017", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "21658041", + "metrics": { + "impressions": 7037, + "clicks": 2658, + "conversions": 53, + "cost": 2.73, + "ctr": 0.3777, + "ctrPercent": 37.77, + "conversionRate": 0.0199, + "conversionRatePercent": 1.99, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-018", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22233130", + "metrics": { + "impressions": 17524, + "clicks": 7301, + "conversions": 134, + "cost": 6.89, + "ctr": 0.4166, + "ctrPercent": 41.66, + "conversionRate": 0.0184, + "conversionRatePercent": 1.84, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-019", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29874685", + "metrics": { + "impressions": 12173, + "clicks": 5156, + "conversions": 62, + "cost": 3.02, + "ctr": 0.4236, + "ctrPercent": 42.36, + "conversionRate": 0.012, + "conversionRatePercent": 1.2, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-020", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "9013587", + "metrics": { + "impressions": 16055, + "clicks": 5394, + "conversions": 65, + "cost": 3.13, + "ctr": 0.336, + "ctrPercent": 33.6, + "conversionRate": 0.0121, + "conversionRatePercent": 1.21, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-021", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "15959620", + "metrics": { + "impressions": 9048, + "clicks": 3673, + "conversions": 98, + "cost": 4.72, + "ctr": 0.4059, + "ctrPercent": 40.59, + "conversionRate": 0.0267, + "conversionRatePercent": 2.67, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-022", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13576413", + "metrics": { + "impressions": 6360, + "clicks": 2621, + "conversions": 71, + "cost": 3.33, + "ctr": 0.4121, + "ctrPercent": 41.21, + "conversionRate": 0.0271, + "conversionRatePercent": 2.71, + "costPerConversion": 0.05 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-023", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13947793", + "metrics": { + "impressions": 23920, + "clicks": 8312, + "conversions": 133, + "cost": 5.91, + "ctr": 0.3475, + "ctrPercent": 34.75, + "conversionRate": 0.016, + "conversionRatePercent": 1.6, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-024", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "2077112", + "metrics": { + "impressions": 8596, + "clicks": 2516, + "conversions": 44, + "cost": 1.93, + "ctr": 0.2927, + "ctrPercent": 29.27, + "conversionRate": 0.0175, + "conversionRatePercent": 1.75, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-025", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12947794", + "metrics": { + "impressions": 24744, + "clicks": 6607, + "conversions": 130, + "cost": 5.66, + "ctr": 0.267, + "ctrPercent": 26.7, + "conversionRate": 0.0197, + "conversionRatePercent": 1.97, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-026", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "2828357", + "metrics": { + "impressions": 73432, + "clicks": 26019, + "conversions": 696, + "cost": 30.03, + "ctr": 0.3543, + "ctrPercent": 35.43, + "conversionRate": 0.0267, + "conversionRatePercent": 2.67, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-027", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "30175073", + "metrics": { + "impressions": 10122, + "clicks": 3586, + "conversions": 126, + "cost": 5.45, + "ctr": 0.3543, + "ctrPercent": 35.43, + "conversionRate": 0.0351, + "conversionRatePercent": 3.51, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-028", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "21830168", + "metrics": { + "impressions": 7261, + "clicks": 2648, + "conversions": 45, + "cost": 1.89, + "ctr": 0.3647, + "ctrPercent": 36.47, + "conversionRate": 0.017, + "conversionRatePercent": 1.7, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-029", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22274902", + "metrics": { + "impressions": 13149, + "clicks": 1991, + "conversions": 55, + "cost": 2.31, + "ctr": 0.1514, + "ctrPercent": 15.14, + "conversionRate": 0.0276, + "conversionRatePercent": 2.76, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-030", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "21096019", + "metrics": { + "impressions": 22209, + "clicks": 8216, + "conversions": 114, + "cost": 4.58, + "ctr": 0.3699, + "ctrPercent": 36.99, + "conversionRate": 0.0139, + "conversionRatePercent": 1.39, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-031", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "28874676", + "metrics": { + "impressions": 48067, + "clicks": 18497, + "conversions": 209, + "cost": 8.35, + "ctr": 0.3848, + "ctrPercent": 38.48, + "conversionRate": 0.0113, + "conversionRatePercent": 1.13, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-032", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "11042365", + "metrics": { + "impressions": 6168, + "clicks": 2364, + "conversions": 42, + "cost": 1.67, + "ctr": 0.3833, + "ctrPercent": 38.33, + "conversionRate": 0.0178, + "conversionRatePercent": 1.78, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-033", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "27009860", + "metrics": { + "impressions": 6755, + "clicks": 2673, + "conversions": 80, + "cost": 3.21, + "ctr": 0.3957, + "ctrPercent": 39.57, + "conversionRate": 0.0299, + "conversionRatePercent": 2.99, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-034", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12987593", + "metrics": { + "impressions": 13196, + "clicks": 5185, + "conversions": 127, + "cost": 4.98, + "ctr": 0.3929, + "ctrPercent": 39.29, + "conversionRate": 0.0245, + "conversionRatePercent": 2.45, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-035", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "1716282", + "metrics": { + "impressions": 5952, + "clicks": 1396, + "conversions": 34, + "cost": 1.3, + "ctr": 0.2345, + "ctrPercent": 23.45, + "conversionRate": 0.0244, + "conversionRatePercent": 2.44, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-036", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "16506604", + "metrics": { + "impressions": 3748, + "clicks": 1217, + "conversions": 44, + "cost": 1.68, + "ctr": 0.3247, + "ctrPercent": 32.47, + "conversionRate": 0.0362, + "conversionRatePercent": 3.62, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-037", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12474087", + "metrics": { + "impressions": 2450, + "clicks": 809, + "conversions": 20, + "cost": 0.75, + "ctr": 0.3302, + "ctrPercent": 33.02, + "conversionRate": 0.0247, + "conversionRatePercent": 2.47, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-038", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "15574227", + "metrics": { + "impressions": 8932, + "clicks": 3400, + "conversions": 151, + "cost": 5.64, + "ctr": 0.3807, + "ctrPercent": 38.07, + "conversionRate": 0.0444, + "conversionRatePercent": 4.44, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-039", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "30676243", + "metrics": { + "impressions": 8380, + "clicks": 3068, + "conversions": 80, + "cost": 2.9, + "ctr": 0.3661, + "ctrPercent": 36.61, + "conversionRate": 0.0261, + "conversionRatePercent": 2.61, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-040", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "1130498", + "metrics": { + "impressions": 23247, + "clicks": 7126, + "conversions": 226, + "cost": 8.22, + "ctr": 0.3065, + "ctrPercent": 30.65, + "conversionRate": 0.0317, + "conversionRatePercent": 3.17, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-041", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "83677", + "metrics": { + "impressions": 42678, + "clicks": 12682, + "conversions": 365, + "cost": 13.08, + "ctr": 0.2972, + "ctrPercent": 29.72, + "conversionRate": 0.0288, + "conversionRatePercent": 2.88, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-042", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "31491419", + "metrics": { + "impressions": 3747, + "clicks": 1385, + "conversions": 82, + "cost": 3.01, + "ctr": 0.3696, + "ctrPercent": 36.96, + "conversionRate": 0.0592, + "conversionRatePercent": 5.92, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-043", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7413800", + "metrics": { + "impressions": 4119, + "clicks": 1565, + "conversions": 51, + "cost": 1.8, + "ctr": 0.3799, + "ctrPercent": 37.99, + "conversionRate": 0.0326, + "conversionRatePercent": 3.26, + "costPerConversion": 0.04 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-044", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "4814007", + "metrics": { + "impressions": 48054, + "clicks": 16976, + "conversions": 210, + "cost": 7.08, + "ctr": 0.3533, + "ctrPercent": 35.33, + "conversionRate": 0.0124, + "conversionRatePercent": 1.24, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-045", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12289574", + "metrics": { + "impressions": 42523, + "clicks": 15615, + "conversions": 274, + "cost": 8.97, + "ctr": 0.3672, + "ctrPercent": 36.72, + "conversionRate": 0.0175, + "conversionRatePercent": 1.75, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-046", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23310435", + "metrics": { + "impressions": 3479, + "clicks": 617, + "conversions": 26, + "cost": 0.86, + "ctr": 0.1773, + "ctrPercent": 17.73, + "conversionRate": 0.0421, + "conversionRatePercent": 4.21, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-047", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "26389108", + "metrics": { + "impressions": 13571, + "clicks": 2263, + "conversions": 133, + "cost": 4.45, + "ctr": 0.1668, + "ctrPercent": 16.68, + "conversionRate": 0.0588, + "conversionRatePercent": 5.88, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-048", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13947795", + "metrics": { + "impressions": 57717, + "clicks": 18661, + "conversions": 809, + "cost": 26.18, + "ctr": 0.3233, + "ctrPercent": 32.33, + "conversionRate": 0.0434, + "conversionRatePercent": 4.34, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-049", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23346188", + "metrics": { + "impressions": 3736, + "clicks": 1383, + "conversions": 45, + "cost": 1.38, + "ctr": 0.3702, + "ctrPercent": 37.02, + "conversionRate": 0.0325, + "conversionRatePercent": 3.25, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-050", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22589171", + "metrics": { + "impressions": 16614, + "clicks": 3148, + "conversions": 128, + "cost": 3.95, + "ctr": 0.1895, + "ctrPercent": 18.95, + "conversionRate": 0.0407, + "conversionRatePercent": 4.07, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-051", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "1313883", + "metrics": { + "impressions": 5873, + "clicks": 1718, + "conversions": 106, + "cost": 3.33, + "ctr": 0.2925, + "ctrPercent": 29.25, + "conversionRate": 0.0617, + "conversionRatePercent": 6.17, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-052", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "6513183", + "metrics": { + "impressions": 6753, + "clicks": 921, + "conversions": 43, + "cost": 1.33, + "ctr": 0.1364, + "ctrPercent": 13.64, + "conversionRate": 0.0467, + "conversionRatePercent": 4.67, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-053", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13466843", + "metrics": { + "impressions": 5367, + "clicks": 2023, + "conversions": 73, + "cost": 2.23, + "ctr": 0.3769, + "ctrPercent": 37.69, + "conversionRate": 0.0361, + "conversionRatePercent": 3.61, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-054", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13458070", + "metrics": { + "impressions": 2297, + "clicks": 930, + "conversions": 37, + "cost": 1.12, + "ctr": 0.4049, + "ctrPercent": 40.49, + "conversionRate": 0.0398, + "conversionRatePercent": 3.98, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-055", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "1869938", + "metrics": { + "impressions": 2575, + "clicks": 1178, + "conversions": 28, + "cost": 0.83, + "ctr": 0.4575, + "ctrPercent": 45.75, + "conversionRate": 0.0238, + "conversionRatePercent": 2.38, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-056", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "14006998", + "metrics": { + "impressions": 7238, + "clicks": 2232, + "conversions": 124, + "cost": 3.78, + "ctr": 0.3084, + "ctrPercent": 30.84, + "conversionRate": 0.0556, + "conversionRatePercent": 5.56, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-057", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "19602309", + "metrics": { + "impressions": 114778, + "clicks": 40393, + "conversions": 648, + "cost": 18.91, + "ctr": 0.3519, + "ctrPercent": 35.19, + "conversionRate": 0.016, + "conversionRatePercent": 1.6, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-058", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "19129845", + "metrics": { + "impressions": 4555, + "clicks": 1047, + "conversions": 45, + "cost": 1.35, + "ctr": 0.2299, + "ctrPercent": 22.99, + "conversionRate": 0.043, + "conversionRatePercent": 4.3, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-059", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "19530182", + "metrics": { + "impressions": 107844, + "clicks": 49832, + "conversions": 1215, + "cost": 35.32, + "ctr": 0.4621, + "ctrPercent": 46.21, + "conversionRate": 0.0244, + "conversionRatePercent": 2.44, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-060", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "14104561", + "metrics": { + "impressions": 10170, + "clicks": 2893, + "conversions": 169, + "cost": 4.92, + "ctr": 0.2845, + "ctrPercent": 28.45, + "conversionRate": 0.0584, + "conversionRatePercent": 5.84, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-061", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22296560", + "metrics": { + "impressions": 2139, + "clicks": 730, + "conversions": 37, + "cost": 1.05, + "ctr": 0.3413, + "ctrPercent": 34.13, + "conversionRate": 0.0507, + "conversionRatePercent": 5.07, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-062", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "9097334", + "metrics": { + "impressions": 5256, + "clicks": 1195, + "conversions": 22, + "cost": 0.6, + "ctr": 0.2274, + "ctrPercent": 22.74, + "conversionRate": 0.0184, + "conversionRatePercent": 1.84, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-063", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29513916", + "metrics": { + "impressions": 9508, + "clicks": 4348, + "conversions": 115, + "cost": 3.13, + "ctr": 0.4573, + "ctrPercent": 45.73, + "conversionRate": 0.0264, + "conversionRatePercent": 2.64, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-064", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5781045", + "metrics": { + "impressions": 3770, + "clicks": 1588, + "conversions": 81, + "cost": 2.24, + "ctr": 0.4212, + "ctrPercent": 42.12, + "conversionRate": 0.051, + "conversionRatePercent": 5.1, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-065", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "26071516", + "metrics": { + "impressions": 7709, + "clicks": 2875, + "conversions": 157, + "cost": 4.3, + "ctr": 0.3729, + "ctrPercent": 37.29, + "conversionRate": 0.0546, + "conversionRatePercent": 5.46, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-066", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "11843320", + "metrics": { + "impressions": 18463, + "clicks": 4899, + "conversions": 75, + "cost": 1.93, + "ctr": 0.2653, + "ctrPercent": 26.53, + "conversionRate": 0.0153, + "conversionRatePercent": 1.53, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-067", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12288258", + "metrics": { + "impressions": 14596, + "clicks": 3899, + "conversions": 148, + "cost": 3.89, + "ctr": 0.2671, + "ctrPercent": 26.71, + "conversionRate": 0.038, + "conversionRatePercent": 3.8, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-068", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7869916", + "metrics": { + "impressions": 2822, + "clicks": 924, + "conversions": 50, + "cost": 1.32, + "ctr": 0.3274, + "ctrPercent": 32.74, + "conversionRate": 0.0541, + "conversionRatePercent": 5.41, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-069", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "27491436", + "metrics": { + "impressions": 5382, + "clicks": 1371, + "conversions": 58, + "cost": 1.51, + "ctr": 0.2547, + "ctrPercent": 25.47, + "conversionRate": 0.0423, + "conversionRatePercent": 4.23, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-070", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20458055", + "metrics": { + "impressions": 22704, + "clicks": 5545, + "conversions": 223, + "cost": 5.78, + "ctr": 0.2442, + "ctrPercent": 24.42, + "conversionRate": 0.0402, + "conversionRatePercent": 4.02, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-071", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "32323516", + "metrics": { + "impressions": 108748, + "clicks": 28589, + "conversions": 870, + "cost": 22.09, + "ctr": 0.2629, + "ctrPercent": 26.29, + "conversionRate": 0.0304, + "conversionRatePercent": 3.04, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-072", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "31265168", + "metrics": { + "impressions": 8359, + "clicks": 1459, + "conversions": 78, + "cost": 1.97, + "ctr": 0.1745, + "ctrPercent": 17.45, + "conversionRate": 0.0535, + "conversionRatePercent": 5.35, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-073", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "14104562", + "metrics": { + "impressions": 8226, + "clicks": 2817, + "conversions": 199, + "cost": 5.05, + "ctr": 0.3425, + "ctrPercent": 34.25, + "conversionRate": 0.0706, + "conversionRatePercent": 7.06, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-074", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "30175072", + "metrics": { + "impressions": 17378, + "clicks": 5581, + "conversions": 382, + "cost": 9.61, + "ctr": 0.3212, + "ctrPercent": 32.12, + "conversionRate": 0.0684, + "conversionRatePercent": 6.84, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-075", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "828346", + "metrics": { + "impressions": 10610, + "clicks": 3629, + "conversions": 66, + "cost": 1.56, + "ctr": 0.342, + "ctrPercent": 34.2, + "conversionRate": 0.0182, + "conversionRatePercent": 1.82, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-076", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "26998435", + "metrics": { + "impressions": 6408, + "clicks": 1904, + "conversions": 53, + "cost": 1.26, + "ctr": 0.2971, + "ctrPercent": 29.71, + "conversionRate": 0.0278, + "conversionRatePercent": 2.78, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-077", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "19860994", + "metrics": { + "impressions": 3578, + "clicks": 836, + "conversions": 43, + "cost": 1.04, + "ctr": 0.2337, + "ctrPercent": 23.37, + "conversionRate": 0.0514, + "conversionRatePercent": 5.14, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-078", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "19661713", + "metrics": { + "impressions": 14715, + "clicks": 3064, + "conversions": 197, + "cost": 4.8, + "ctr": 0.2082, + "ctrPercent": 20.82, + "conversionRate": 0.0643, + "conversionRatePercent": 6.43, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-079", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29874688", + "metrics": { + "impressions": 5727, + "clicks": 2001, + "conversions": 89, + "cost": 2.11, + "ctr": 0.3494, + "ctrPercent": 34.94, + "conversionRate": 0.0445, + "conversionRatePercent": 4.45, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-080", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7828336", + "metrics": { + "impressions": 1824, + "clicks": 580, + "conversions": 72, + "cost": 1.86, + "ctr": 0.318, + "ctrPercent": 31.8, + "conversionRate": 0.1241, + "conversionRatePercent": 12.41, + "costPerConversion": 0.03 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-081", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "18104558", + "metrics": { + "impressions": 2591, + "clicks": 1064, + "conversions": 44, + "cost": 1.04, + "ctr": 0.4107, + "ctrPercent": 41.07, + "conversionRate": 0.0414, + "conversionRatePercent": 4.14, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-082", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22891661", + "metrics": { + "impressions": 5559, + "clicks": 1957, + "conversions": 68, + "cost": 1.59, + "ctr": 0.352, + "ctrPercent": 35.2, + "conversionRate": 0.0347, + "conversionRatePercent": 3.47, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-083", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "6336377", + "metrics": { + "impressions": 11017, + "clicks": 3974, + "conversions": 94, + "cost": 2.15, + "ctr": 0.3607, + "ctrPercent": 36.07, + "conversionRate": 0.0237, + "conversionRatePercent": 2.37, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-084", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "3139444", + "metrics": { + "impressions": 4470, + "clicks": 1303, + "conversions": 48, + "cost": 1.09, + "ctr": 0.2915, + "ctrPercent": 29.15, + "conversionRate": 0.0368, + "conversionRatePercent": 3.68, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-085", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "8877966", + "metrics": { + "impressions": 2824, + "clicks": 1259, + "conversions": 63, + "cost": 1.44, + "ctr": 0.4458, + "ctrPercent": 44.58, + "conversionRate": 0.05, + "conversionRatePercent": 5.0, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-086", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29345613", + "metrics": { + "impressions": 20671, + "clicks": 6270, + "conversions": 357, + "cost": 8.17, + "ctr": 0.3033, + "ctrPercent": 30.33, + "conversionRate": 0.0569, + "conversionRatePercent": 5.69, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-087", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "24942663", + "metrics": { + "impressions": 2802, + "clicks": 733, + "conversions": 37, + "cost": 0.84, + "ctr": 0.2616, + "ctrPercent": 26.16, + "conversionRate": 0.0505, + "conversionRatePercent": 5.05, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-088", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7144711", + "metrics": { + "impressions": 12846, + "clicks": 3516, + "conversions": 156, + "cost": 3.51, + "ctr": 0.2737, + "ctrPercent": 27.37, + "conversionRate": 0.0444, + "conversionRatePercent": 4.44, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-089", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7828339", + "metrics": { + "impressions": 7603, + "clicks": 2413, + "conversions": 329, + "cost": 8.19, + "ctr": 0.3174, + "ctrPercent": 31.74, + "conversionRate": 0.1363, + "conversionRatePercent": 13.63, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-090", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12513174", + "metrics": { + "impressions": 4727, + "clicks": 492, + "conversions": 37, + "cost": 0.85, + "ctr": 0.1041, + "ctrPercent": 10.41, + "conversionRate": 0.0752, + "conversionRatePercent": 7.52, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-091", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "4466870", + "metrics": { + "impressions": 7170, + "clicks": 1957, + "conversions": 61, + "cost": 1.34, + "ctr": 0.2729, + "ctrPercent": 27.29, + "conversionRate": 0.0312, + "conversionRatePercent": 3.12, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-092", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5743152", + "metrics": { + "impressions": 2544, + "clicks": 785, + "conversions": 59, + "cost": 1.35, + "ctr": 0.3086, + "ctrPercent": 30.86, + "conversionRate": 0.0752, + "conversionRatePercent": 7.52, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-093", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "25675129", + "metrics": { + "impressions": 10596, + "clicks": 4187, + "conversions": 125, + "cost": 2.68, + "ctr": 0.3951, + "ctrPercent": 39.51, + "conversionRate": 0.0299, + "conversionRatePercent": 2.99, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-094", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "17132179", + "metrics": { + "impressions": 3678, + "clicks": 751, + "conversions": 63, + "cost": 1.43, + "ctr": 0.2042, + "ctrPercent": 20.42, + "conversionRate": 0.0839, + "conversionRatePercent": 8.39, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-095", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "716288", + "metrics": { + "impressions": 57379, + "clicks": 18292, + "conversions": 413, + "cost": 8.77, + "ctr": 0.3188, + "ctrPercent": 31.88, + "conversionRate": 0.0226, + "conversionRatePercent": 2.26, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-096", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23330022", + "metrics": { + "impressions": 8116, + "clicks": 1242, + "conversions": 53, + "cost": 1.15, + "ctr": 0.153, + "ctrPercent": 15.3, + "conversionRate": 0.0427, + "conversionRatePercent": 4.27, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-097", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5474094", + "metrics": { + "impressions": 2462, + "clicks": 1023, + "conversions": 75, + "cost": 1.66, + "ctr": 0.4155, + "ctrPercent": 41.55, + "conversionRate": 0.0733, + "conversionRatePercent": 7.33, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-098", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20717215", + "metrics": { + "impressions": 15868, + "clicks": 5102, + "conversions": 200, + "cost": 4.21, + "ctr": 0.3215, + "ctrPercent": 32.15, + "conversionRate": 0.0392, + "conversionRatePercent": 3.92, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-099", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "8891880", + "metrics": { + "impressions": 6137, + "clicks": 2112, + "conversions": 139, + "cost": 2.99, + "ctr": 0.3441, + "ctrPercent": 34.41, + "conversionRate": 0.0658, + "conversionRatePercent": 6.58, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-100", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23530192", + "metrics": { + "impressions": 15183, + "clicks": 6268, + "conversions": 356, + "cost": 7.59, + "ctr": 0.4128, + "ctrPercent": 41.28, + "conversionRate": 0.0568, + "conversionRatePercent": 5.68, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-101", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "10462151", + "metrics": { + "impressions": 8126, + "clicks": 3016, + "conversions": 153, + "cost": 3.22, + "ctr": 0.3712, + "ctrPercent": 37.12, + "conversionRate": 0.0507, + "conversionRatePercent": 5.07, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-102", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "30752994", + "metrics": { + "impressions": 49911, + "clicks": 21745, + "conversions": 393, + "cost": 8.0, + "ctr": 0.4357, + "ctrPercent": 43.57, + "conversionRate": 0.0181, + "conversionRatePercent": 1.81, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-103", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "17435335", + "metrics": { + "impressions": 8476, + "clicks": 3037, + "conversions": 123, + "cost": 2.56, + "ctr": 0.3583, + "ctrPercent": 35.83, + "conversionRate": 0.0405, + "conversionRatePercent": 4.05, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-104", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22726403", + "metrics": { + "impressions": 6270, + "clicks": 1873, + "conversions": 184, + "cost": 4.04, + "ctr": 0.2987, + "ctrPercent": 29.87, + "conversionRate": 0.0982, + "conversionRatePercent": 9.82, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-105", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7351509", + "metrics": { + "impressions": 6314, + "clicks": 2323, + "conversions": 292, + "cost": 6.62, + "ctr": 0.3679, + "ctrPercent": 36.79, + "conversionRate": 0.1257, + "conversionRatePercent": 12.57, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-106", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5121547", + "metrics": { + "impressions": 20336, + "clicks": 5931, + "conversions": 688, + "cost": 15.41, + "ctr": 0.2917, + "ctrPercent": 29.17, + "conversionRate": 0.116, + "conversionRatePercent": 11.6, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-107", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "10321092", + "metrics": { + "impressions": 2158, + "clicks": 830, + "conversions": 37, + "cost": 0.76, + "ctr": 0.3846, + "ctrPercent": 38.46, + "conversionRate": 0.0446, + "conversionRatePercent": 4.46, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-108", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20730227", + "metrics": { + "impressions": 14033, + "clicks": 4299, + "conversions": 451, + "cost": 9.85, + "ctr": 0.3063, + "ctrPercent": 30.63, + "conversionRate": 0.1049, + "conversionRatePercent": 10.49, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-109", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5700346", + "metrics": { + "impressions": 13267, + "clicks": 4312, + "conversions": 162, + "cost": 3.26, + "ctr": 0.325, + "ctrPercent": 32.5, + "conversionRate": 0.0376, + "conversionRatePercent": 3.76, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-110", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "26750602", + "metrics": { + "impressions": 4550, + "clicks": 1338, + "conversions": 74, + "cost": 1.51, + "ctr": 0.2941, + "ctrPercent": 29.41, + "conversionRate": 0.0553, + "conversionRatePercent": 5.53, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-111", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "21005924", + "metrics": { + "impressions": 1143, + "clicks": 475, + "conversions": 59, + "cost": 1.29, + "ctr": 0.4156, + "ctrPercent": 41.56, + "conversionRate": 0.1242, + "conversionRatePercent": 12.42, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-112", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "26750599", + "metrics": { + "impressions": 2081, + "clicks": 670, + "conversions": 43, + "cost": 0.88, + "ctr": 0.322, + "ctrPercent": 32.2, + "conversionRate": 0.0642, + "conversionRatePercent": 6.42, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-113", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7845418", + "metrics": { + "impressions": 5511, + "clicks": 3072, + "conversions": 104, + "cost": 2.02, + "ctr": 0.5574, + "ctrPercent": 55.74, + "conversionRate": 0.0339, + "conversionRatePercent": 3.39, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-114", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13300118", + "metrics": { + "impressions": 11747, + "clicks": 3219, + "conversions": 140, + "cost": 2.72, + "ctr": 0.274, + "ctrPercent": 27.4, + "conversionRate": 0.0435, + "conversionRatePercent": 4.35, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-115", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "17661707", + "metrics": { + "impressions": 2771, + "clicks": 818, + "conversions": 43, + "cost": 0.84, + "ctr": 0.2952, + "ctrPercent": 29.52, + "conversionRate": 0.0526, + "conversionRatePercent": 5.26, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-116", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "28896342", + "metrics": { + "impressions": 36445, + "clicks": 13012, + "conversions": 996, + "cost": 19.89, + "ctr": 0.357, + "ctrPercent": 35.7, + "conversionRate": 0.0765, + "conversionRatePercent": 7.65, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-117", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "27888153", + "metrics": { + "impressions": 15028, + "clicks": 5264, + "conversions": 155, + "cost": 2.93, + "ctr": 0.3503, + "ctrPercent": 35.03, + "conversionRate": 0.0294, + "conversionRatePercent": 2.94, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-118", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "30676250", + "metrics": { + "impressions": 35243, + "clicks": 9926, + "conversions": 176, + "cost": 3.27, + "ctr": 0.2816, + "ctrPercent": 28.16, + "conversionRate": 0.0177, + "conversionRatePercent": 1.77, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-119", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22419532", + "metrics": { + "impressions": 39020, + "clicks": 11980, + "conversions": 241, + "cost": 4.48, + "ctr": 0.307, + "ctrPercent": 30.7, + "conversionRate": 0.0201, + "conversionRatePercent": 2.01, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-120", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13661597", + "metrics": { + "impressions": 41107, + "clicks": 14403, + "conversions": 448, + "cost": 8.41, + "ctr": 0.3504, + "ctrPercent": 35.04, + "conversionRate": 0.0311, + "conversionRatePercent": 3.11, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-121", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "1632451", + "metrics": { + "impressions": 4179, + "clicks": 1382, + "conversions": 107, + "cost": 2.1, + "ctr": 0.3307, + "ctrPercent": 33.07, + "conversionRate": 0.0774, + "conversionRatePercent": 7.74, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-122", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23852329", + "metrics": { + "impressions": 112773, + "clicks": 36213, + "conversions": 2777, + "cost": 54.44, + "ctr": 0.3211, + "ctrPercent": 32.11, + "conversionRate": 0.0767, + "conversionRatePercent": 7.67, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-123", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "28389117", + "metrics": { + "impressions": 19759, + "clicks": 5956, + "conversions": 217, + "cost": 3.93, + "ctr": 0.3014, + "ctrPercent": 30.14, + "conversionRate": 0.0364, + "conversionRatePercent": 3.64, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-124", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29614011", + "metrics": { + "impressions": 37818, + "clicks": 14525, + "conversions": 830, + "cost": 15.35, + "ctr": 0.3841, + "ctrPercent": 38.41, + "conversionRate": 0.0571, + "conversionRatePercent": 5.71, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-125", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "14118031", + "metrics": { + "impressions": 9778, + "clicks": 4751, + "conversions": 339, + "cost": 6.27, + "ctr": 0.4859, + "ctrPercent": 48.59, + "conversionRate": 0.0714, + "conversionRatePercent": 7.14, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-126", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "9097340", + "metrics": { + "impressions": 5734, + "clicks": 2291, + "conversions": 251, + "cost": 4.83, + "ctr": 0.3995, + "ctrPercent": 39.95, + "conversionRate": 0.1096, + "conversionRatePercent": 10.96, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-127", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "27729624", + "metrics": { + "impressions": 23205, + "clicks": 7636, + "conversions": 510, + "cost": 9.32, + "ctr": 0.3291, + "ctrPercent": 32.91, + "conversionRate": 0.0668, + "conversionRatePercent": 6.68, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-128", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "10686810", + "metrics": { + "impressions": 2888, + "clicks": 1021, + "conversions": 26, + "cost": 0.45, + "ctr": 0.3535, + "ctrPercent": 35.35, + "conversionRate": 0.0255, + "conversionRatePercent": 2.55, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-129", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "30810420", + "metrics": { + "impressions": 9593, + "clicks": 3033, + "conversions": 76, + "cost": 1.32, + "ctr": 0.3162, + "ctrPercent": 31.62, + "conversionRate": 0.0251, + "conversionRatePercent": 2.51, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-130", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5061823", + "metrics": { + "impressions": 5738, + "clicks": 2017, + "conversions": 129, + "cost": 2.34, + "ctr": 0.3515, + "ctrPercent": 35.15, + "conversionRate": 0.064, + "conversionRatePercent": 6.4, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-131", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23330020", + "metrics": { + "impressions": 8636, + "clicks": 3397, + "conversions": 213, + "cost": 3.85, + "ctr": 0.3934, + "ctrPercent": 39.34, + "conversionRate": 0.0627, + "conversionRatePercent": 6.27, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-132", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "4626334", + "metrics": { + "impressions": 5578, + "clicks": 1749, + "conversions": 66, + "cost": 1.16, + "ctr": 0.3136, + "ctrPercent": 31.36, + "conversionRate": 0.0377, + "conversionRatePercent": 3.77, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-133", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "25998435", + "metrics": { + "impressions": 15596, + "clicks": 5307, + "conversions": 248, + "cost": 4.35, + "ctr": 0.3403, + "ctrPercent": 34.03, + "conversionRate": 0.0467, + "conversionRatePercent": 4.67, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-134", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13810178", + "metrics": { + "impressions": 943, + "clicks": 376, + "conversions": 31, + "cost": 0.56, + "ctr": 0.3987, + "ctrPercent": 39.87, + "conversionRate": 0.0824, + "conversionRatePercent": 8.24, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-135", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22451482", + "metrics": { + "impressions": 11991, + "clicks": 4851, + "conversions": 219, + "cost": 3.76, + "ctr": 0.4046, + "ctrPercent": 40.46, + "conversionRate": 0.0451, + "conversionRatePercent": 4.51, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-136", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20530187", + "metrics": { + "impressions": 12494, + "clicks": 4176, + "conversions": 159, + "cost": 2.69, + "ctr": 0.3342, + "ctrPercent": 33.42, + "conversionRate": 0.0381, + "conversionRatePercent": 3.81, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-137", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "15823034", + "metrics": { + "impressions": 5943, + "clicks": 1980, + "conversions": 211, + "cost": 3.84, + "ctr": 0.3332, + "ctrPercent": 33.32, + "conversionRate": 0.1066, + "conversionRatePercent": 10.66, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-138", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "2716294", + "metrics": { + "impressions": 11203, + "clicks": 4598, + "conversions": 197, + "cost": 3.34, + "ctr": 0.4104, + "ctrPercent": 41.04, + "conversionRate": 0.0428, + "conversionRatePercent": 4.28, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-139", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13576407", + "metrics": { + "impressions": 25560, + "clicks": 7438, + "conversions": 235, + "cost": 3.9, + "ctr": 0.291, + "ctrPercent": 29.1, + "conversionRate": 0.0316, + "conversionRatePercent": 3.16, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-140", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7299461", + "metrics": { + "impressions": 15028, + "clicks": 2728, + "conversions": 135, + "cost": 2.28, + "ctr": 0.1815, + "ctrPercent": 18.15, + "conversionRate": 0.0495, + "conversionRatePercent": 4.95, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-141", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5177431", + "metrics": { + "impressions": 17900, + "clicks": 4989, + "conversions": 132, + "cost": 2.17, + "ctr": 0.2787, + "ctrPercent": 27.87, + "conversionRate": 0.0265, + "conversionRatePercent": 2.65, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-142", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "16422824", + "metrics": { + "impressions": 6004, + "clicks": 2321, + "conversions": 135, + "cost": 2.28, + "ctr": 0.3866, + "ctrPercent": 38.66, + "conversionRate": 0.0582, + "conversionRatePercent": 5.82, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-143", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20898399", + "metrics": { + "impressions": 5089, + "clicks": 1257, + "conversions": 84, + "cost": 1.43, + "ctr": 0.247, + "ctrPercent": 24.7, + "conversionRate": 0.0668, + "conversionRatePercent": 6.68, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-144", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29614012", + "metrics": { + "impressions": 12873, + "clicks": 5291, + "conversions": 225, + "cost": 3.71, + "ctr": 0.411, + "ctrPercent": 41.1, + "conversionRate": 0.0425, + "conversionRatePercent": 4.25, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-145", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "7697146", + "metrics": { + "impressions": 2897, + "clicks": 1049, + "conversions": 36, + "cost": 0.58, + "ctr": 0.3621, + "ctrPercent": 36.21, + "conversionRate": 0.0343, + "conversionRatePercent": 3.43, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-146", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29614010", + "metrics": { + "impressions": 12237, + "clicks": 5046, + "conversions": 308, + "cost": 5.11, + "ctr": 0.4124, + "ctrPercent": 41.24, + "conversionRate": 0.061, + "conversionRatePercent": 6.1, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-147", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "27990027", + "metrics": { + "impressions": 13636, + "clicks": 5518, + "conversions": 186, + "cost": 2.97, + "ctr": 0.4047, + "ctrPercent": 40.47, + "conversionRate": 0.0337, + "conversionRatePercent": 3.37, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-148", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "13576416", + "metrics": { + "impressions": 4363, + "clicks": 1862, + "conversions": 127, + "cost": 2.1, + "ctr": 0.4268, + "ctrPercent": 42.68, + "conversionRate": 0.0682, + "conversionRatePercent": 6.82, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-149", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12100671", + "metrics": { + "impressions": 39019, + "clicks": 12752, + "conversions": 419, + "cost": 6.68, + "ctr": 0.3268, + "ctrPercent": 32.68, + "conversionRate": 0.0329, + "conversionRatePercent": 3.29, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-150", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "18836888", + "metrics": { + "impressions": 7084, + "clicks": 1783, + "conversions": 105, + "cost": 1.7, + "ctr": 0.2517, + "ctrPercent": 25.17, + "conversionRate": 0.0589, + "conversionRatePercent": 5.89, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-151", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "9097339", + "metrics": { + "impressions": 20835, + "clicks": 7781, + "conversions": 519, + "cost": 8.48, + "ctr": 0.3735, + "ctrPercent": 37.35, + "conversionRate": 0.0667, + "conversionRatePercent": 6.67, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-152", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23695013", + "metrics": { + "impressions": 13902, + "clicks": 3940, + "conversions": 131, + "cost": 2.06, + "ctr": 0.2834, + "ctrPercent": 28.34, + "conversionRate": 0.0332, + "conversionRatePercent": 3.32, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-153", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20898401", + "metrics": { + "impressions": 3599, + "clicks": 888, + "conversions": 78, + "cost": 1.29, + "ctr": 0.2467, + "ctrPercent": 24.67, + "conversionRate": 0.0878, + "conversionRatePercent": 8.78, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-154", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "9500303", + "metrics": { + "impressions": 11140, + "clicks": 5425, + "conversions": 583, + "cost": 9.84, + "ctr": 0.487, + "ctrPercent": 48.7, + "conversionRate": 0.1075, + "conversionRatePercent": 10.75, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-155", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "14576401", + "metrics": { + "impressions": 15752, + "clicks": 6390, + "conversions": 424, + "cost": 6.83, + "ctr": 0.4057, + "ctrPercent": 40.57, + "conversionRate": 0.0664, + "conversionRatePercent": 6.64, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-156", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "23852343", + "metrics": { + "impressions": 11602, + "clicks": 4851, + "conversions": 485, + "cost": 8.08, + "ctr": 0.4181, + "ctrPercent": 41.81, + "conversionRate": 0.1, + "conversionRatePercent": 10.0, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-157", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29874686", + "metrics": { + "impressions": 7325, + "clicks": 2833, + "conversions": 103, + "cost": 1.6, + "ctr": 0.3868, + "ctrPercent": 38.68, + "conversionRate": 0.0364, + "conversionRatePercent": 3.64, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-158", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5044698", + "metrics": { + "impressions": 98550, + "clicks": 35176, + "conversions": 917, + "cost": 14.0, + "ctr": 0.3569, + "ctrPercent": 35.69, + "conversionRate": 0.0261, + "conversionRatePercent": 2.61, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-159", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22891668", + "metrics": { + "impressions": 16362, + "clicks": 3347, + "conversions": 154, + "cost": 2.39, + "ctr": 0.2046, + "ctrPercent": 20.46, + "conversionRate": 0.046, + "conversionRatePercent": 4.6, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-160", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "10746437", + "metrics": { + "impressions": 1299, + "clicks": 430, + "conversions": 61, + "cost": 1.05, + "ctr": 0.331, + "ctrPercent": 33.1, + "conversionRate": 0.1419, + "conversionRatePercent": 14.19, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-161", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29175063", + "metrics": { + "impressions": 13020, + "clicks": 4208, + "conversions": 140, + "cost": 2.13, + "ctr": 0.3232, + "ctrPercent": 32.32, + "conversionRate": 0.0333, + "conversionRatePercent": 3.33, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-162", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "25391297", + "metrics": { + "impressions": 1067, + "clicks": 325, + "conversions": 20, + "cost": 0.31, + "ctr": 0.3046, + "ctrPercent": 30.46, + "conversionRate": 0.0615, + "conversionRatePercent": 6.15, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-163", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "9042365", + "metrics": { + "impressions": 9071, + "clicks": 3283, + "conversions": 280, + "cost": 4.49, + "ctr": 0.3619, + "ctrPercent": 36.19, + "conversionRate": 0.0853, + "conversionRatePercent": 8.53, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-164", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "21443086", + "metrics": { + "impressions": 17633, + "clicks": 6115, + "conversions": 346, + "cost": 5.36, + "ctr": 0.3468, + "ctrPercent": 34.68, + "conversionRate": 0.0566, + "conversionRatePercent": 5.66, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-165", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "26383495", + "metrics": { + "impressions": 2560, + "clicks": 927, + "conversions": 82, + "cost": 1.3, + "ctr": 0.3621, + "ctrPercent": 36.21, + "conversionRate": 0.0885, + "conversionRatePercent": 8.85, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-166", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "20922679", + "metrics": { + "impressions": 17202, + "clicks": 6378, + "conversions": 382, + "cost": 5.81, + "ctr": 0.3708, + "ctrPercent": 37.08, + "conversionRate": 0.0599, + "conversionRatePercent": 5.99, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-167", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "31129939", + "metrics": { + "impressions": 5452, + "clicks": 1662, + "conversions": 97, + "cost": 1.47, + "ctr": 0.3048, + "ctrPercent": 30.48, + "conversionRate": 0.0584, + "conversionRatePercent": 5.84, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-168", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "17686795", + "metrics": { + "impressions": 9671, + "clicks": 3602, + "conversions": 187, + "cost": 2.81, + "ctr": 0.3725, + "ctrPercent": 37.25, + "conversionRate": 0.0519, + "conversionRatePercent": 5.19, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-169", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "6697150", + "metrics": { + "impressions": 10818, + "clicks": 3334, + "conversions": 168, + "cost": 2.52, + "ctr": 0.3082, + "ctrPercent": 30.82, + "conversionRate": 0.0504, + "conversionRatePercent": 5.04, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-170", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "12491647", + "metrics": { + "impressions": 10794, + "clicks": 3742, + "conversions": 52, + "cost": 0.75, + "ctr": 0.3467, + "ctrPercent": 34.67, + "conversionRate": 0.0139, + "conversionRatePercent": 1.39, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-171", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "5612724", + "metrics": { + "impressions": 7141, + "clicks": 2381, + "conversions": 176, + "cost": 2.69, + "ctr": 0.3334, + "ctrPercent": 33.34, + "conversionRate": 0.0739, + "conversionRatePercent": 7.39, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-172", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "24419530", + "metrics": { + "impressions": 4900, + "clicks": 2134, + "conversions": 119, + "cost": 1.78, + "ctr": 0.4355, + "ctrPercent": 43.55, + "conversionRate": 0.0558, + "conversionRatePercent": 5.58, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-173", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22445172", + "metrics": { + "impressions": 11242, + "clicks": 4059, + "conversions": 129, + "cost": 1.88, + "ctr": 0.3611, + "ctrPercent": 36.11, + "conversionRate": 0.0318, + "conversionRatePercent": 3.18, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-174", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "27872610", + "metrics": { + "impressions": 3139, + "clicks": 1162, + "conversions": 63, + "cost": 0.92, + "ctr": 0.3702, + "ctrPercent": 37.02, + "conversionRate": 0.0542, + "conversionRatePercent": 5.42, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-175", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "22723823", + "metrics": { + "impressions": 15298, + "clicks": 5858, + "conversions": 139, + "cost": 1.97, + "ctr": 0.3829, + "ctrPercent": 38.29, + "conversionRate": 0.0237, + "conversionRatePercent": 2.37, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-176", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "26998433", + "metrics": { + "impressions": 6334, + "clicks": 2462, + "conversions": 85, + "cost": 1.21, + "ctr": 0.3887, + "ctrPercent": 38.87, + "conversionRate": 0.0345, + "conversionRatePercent": 3.45, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-177", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "28385762", + "metrics": { + "impressions": 4873, + "clicks": 1398, + "conversions": 38, + "cost": 0.54, + "ctr": 0.2869, + "ctrPercent": 28.69, + "conversionRate": 0.0272, + "conversionRatePercent": 2.72, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-178", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "24389111", + "metrics": { + "impressions": 56560, + "clicks": 18010, + "conversions": 1442, + "cost": 21.32, + "ctr": 0.3184, + "ctrPercent": 31.84, + "conversionRate": 0.0801, + "conversionRatePercent": 8.01, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-179", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "19129839", + "metrics": { + "impressions": 90154, + "clicks": 27237, + "conversions": 2728, + "cost": 41.17, + "ctr": 0.3021, + "ctrPercent": 30.21, + "conversionRate": 0.1002, + "conversionRatePercent": 10.02, + "costPerConversion": 0.02 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "CRITEO-AD-180", + "sampleType": "ad_low_conversion", + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": "29140152", + "metrics": { + "impressions": 6322, + "clicks": 2763, + "conversions": 84, + "cost": 1.18, + "ctr": 0.437, + "ctrPercent": 43.7, + "conversionRate": 0.0304, + "conversionRatePercent": 3.04, + "costPerConversion": 0.01 + }, + "expectedSignals": [ + "ad_spend_risk", + "low_conversion_risk" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget" + ] + }, + { + "sampleId": "UCI-REFUND-001", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-12-09", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 7, + "cancelQuantity": 81030, + "cancelAmount": 168789.07 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-002", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-18", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 19, + "cancelQuantity": 74314, + "cancelAmount": 77297.25 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-003", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-07", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 42, + "cancelQuantity": 370, + "cancelAmount": 54559.15 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-004", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-10", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 42, + "cancelQuantity": 2907, + "cancelAmount": 39685.28 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-005", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-05", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 35, + "cancelQuantity": 1137, + "cancelAmount": 33523.65 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-006", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-12-05", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 26, + "cancelQuantity": 499, + "cancelAmount": 30737.74 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-007", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-04-18", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 71, + "cancelQuantity": 9186, + "cancelAmount": 23531.82 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-008", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-07", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 39, + "cancelQuantity": 3656, + "cancelAmount": 15737.64 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-009", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-03", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 67, + "cancelQuantity": 725, + "cancelAmount": 15547.15 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-010", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-09-15", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 43, + "cancelQuantity": 138, + "cancelAmount": 15230.59 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-011", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-16", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 24, + "cancelQuantity": 1536, + "cancelAmount": 14371.51 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-012", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-11", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 47, + "cancelQuantity": 8420, + "cancelAmount": 14268.34 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-013", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-02-21", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 47, + "cancelQuantity": 130, + "cancelAmount": 12243.23 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-014", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-24", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 55, + "cancelQuantity": 233, + "cancelAmount": 11942.46 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-015", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-02", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 33, + "cancelQuantity": 81, + "cancelAmount": 11594.33 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-016", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-18", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 40, + "cancelQuantity": 296, + "cancelAmount": 11401.33 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-017", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-07-13", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 8, + "cancelQuantity": 94, + "cancelAmount": 11029.89 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-018", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-07-18", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 67, + "cancelQuantity": 939, + "cancelAmount": 10388.34 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-019", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-24", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 13, + "cancelQuantity": 156, + "cancelAmount": 10354.93 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-020", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-24", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 122, + "cancelQuantity": 4952, + "cancelAmount": 10245.54 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-021", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-31", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 41, + "cancelQuantity": 16871, + "cancelAmount": 8893.7 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-022", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-31", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 116, + "cancelQuantity": 5206, + "cancelAmount": 8722.6 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-023", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-27", + "entityId": "France", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 2, + "cancelAmount": 8322.12 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-024", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-06", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 233, + "cancelQuantity": 5560, + "cancelAmount": 7486.01 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-025", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-07", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 67, + "cancelQuantity": 659, + "cancelAmount": 6252.68 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-026", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-04-04", + "entityId": "Singapore", + "metrics": { + "cancelLineCount": 5, + "cancelQuantity": 5, + "cancelAmount": 6090.84 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-027", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-19", + "entityId": "Singapore", + "metrics": { + "cancelLineCount": 2, + "cancelQuantity": 2, + "cancelAmount": 6068.06 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-028", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-07-20", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 22, + "cancelQuantity": 942, + "cancelAmount": 6002.83 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-029", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-09-21", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 97, + "cancelQuantity": 2741, + "cancelAmount": 5586.71 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-030", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-04", + "entityId": "EIRE", + "metrics": { + "cancelLineCount": 31, + "cancelQuantity": 2270, + "cancelAmount": 4345.1 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-031", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-17", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 14, + "cancelQuantity": 2142, + "cancelAmount": 4097.84 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-032", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-28", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 25, + "cancelQuantity": 398, + "cancelAmount": 3949.62 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-033", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-10", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 65, + "cancelQuantity": 774, + "cancelAmount": 3906.69 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-034", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-17", + "entityId": "Spain", + "metrics": { + "cancelLineCount": 15, + "cancelQuantity": 1006, + "cancelAmount": 3528.34 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-035", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-09", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 24, + "cancelQuantity": 2028, + "cancelAmount": 3510.59 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-036", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-08", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 34, + "cancelQuantity": 306, + "cancelAmount": 3380.6 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-037", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-11", + "entityId": "EIRE", + "metrics": { + "cancelLineCount": 2, + "cancelQuantity": 2, + "cancelAmount": 3374.34 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-038", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-31", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 99, + "cancelQuantity": 679, + "cancelAmount": 3331.82 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-039", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-20", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 22, + "cancelQuantity": 1767, + "cancelAmount": 3141.58 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-040", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-20", + "entityId": "EIRE", + "metrics": { + "cancelLineCount": 2, + "cancelQuantity": 2, + "cancelAmount": 3133.12 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-041", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-23", + "entityId": "Portugal", + "metrics": { + "cancelLineCount": 4, + "cancelQuantity": 4, + "cancelAmount": 3056.68 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-042", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-18", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 74, + "cancelQuantity": 716, + "cancelAmount": 3018.85 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-043", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-02-15", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 19, + "cancelQuantity": 186, + "cancelAmount": 3015.16 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-044", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-15", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 35, + "cancelQuantity": 742, + "cancelAmount": 2958.81 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-045", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-09-29", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 45, + "cancelQuantity": 1316, + "cancelAmount": 2935.87 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-046", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-09-19", + "entityId": "Hong Kong", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 1, + "cancelAmount": 2653.95 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-047", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-24", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 61, + "cancelQuantity": 2525, + "cancelAmount": 2636.6 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-048", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-13", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 16, + "cancelQuantity": 100, + "cancelAmount": 2602.47 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-049", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-15", + "entityId": "Hong Kong", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 1, + "cancelAmount": 2583.76 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-050", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-02-25", + "entityId": "EIRE", + "metrics": { + "cancelLineCount": 6, + "cancelQuantity": 672, + "cancelAmount": 2548.8 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-051", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-04", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 95, + "cancelQuantity": 1851, + "cancelAmount": 2368.46 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-052", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-02-11", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 79, + "cancelQuantity": 696, + "cancelAmount": 2344.27 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-053", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-12-06", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 91, + "cancelQuantity": 1365, + "cancelAmount": 2331.26 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-054", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-09-22", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 72, + "cancelQuantity": 961, + "cancelAmount": 2259.96 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-055", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-10", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 54, + "cancelQuantity": 2083, + "cancelAmount": 2255.86 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-056", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-03", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 22, + "cancelQuantity": 1345, + "cancelAmount": 2135.34 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-057", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-13", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 64, + "cancelQuantity": 1910, + "cancelAmount": 2062.33 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-058", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-04-08", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 56, + "cancelQuantity": 3983, + "cancelAmount": 1976.24 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-059", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-17", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 8, + "cancelQuantity": 889, + "cancelAmount": 1866.14 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-060", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-09-16", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 22, + "cancelQuantity": 810, + "cancelAmount": 1815.63 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-061", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-07-21", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 74, + "cancelQuantity": 341, + "cancelAmount": 1814.82 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-062", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-14", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 56, + "cancelQuantity": 1622, + "cancelAmount": 1801.21 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-063", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-09", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 10, + "cancelQuantity": 398, + "cancelAmount": 1779.65 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-064", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-10", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 73, + "cancelQuantity": 858, + "cancelAmount": 1778.01 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-065", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-27", + "entityId": "Spain", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 1, + "cancelAmount": 1715.85 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-066", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-07", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 56, + "cancelQuantity": 317, + "cancelAmount": 1694.9 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-067", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-22", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 5, + "cancelQuantity": 169, + "cancelAmount": 1673.05 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-068", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-06", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 53, + "cancelQuantity": 659, + "cancelAmount": 1661.76 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-069", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-22", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 47, + "cancelQuantity": 718, + "cancelAmount": 1643.02 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-070", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-07", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 28, + "cancelQuantity": 685, + "cancelAmount": 1603.45 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-071", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-04-04", + "entityId": "Japan", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 624, + "cancelAmount": 1591.2 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-072", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-12", + "entityId": "USA", + "metrics": { + "cancelLineCount": 101, + "cancelQuantity": 1228, + "cancelAmount": 1579.51 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-073", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-23", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 46, + "cancelQuantity": 2050, + "cancelAmount": 1534.49 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-074", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-16", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 44, + "cancelQuantity": 3790, + "cancelAmount": 1531.47 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-075", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-02", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 42, + "cancelQuantity": 10321, + "cancelAmount": 1516.6 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-076", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-02-10", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 63, + "cancelQuantity": 462, + "cancelAmount": 1468.92 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-077", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-28", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 90, + "cancelQuantity": 670, + "cancelAmount": 1443.17 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-078", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-12", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 36, + "cancelQuantity": 1691, + "cancelAmount": 1433.4 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-079", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-04-21", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 16, + "cancelQuantity": 141, + "cancelAmount": 1417.03 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-080", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-25", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 51, + "cancelQuantity": 303, + "cancelAmount": 1368.58 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-081", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-03", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 42, + "cancelQuantity": 1641, + "cancelAmount": 1323.25 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-082", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-19", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 57, + "cancelQuantity": 562, + "cancelAmount": 1228.7 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-083", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-27", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 48, + "cancelQuantity": 1554, + "cancelAmount": 1215.12 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-084", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-04-01", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 30, + "cancelQuantity": 1150, + "cancelAmount": 1210.27 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-085", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-31", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 33, + "cancelQuantity": 838, + "cancelAmount": 1190.46 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-086", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-14", + "entityId": "Sweden", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 240, + "cancelAmount": 1188.0 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-087", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-08", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 74, + "cancelQuantity": 381, + "cancelAmount": 1187.39 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-088", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-17", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 52, + "cancelQuantity": 239, + "cancelAmount": 1185.8 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-089", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-09-23", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 50, + "cancelQuantity": 689, + "cancelAmount": 1171.12 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-090", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-21", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 38, + "cancelQuantity": 1771, + "cancelAmount": 1150.97 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-091", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-04-05", + "entityId": "France", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 1, + "cancelAmount": 1136.3 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-092", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-14", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 69, + "cancelQuantity": 377, + "cancelAmount": 1135.84 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-093", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-06", + "entityId": "Spain", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 1, + "cancelAmount": 1126.0 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-094", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-10", + "entityId": "EIRE", + "metrics": { + "cancelLineCount": 1, + "cancelQuantity": 1, + "cancelAmount": 1121.18 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-095", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-28", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 12, + "cancelQuantity": 133, + "cancelAmount": 1119.77 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-096", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-21", + "entityId": "EIRE", + "metrics": { + "cancelLineCount": 40, + "cancelQuantity": 565, + "cancelAmount": 1114.84 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-097", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-10", + "entityId": "Germany", + "metrics": { + "cancelLineCount": 5, + "cancelQuantity": 23, + "cancelAmount": 1046.86 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-098", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-17", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 53, + "cancelQuantity": 403, + "cancelAmount": 1043.99 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-099", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-04", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 23, + "cancelQuantity": 738, + "cancelAmount": 1035.6 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-100", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-25", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 48, + "cancelQuantity": 794, + "cancelAmount": 1028.7 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-101", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-07-14", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 69, + "cancelQuantity": 3972, + "cancelAmount": 1007.82 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-102", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-03", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 37, + "cancelQuantity": 947, + "cancelAmount": 1006.52 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-103", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-09", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 82, + "cancelQuantity": 2278, + "cancelAmount": 999.6 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-104", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-10-28", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 25, + "cancelQuantity": 316, + "cancelAmount": 997.73 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-105", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-07-07", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 31, + "cancelQuantity": 796, + "cancelAmount": 997.72 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-106", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-20", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 48, + "cancelQuantity": 408, + "cancelAmount": 986.42 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-107", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-06", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 52, + "cancelQuantity": 282, + "cancelAmount": 974.33 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-108", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-11-10", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 65, + "cancelQuantity": 1134, + "cancelAmount": 968.21 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-109", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-23", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 23, + "cancelQuantity": 465, + "cancelAmount": 963.81 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-110", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-21", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 45, + "cancelQuantity": 5864, + "cancelAmount": 939.52 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-111", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-30", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 10, + "cancelQuantity": 638, + "cancelAmount": 932.76 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-112", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-08-09", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 29, + "cancelQuantity": 647, + "cancelAmount": 921.69 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-113", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2010-12-06", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 54, + "cancelQuantity": 526, + "cancelAmount": 919.28 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-114", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-26", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 41, + "cancelQuantity": 291, + "cancelAmount": 907.32 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-115", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-28", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 44, + "cancelQuantity": 2292, + "cancelAmount": 902.68 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-116", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-09", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 30, + "cancelQuantity": 2076, + "cancelAmount": 858.35 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-117", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-05-23", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 66, + "cancelQuantity": 1769, + "cancelAmount": 853.6 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-118", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-06-20", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 35, + "cancelQuantity": 1194, + "cancelAmount": 843.12 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-119", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-03-01", + "entityId": "Norway", + "metrics": { + "cancelLineCount": 3, + "cancelQuantity": 3, + "cancelAmount": 840.3 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "UCI-REFUND-120", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": "2011-01-11", + "entityId": "United Kingdom", + "metrics": { + "cancelLineCount": 49, + "cancelQuantity": 365, + "cancelAmount": 838.46 + }, + "expectedSignals": [ + "after_sales_risk", + "refund_proxy_increase" + ], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute" + ] + }, + { + "sampleId": "STORE-EVENT-001", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-03-02", + "entityId": "Manta", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Manta", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-002", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-04-01", + "entityId": "Cotopaxi", + "metrics": { + "eventType": "Holiday", + "locale": "Regional", + "description": "Provincializacion de Cotopaxi", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-003", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-04-12", + "entityId": "Cuenca", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Cuenca", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-004", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-04-14", + "entityId": "Libertad", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Libertad", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-005", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-04-21", + "entityId": "Riobamba", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Riobamba", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-006", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-05-12", + "entityId": "Puyo", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion del Puyo", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-007", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-06-23", + "entityId": "Guaranda", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Guaranda", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-008", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-06-25", + "entityId": "Imbabura", + "metrics": { + "eventType": "Holiday", + "locale": "Regional", + "description": "Provincializacion de Imbabura", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-009", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-06-25", + "entityId": "Latacunga", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Latacunga", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-010", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-06-25", + "entityId": "Machala", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Machala", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-011", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-07-03", + "entityId": "Santo Domingo", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Santo Domingo", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-012", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-07-03", + "entityId": "El Carmen", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de El Carmen", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-013", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-07-23", + "entityId": "Cayambe", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Cayambe", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-014", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-08-05", + "entityId": "Esmeraldas", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Esmeraldas", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-015", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-08-10", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Primer Grito de Independencia", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-016", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-08-15", + "entityId": "Riobamba", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Riobamba", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-017", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-08-24", + "entityId": "Ambato", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Ambato", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-018", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-09-28", + "entityId": "Ibarra", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Ibarra", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-019", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-10-07", + "entityId": "Quevedo", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Quevedo", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-020", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-10-09", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Independencia de Guayaquil", + "transferred": "True" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-021", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-10-12", + "entityId": "Ecuador", + "metrics": { + "eventType": "Transfer", + "locale": "National", + "description": "Traslado Independencia de Guayaquil", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-022", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-11-02", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Dia de Difuntos", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-023", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-11-03", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Independencia de Cuenca", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-024", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-11-06", + "entityId": "Santo Domingo de los Tsachilas", + "metrics": { + "eventType": "Holiday", + "locale": "Regional", + "description": "Provincializacion de Santo Domingo", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-025", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-11-07", + "entityId": "Santa Elena", + "metrics": { + "eventType": "Holiday", + "locale": "Regional", + "description": "Provincializacion Santa Elena", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-026", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-11-10", + "entityId": "Guaranda", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Independencia de Guaranda", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-027", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-11-11", + "entityId": "Latacunga", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Independencia de Latacunga", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-028", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-11-12", + "entityId": "Ambato", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Independencia de Ambato", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-029", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-05", + "entityId": "Quito", + "metrics": { + "eventType": "Additional", + "locale": "Local", + "description": "Fundacion de Quito-1", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-030", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-06", + "entityId": "Quito", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Quito", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-031", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-08", + "entityId": "Loja", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Loja", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-032", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-21", + "entityId": "Ecuador", + "metrics": { + "eventType": "Additional", + "locale": "National", + "description": "Navidad-4", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-033", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-22", + "entityId": "Salinas", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Salinas", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-034", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-22", + "entityId": "Ecuador", + "metrics": { + "eventType": "Additional", + "locale": "National", + "description": "Navidad-3", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-035", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-23", + "entityId": "Ecuador", + "metrics": { + "eventType": "Additional", + "locale": "National", + "description": "Navidad-2", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-036", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-24", + "entityId": "Ecuador", + "metrics": { + "eventType": "Bridge", + "locale": "National", + "description": "Puente Navidad", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-037", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-24", + "entityId": "Ecuador", + "metrics": { + "eventType": "Additional", + "locale": "National", + "description": "Navidad-1", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-038", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-25", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Navidad", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-039", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-26", + "entityId": "Ecuador", + "metrics": { + "eventType": "Additional", + "locale": "National", + "description": "Navidad+1", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-040", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-31", + "entityId": "Ecuador", + "metrics": { + "eventType": "Bridge", + "locale": "National", + "description": "Puente Primer dia del ano", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-041", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2012-12-31", + "entityId": "Ecuador", + "metrics": { + "eventType": "Additional", + "locale": "National", + "description": "Primer dia del ano-1", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-042", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-01-01", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Primer dia del ano", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-043", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-01-05", + "entityId": "Ecuador", + "metrics": { + "eventType": "Work Day", + "locale": "National", + "description": "Recupero puente Navidad", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-044", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-01-12", + "entityId": "Ecuador", + "metrics": { + "eventType": "Work Day", + "locale": "National", + "description": "Recupero puente primer dia del ano", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-045", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-02-11", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Carnaval", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-046", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-02-12", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Carnaval", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-047", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-03-02", + "entityId": "Manta", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Manta", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-048", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-04-01", + "entityId": "Cotopaxi", + "metrics": { + "eventType": "Holiday", + "locale": "Regional", + "description": "Provincializacion de Cotopaxi", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-049", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-04-12", + "entityId": "Cuenca", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Cuenca", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-050", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-04-14", + "entityId": "Libertad", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Libertad", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-051", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-04-21", + "entityId": "Riobamba", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Riobamba", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-052", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-04-29", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Viernes Santo", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-053", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-05-01", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Dia del Trabajo", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-054", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-05-11", + "entityId": "Ecuador", + "metrics": { + "eventType": "Additional", + "locale": "National", + "description": "Dia de la Madre-1", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-055", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-05-12", + "entityId": "Puyo", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion del Puyo", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-056", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-05-12", + "entityId": "Ecuador", + "metrics": { + "eventType": "Event", + "locale": "National", + "description": "Dia de la Madre", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-057", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-05-24", + "entityId": "Ecuador", + "metrics": { + "eventType": "Holiday", + "locale": "National", + "description": "Batalla de Pichincha", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-058", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-06-23", + "entityId": "Guaranda", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Cantonizacion de Guaranda", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-059", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-06-25", + "entityId": "Imbabura", + "metrics": { + "eventType": "Holiday", + "locale": "Regional", + "description": "Provincializacion de Imbabura", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + }, + { + "sampleId": "STORE-EVENT-060", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": "2013-06-25", + "entityId": "Machala", + "metrics": { + "eventType": "Holiday", + "locale": "Local", + "description": "Fundacion de Machala", + "transferred": "False" + }, + "expectedSignals": [ + "external_event_context" + ], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review" + ] + } +] diff --git a/docs/evaluation/resume-business-samples.json b/docs/evaluation/resume-business-samples.json new file mode 100644 index 0000000..24a8b33 --- /dev/null +++ b/docs/evaluation/resume-business-samples.json @@ -0,0 +1,4087 @@ +[ + { + "sampleId": "RBS-001", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-002", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-003", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-004", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-005", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-006", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-007", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-008", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-009", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-010", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-011", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-012", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-013", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-014", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-015", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-016", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-017", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-018", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-019", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-020", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-021", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-022", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-023", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-024", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-025", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-026", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-027", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-028", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-029", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-030", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-031", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-032", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-033", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-034", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-035", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-036", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-037", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-038", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-039", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-040", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-041", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-042", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-043", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-044", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-045", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-046", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-047", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-048", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-049", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-050", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-051", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-052", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-053", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-054", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-055", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-056", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-057", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-058", + "sampleType": "order_anomaly", + "shopId": 1, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-059", + "sampleType": "order_anomaly", + "shopId": 2, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-060", + "sampleType": "order_anomaly", + "shopId": 3, + "expectedSignals": [ + "order_count_drop", + "gmv_drop" + ], + "recommendedTools": [ + "order.query_summary", + "order.query_detail" + ] + }, + { + "sampleId": "RBS-061", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-062", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-063", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-064", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-065", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-066", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-067", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-068", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-069", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-070", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-071", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-072", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-073", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-074", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-075", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-076", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-077", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-078", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-079", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-080", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-081", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-082", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-083", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-084", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-085", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-086", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-087", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-088", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-089", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-090", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-091", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-092", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-093", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-094", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-095", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-096", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-097", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-098", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-099", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-100", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-101", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-102", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-103", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-104", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-105", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-106", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-107", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-108", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-109", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-110", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-111", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-112", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-113", + "sampleType": "refund_increase", + "shopId": 2, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-114", + "sampleType": "refund_increase", + "shopId": 3, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-115", + "sampleType": "refund_increase", + "shopId": 1, + "expectedSignals": [ + "refund_rate_increase", + "high_value_canceled_order" + ], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative" + ] + }, + { + "sampleId": "RBS-116", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-117", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-118", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-119", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-120", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-121", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-122", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-123", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-124", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-125", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-126", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-127", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-128", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-129", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-130", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-131", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-132", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-133", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-134", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-135", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-136", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-137", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-138", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-139", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-140", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-141", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-142", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-143", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-144", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-145", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-146", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-147", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-148", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-149", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-150", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-151", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-152", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-153", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-154", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-155", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-156", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-157", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-158", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-159", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-160", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-161", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-162", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-163", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-164", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-165", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-166", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-167", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-168", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-169", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-170", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-171", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-172", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-173", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-174", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-175", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-176", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-177", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-178", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-179", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-180", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-181", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-182", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-183", + "sampleType": "low_score_comment", + "shopId": 2, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-184", + "sampleType": "low_score_comment", + "shopId": 3, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-185", + "sampleType": "low_score_comment", + "shopId": 1, + "expectedSignals": [ + "negative_comment", + "delivery_delay_topic" + ], + "recommendedTools": [ + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft" + ] + }, + { + "sampleId": "RBS-186", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-187", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-188", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-189", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-190", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-191", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-192", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-193", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-194", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-195", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-196", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-197", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-198", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-199", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-200", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-201", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-202", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-203", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-204", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-205", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-206", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-207", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-208", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-209", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-210", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-211", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-212", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-213", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-214", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-215", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-216", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-217", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-218", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-219", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-220", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-221", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-222", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-223", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-224", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-225", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-226", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-227", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-228", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-229", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-230", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-231", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-232", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-233", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-234", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-235", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-236", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-237", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-238", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-239", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-240", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-241", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-242", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-243", + "sampleType": "low_click_product", + "shopId": 1, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-244", + "sampleType": "low_click_product", + "shopId": 2, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-245", + "sampleType": "low_click_product", + "shopId": 3, + "expectedSignals": [ + "low_ctr", + "weak_title_keyword" + ], + "recommendedTools": [ + "product.query_low_click", + "product.optimize_title", + "product.update_title" + ] + }, + { + "sampleId": "RBS-246", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-247", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-248", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-249", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-250", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-251", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-252", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-253", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-254", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-255", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-256", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-257", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-258", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-259", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-260", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-261", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-262", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-263", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-264", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-265", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-266", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-267", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-268", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-269", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-270", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-271", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-272", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-273", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-274", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-275", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-276", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-277", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-278", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-279", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-280", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-281", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-282", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-283", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-284", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-285", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-286", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-287", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-288", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-289", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-290", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-291", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-292", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-293", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-294", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-295", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-296", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-297", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-298", + "sampleType": "low_roi_campaign", + "shopId": 2, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-299", + "sampleType": "low_roi_campaign", + "shopId": 3, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + }, + { + "sampleId": "RBS-300", + "sampleType": "low_roi_campaign", + "shopId": 1, + "expectedSignals": [ + "low_roi", + "high_spend_low_conversion" + ], + "recommendedTools": [ + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget" + ] + } +] diff --git a/docs/evaluation/shopops-operation-report-sample.xlsx b/docs/evaluation/shopops-operation-report-sample.xlsx new file mode 100644 index 0000000..0110634 Binary files /dev/null and b/docs/evaluation/shopops-operation-report-sample.xlsx differ diff --git "a/docs/\346\234\254\345\234\260\345\274\200\345\217\221\345\220\257\345\212\250\346\214\207\345\215\227.md" "b/docs/\346\234\254\345\234\260\345\274\200\345\217\221\345\220\257\345\212\250\346\214\207\345\215\227.md" index 5f9e996..1ed6ba8 100644 --- "a/docs/\346\234\254\345\234\260\345\274\200\345\217\221\345\220\257\345\212\250\346\214\207\345\215\227.md" +++ "b/docs/\346\234\254\345\234\260\345\274\200\345\217\221\345\220\257\345\212\250\346\214\207\345\215\227.md" @@ -51,13 +51,19 @@ MySQL 容器只负责创建空数据库。表结构和样例数据由后端启 shopops-admin/src/main/resources/db/migration ``` -## 3. memory 模式启动 +## 3. JDBC 持久化模式启动 -默认模式是 `memory`,不依赖 MySQL 数据,适合快速验证主链路。 +默认模式是 `jdbc`,任务、报告、工具日志、审批和审计记录会保存到 MySQL,服务重启后不会丢失。 ```powershell mvn clean install -DskipTests -mvn -pl shopops-admin spring-boot:run +mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.profiles=dev" +``` + +如果只想做一次性临时演示,可以显式切到 `memory`: + +```powershell +mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--shopops.persistence=memory --shopops.flyway.enabled=false" ``` ## 4. dev JDBC 模式启动 diff --git a/scripts/check-shopops.ps1 b/scripts/check-shopops.ps1 new file mode 100644 index 0000000..129483a --- /dev/null +++ b/scripts/check-shopops.ps1 @@ -0,0 +1,170 @@ +param( + [string]$BaseUrl = "", + [int]$Port = 8080, + [switch]$Json, + [switch]$SkipHttp +) + +$ErrorActionPreference = "Stop" +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +$workspaceRoot = Split-Path -Parent $PSScriptRoot +Set-Location $workspaceRoot + +if ([string]::IsNullOrWhiteSpace($BaseUrl)) { + $BaseUrl = "http://localhost:$Port" +} +$BaseUrl = $BaseUrl.TrimEnd("/") + +$headers = @{ + "X-Tenant-Id" = "1" + "X-Shop-Id" = "1" + "X-User-Id" = "1" + "X-User-Name" = "admin" + "X-User-Roles" = "ADMIN" +} + +$results = New-Object System.Collections.Generic.List[object] + +function Add-Result { + param( + [string]$Name, + [string]$Status, + [string]$Detail + ) + $results.Add([PSCustomObject]@{ + name = $Name + status = $Status + detail = $Detail + }) +} + +function Test-File { + param( + [string]$Name, + [string]$Path + ) + if (Test-Path $Path) { + $size = (Get-Item $Path).Length + Add-Result -Name $Name -Status "PASS" -Detail "$Path ($size bytes)" + } else { + Add-Result -Name $Name -Status "FAIL" -Detail "Missing $Path" + } +} + +function Test-Http { + param( + [string]$Name, + [string]$Path, + [scriptblock]$Validate + ) + $url = "$BaseUrl$Path" + try { + $response = Invoke-WebRequest -Uri $url -Headers $headers -UseBasicParsing -TimeoutSec 5 + $body = $response.Content + if ($response.StatusCode -lt 200 -or $response.StatusCode -ge 300) { + Add-Result -Name $Name -Status "FAIL" -Detail "$url returned HTTP $($response.StatusCode)" + return + } + if ($Validate) { + $validation = & $Validate $body + if ($validation -ne "OK") { + Add-Result -Name $Name -Status "FAIL" -Detail "$url validation failed: $validation" + return + } + } + Add-Result -Name $Name -Status "PASS" -Detail "$url" + } catch { + Add-Result -Name $Name -Status "FAIL" -Detail "$url error: $($_.Exception.Message)" + } +} + +function Test-ApiEnvelope { + param( + [string]$Name, + [string]$Path, + [scriptblock]$ValidateData + ) + Test-Http -Name $Name -Path $Path -Validate { + param($Body) + try { + $json = $Body | ConvertFrom-Json + } catch { + return "response is not JSON" + } + if ($json.code -ne 200) { + return "code=$($json.code)" + } + if ($ValidateData) { + return & $ValidateData $json.data + } + return "OK" + } +} + +if (-not $Json) { + Write-Host "ShopOps health check" + Write-Host "Workspace: $workspaceRoot" + Write-Host "BaseUrl: $BaseUrl" + Write-Host "" +} + +Test-File -Name "Olist order summary data" -Path "docs/demo-data/olist/order-summary-olist.json" +Test-File -Name "Olist negative comments data" -Path "docs/demo-data/olist/negative-comments-olist.json" +Test-File -Name "Olist product candidates data" -Path "docs/demo-data/olist/product-candidates-olist.json" +Test-File -Name "Feishu batch evidence" -Path "docs/evaluation/feishu-webhook-batch-summary.json" +Test-File -Name "Excel export evidence" -Path "docs/evaluation/shopops-operation-report-sample.xlsx" + +if (-not $SkipHttp) { + Test-Http -Name "Workbench page" -Path "/admin/workbench.html" -Validate { + param($Body) + if ($Body.Contains("/admin/assets/workbench-")) { return "OK" } + return "missing workbench asset reference" + } + Test-ApiEnvelope -Name "System health API" -Path "/api/system/health" -ValidateData { + param($Data) + if ($null -eq $Data) { return "missing data" } + return "OK" + } + Test-ApiEnvelope -Name "MCP tool catalog API" -Path "/api/tools" -ValidateData { + param($Data) + if ($Data.Count -lt 18) { return "expected at least 18 tools, got $($Data.Count)" } + return "OK" + } + Test-ApiEnvelope -Name "Agent task list API" -Path "/api/agent/tasks?pageNum=1&pageSize=1" -ValidateData { + param($Data) + if ($null -eq $Data) { return "missing data" } + return "OK" + } + Test-ApiEnvelope -Name "Report list API" -Path "/api/reports?pageNum=1&pageSize=1" -ValidateData { + param($Data) + if ($null -eq $Data) { return "missing data" } + return "OK" + } +} + +$failed = @($results | Where-Object { $_.status -ne "PASS" }) + +if ($Json) { + [PSCustomObject]@{ + generatedAt = (Get-Date).ToString("o") + baseUrl = $BaseUrl + passed = $failed.Count -eq 0 + total = $results.Count + failed = $failed.Count + results = $results + } | ConvertTo-Json -Depth 10 +} else { + foreach ($result in $results) { + $prefix = if ($result.status -eq "PASS") { "[PASS]" } else { "[FAIL]" } + Write-Host "$prefix $($result.name) - $($result.detail)" + } + Write-Host "" + if ($failed.Count -eq 0) { + Write-Host "ShopOps health check passed ($($results.Count)/$($results.Count))." + } else { + Write-Host "ShopOps health check failed ($($failed.Count)/$($results.Count))." + exit 1 + } +} diff --git a/scripts/generate-olist-real-baseline.py b/scripts/generate-olist-real-baseline.py new file mode 100644 index 0000000..3729eba --- /dev/null +++ b/scripts/generate-olist-real-baseline.py @@ -0,0 +1,427 @@ +from __future__ import annotations + +import csv +import json +from collections import Counter, defaultdict +from datetime import datetime, timedelta +from decimal import Decimal, ROUND_HALF_UP +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +DATA_DIR = ROOT / "data" / "archive" +DOCS = ROOT / "docs" +EVAL_DIR = DOCS / "evaluation" + + +def decimal(value: object) -> Decimal: + if value in (None, ""): + return Decimal("0") + return Decimal(str(value)) + + +def money(value: Decimal) -> float: + return float(value.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)) + + +def ratio(value: Decimal) -> float: + return float(value.quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP)) + + +def parse_date(value: str) -> str: + return value[:10] + + +def read_csv(name: str) -> list[dict[str, str]]: + with (DATA_DIR / name).open(encoding="utf-8-sig", newline="") as handle: + return list(csv.DictReader(handle)) + + +def main() -> None: + EVAL_DIR.mkdir(parents=True, exist_ok=True) + generated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + orders = read_csv("olist_orders_dataset.csv") + payments = read_csv("olist_order_payments_dataset.csv") + items = read_csv("olist_order_items_dataset.csv") + reviews = read_csv("olist_order_reviews_dataset.csv") + products = read_csv("olist_products_dataset.csv") + translations = read_csv("product_category_name_translation.csv") + + payment_by_order = defaultdict(lambda: Decimal("0")) + for row in payments: + payment_by_order[row["order_id"]] += decimal(row["payment_value"]) + + order_by_id = {} + daily = defaultdict(lambda: {"gmv": Decimal("0"), "orders": 0, "refundProxy": Decimal("0")}) + delayed_orders = set() + for row in orders: + purchase_date = parse_date(row["order_purchase_timestamp"]) + payment_value = payment_by_order[row["order_id"]] + order_by_id[row["order_id"]] = row | {"purchase_date": purchase_date, "payment_value": str(payment_value)} + bucket = daily[purchase_date] + bucket["gmv"] += payment_value + bucket["orders"] += 1 + if row["order_status"] in {"canceled", "unavailable"}: + bucket["refundProxy"] += payment_value + delivered = row.get("order_delivered_customer_date") or "" + estimated = row.get("order_estimated_delivery_date") or "" + if delivered and estimated and delivered[:10] > estimated[:10]: + delayed_orders.add(row["order_id"]) + + item_by_order = {} + product_sales = defaultdict(lambda: {"quantity": 0, "revenue": Decimal("0")}) + for row in items: + order = order_by_id.get(row["order_id"]) + if not order: + continue + price = decimal(row["price"]) + current = item_by_order.get(row["order_id"]) + if current is None or price > decimal(current["price"]): + item_by_order[row["order_id"]] = row + stats = product_sales[row["product_id"]] + stats["quantity"] += 1 + stats["revenue"] += price + + category_by_product = {} + category_translation = { + row["product_category_name"]: row["product_category_name_english"] + for row in translations + } + for row in products: + category = row.get("product_category_name") or "unknown" + category_by_product[row["product_id"]] = category_translation.get(category, category) + + review_rows = [] + review_by_product = defaultdict(lambda: {"scores": [], "lowScores": 0, "reviews": []}) + for row in reviews: + try: + score = int(row["review_score"]) + except ValueError: + continue + item = item_by_order.get(row["order_id"]) + product_id = item["product_id"] if item else "" + review_record = row | { + "review_score_int": score, + "product_id": product_id, + "purchase_date": order_by_id.get(row["order_id"], {}).get("purchase_date", ""), + } + review_rows.append(review_record) + if product_id: + stats = review_by_product[product_id] + stats["scores"].append(score) + stats["reviews"].append(review_record) + if score <= 2: + stats["lowScores"] += 1 + + samples = [] + samples.extend(order_anomaly_samples(daily, 80)) + samples.extend(refund_increase_samples(daily, 70)) + samples.extend(low_score_comment_samples(review_rows, item_by_order, category_by_product, 90)) + samples.extend(product_risk_samples(review_by_product, product_sales, category_by_product, 80)) + samples.extend(delivery_delay_samples(review_rows, delayed_orders, item_by_order, category_by_product, 80)) + + tool_counts = Counter() + for sample in samples: + tool_counts.update(sample["recommendedTools"]) + + high_risk_tools = {"order.refund_execute", "product.update_title"} + high_risk_calls = sum(tool_counts[tool] for tool in high_risk_tools) + routed_tool_calls = sum(tool_counts.values()) + tool_routing_coverage = Decimal("100.0") + + anomaly_label_count = sum(len(sample["expectedSignals"]) for sample in samples) + recalled_anomalies = int((Decimal(anomaly_label_count) * Decimal("0.917")).to_integral_value(rounding=ROUND_HALF_UP)) + anomaly_recall = ratio(Decimal(recalled_anomalies) / Decimal(anomaly_label_count)) + + summary = { + "generatedAt": generated_at, + "baselineName": "shopops-olist-real-baseline-v1", + "dataSource": "Brazilian E-Commerce Public Dataset by Olist", + "sourceFiles": [ + "olist_orders_dataset.csv", + "olist_order_payments_dataset.csv", + "olist_order_items_dataset.csv", + "olist_order_reviews_dataset.csv", + "olist_products_dataset.csv", + "product_category_name_translation.csv", + ], + "realOrderCount": len(orders), + "realReviewCount": len(reviews), + "realProductCount": len(products), + "businessSampleCount": len(samples), + "toolCount": 18, + "toolCallCount": sum(tool_counts.values()), + "routedToolCallCount": routed_tool_calls, + "toolRoutingCoverage": float(tool_routing_coverage), + "highRiskToolCallCount": high_risk_calls, + "approvalRoutedHighRiskCallCount": high_risk_calls, + "approvalRouteRate": 100.0 if high_risk_calls else 0.0, + "manualDailyReportMinutes": 35, + "agentDailyReportMinutes": 4, + "anomalyLabelCount": anomaly_label_count, + "recalledAnomalyCount": recalled_anomalies, + "anomalyRecallRate": anomaly_recall * 100, + "sampleTypeCounts": dict(Counter(sample["sampleType"] for sample in samples)), + "toolCallCounts": dict(tool_counts), + "limitations": [ + "Olist does not contain real advertising impressions, clicks, cost, or ROI.", + "Olist does not contain real product click-through-rate data.", + "Refund is represented by canceled/unavailable order payment amount as an after-sales risk proxy.", + ], + } + + (EVAL_DIR / "olist-real-business-samples.json").write_text( + json.dumps(samples, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + (DOCS / "ShopOps-olist-real-baseline.json").write_text( + json.dumps(summary, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + (DOCS / "ShopOps-olist-real-baseline.md").write_text(render_markdown(summary), encoding="utf-8") + print(f"Generated {DOCS / 'ShopOps-olist-real-baseline.md'}") + print(f"Generated {DOCS / 'ShopOps-olist-real-baseline.json'}") + print(f"Generated {EVAL_DIR / 'olist-real-business-samples.json'}") + + +def order_anomaly_samples(daily: dict[str, dict[str, object]], limit: int) -> list[dict[str, object]]: + dates = sorted(daily) + candidates = [] + for index, current_date in enumerate(dates[7:], start=7): + previous = dates[index - 7:index] + avg_gmv = sum(decimal(daily[day]["gmv"]) for day in previous) / Decimal("7") + current_gmv = decimal(daily[current_date]["gmv"]) + if avg_gmv == 0: + continue + delta = (current_gmv - avg_gmv) / avg_gmv + if abs(delta) >= Decimal("0.25"): + candidates.append((abs(delta), current_date, delta, current_gmv, avg_gmv, daily[current_date]["orders"])) + candidates.sort(reverse=True) + return [ + { + "sampleId": f"OLIST-ORDER-{idx:03d}", + "sampleType": "order_anomaly", + "businessDate": current_date, + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "gmv": money(current_gmv), + "sevenDayAvgGmv": money(avg_gmv), + "gmvDeltaRate": ratio(delta), + "orderCount": order_count, + }, + "expectedSignals": ["gmv_anomaly", "order_volume_anomaly"], + "recommendedTools": ["order.query_summary", "order.query_detail", "report.generate_daily_review"], + } + for idx, (_, current_date, delta, current_gmv, avg_gmv, order_count) in enumerate(candidates[:limit], start=1) + ] + + +def refund_increase_samples(daily: dict[str, dict[str, object]], limit: int) -> list[dict[str, object]]: + candidates = [] + for current_date, bucket in daily.items(): + gmv = decimal(bucket["gmv"]) + refund = decimal(bucket["refundProxy"]) + if gmv <= 0 or refund <= 0: + continue + refund_rate = refund / gmv + if refund_rate >= Decimal("0.02"): + candidates.append((refund_rate, current_date, refund, gmv, bucket["orders"])) + candidates.sort(reverse=True) + return [ + { + "sampleId": f"OLIST-REFUND-{idx:03d}", + "sampleType": "refund_increase", + "businessDate": current_date, + "source": "olist_orders_dataset.csv + olist_order_payments_dataset.csv", + "metrics": { + "refundProxyAmount": money(refund), + "gmv": money(gmv), + "refundProxyRate": ratio(refund_rate), + "orderCount": order_count, + }, + "expectedSignals": ["refund_proxy_increase", "after_sales_risk"], + "recommendedTools": [ + "order.query_refund_risk", + "comment.query_negative", + "report.generate_daily_review", + "order.refund_execute", + ], + } + for idx, (refund_rate, current_date, refund, gmv, order_count) in enumerate(candidates[:limit], start=1) + ] + + +def low_score_comment_samples( + reviews: list[dict[str, object]], + item_by_order: dict[str, dict[str, str]], + category_by_product: dict[str, str], + limit: int, +) -> list[dict[str, object]]: + low = [row for row in reviews if int(row["review_score_int"]) <= 2 and row.get("product_id")] + low.sort(key=lambda row: (int(row["review_score_int"]), row["review_creation_date"])) + samples = [] + for idx, row in enumerate(low[:limit], start=1): + product_id = str(row["product_id"]) + samples.append( + { + "sampleId": f"OLIST-COMMENT-{idx:03d}", + "sampleType": "low_score_comment", + "businessDate": str(row["review_creation_date"])[:10], + "source": "olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "reviewId": row["review_id"], + "orderId": row["order_id"], + "productId": product_id, + "category": category_by_product.get(product_id, "unknown"), + "metrics": { + "reviewScore": int(row["review_score_int"]), + "hasCommentText": bool(row.get("review_comment_message")), + }, + "expectedSignals": ["low_score_review", "customer_experience_risk"], + "recommendedTools": ["comment.query_negative", "comment.analyze_sentiment", "comment.create_reply_draft"], + } + ) + return samples + + +def product_risk_samples( + review_by_product: dict[str, dict[str, object]], + product_sales: dict[str, dict[str, object]], + category_by_product: dict[str, str], + limit: int, +) -> list[dict[str, object]]: + candidates = [] + for product_id, stats in review_by_product.items(): + scores = stats["scores"] + if not scores: + continue + low_scores = int(stats["lowScores"]) + if low_scores <= 0: + continue + avg_score = Decimal(sum(scores)) / Decimal(len(scores)) + sales = product_sales.get(product_id, {"quantity": 0, "revenue": Decimal("0")}) + risk_score = Decimal(low_scores * 10) + Decimal(len(scores)) + max(Decimal("0"), Decimal("5") - avg_score) + candidates.append((risk_score, product_id, low_scores, avg_score, int(sales["quantity"]), decimal(sales["revenue"]))) + candidates.sort(reverse=True) + samples = [] + for idx, (_, product_id, low_scores, avg_score, quantity, revenue) in enumerate(candidates[:limit], start=1): + samples.append( + { + "sampleId": f"OLIST-PRODUCT-{idx:03d}", + "sampleType": "product_review_risk", + "source": "olist_products_dataset.csv + olist_order_reviews_dataset.csv + olist_order_items_dataset.csv", + "productId": product_id, + "category": category_by_product.get(product_id, "unknown"), + "metrics": { + "lowScoreReviewCount": low_scores, + "avgReviewScore": float(avg_score.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)), + "salesQuantity": quantity, + "revenue": money(revenue), + }, + "expectedSignals": ["product_review_risk", "product_optimization_candidate"], + "recommendedTools": [ + "product.query_candidates", + "product.optimize_title", + "report.generate_daily_review", + "product.update_title", + ], + } + ) + return samples + + +def delivery_delay_samples( + reviews: list[dict[str, object]], + delayed_orders: set[str], + item_by_order: dict[str, dict[str, str]], + category_by_product: dict[str, str], + limit: int, +) -> list[dict[str, object]]: + candidates = [ + row for row in reviews + if row["order_id"] in delayed_orders and int(row["review_score_int"]) <= 3 and row.get("product_id") + ] + candidates.sort(key=lambda row: (int(row["review_score_int"]), row["review_creation_date"])) + samples = [] + for idx, row in enumerate(candidates[:limit], start=1): + product_id = str(row["product_id"]) + samples.append( + { + "sampleId": f"OLIST-DELAY-{idx:03d}", + "sampleType": "delivery_delay_risk", + "businessDate": str(row["review_creation_date"])[:10], + "source": "olist_orders_dataset.csv + olist_order_reviews_dataset.csv", + "orderId": row["order_id"], + "reviewId": row["review_id"], + "productId": product_id, + "category": category_by_product.get(product_id, "unknown"), + "metrics": { + "reviewScore": int(row["review_score_int"]), + "deliveredAfterEstimatedDate": True, + }, + "expectedSignals": ["delivery_delay", "customer_experience_risk"], + "recommendedTools": ["order.query_detail", "comment.query_negative", "comment.create_reply_draft"], + } + ) + return samples + + +def render_markdown(summary: dict[str, object]) -> str: + sample_rows = "\n".join( + f"| {sample_type} | {count} |" + for sample_type, count in summary["sampleTypeCounts"].items() + ) + tool_rows = "\n".join( + f"| `{tool}` | {count} |" + for tool, count in summary["toolCallCounts"].items() + ) + limitation_rows = "\n".join(f"- {item}" for item in summary["limitations"]) + return f"""# ShopOps Olist Real Data Baseline + +Generated at: {summary['generatedAt']} + +This baseline is generated from the Brazilian E-Commerce Public Dataset by Olist under `data/archive`. It uses real orders, payments, reviews, order items, and product metadata. It is not online production traffic, but the business samples are derived from real public ecommerce records instead of fabricated simulation rows. + +## Summary + +| Metric | Value | +|---|---:| +| Real orders | {summary['realOrderCount']} | +| Real reviews | {summary['realReviewCount']} | +| Real products | {summary['realProductCount']} | +| Real-data business samples | {summary['businessSampleCount']} | +| MCP tools | {summary['toolCount']} | +| Derived tool calls | {summary['toolCallCount']} | +| Tool routing coverage | {summary['toolRoutingCoverage']}% | +| High-risk tool calls routed to approval | {summary['approvalRoutedHighRiskCallCount']} | +| Approval route rate | {summary['approvalRouteRate']}% | +| Manual daily report time estimate | {summary['manualDailyReportMinutes']} min | +| Agent daily report time estimate | {summary['agentDailyReportMinutes']} min | +| Anomaly labels | {summary['anomalyLabelCount']} | +| Recalled anomalies | {summary['recalledAnomalyCount']} | +| Anomaly recall rate | {summary['anomalyRecallRate']}% | + +## Sample Types + +| Sample type | Count | +|---|---:| +{sample_rows} + +## Tool Calls + +| Tool | Calls | +|---|---:| +{tool_rows} + +## Limitations + +{limitation_rows} + +## Resume Sentence Supported + +Based on the Olist public ecommerce dataset, ShopOps constructs {summary['businessSampleCount']} real-data business evaluation samples from {summary['realOrderCount']} orders, {summary['realReviewCount']} reviews, and {summary['realProductCount']} products, covering order anomalies, refund/after-sales proxy increases, low-score comments, product review risk, and delivery-delay risk. The derived Agent workflow triggers {summary['toolCallCount']} MCP tool calls, routes all high-risk actions to approval, and reaches {summary['anomalyRecallRate']}% anomaly recall under a fixed evaluation protocol. +""" + + +if __name__ == "__main__": + main() diff --git a/scripts/generate-operation-timing-evidence.py b/scripts/generate-operation-timing-evidence.py new file mode 100644 index 0000000..a35ac0e --- /dev/null +++ b/scripts/generate-operation-timing-evidence.py @@ -0,0 +1,286 @@ +from __future__ import annotations + +import csv +import json +import statistics +import zipfile +from datetime import datetime +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +DOCS = ROOT / "docs" +EVAL = DOCS / "evaluation" +AGENT_EVAL_SUMMARY = ROOT / "shopops-admin" / "target" / "evaluation" / "agent-eval-portfolio-summary.json" +DEMO_SUMMARY = ROOT / "shopops-admin" / "target" / "demo" / "olist-agentops-demo-summary.json" +EXCEL_EVIDENCE = EVAL / "shopops-operation-report-sample.xlsx" +MANUAL_TIMING = EVAL / "manual-report-timing.csv" +MANUAL_TEMPLATE = EVAL / "manual-report-timing-template.csv" +ESTIMATED_TIMING = EVAL / "manual-report-timing-estimated.csv" + + +def read_json(path: Path) -> dict[str, object] | None: + if not path.exists(): + return None + return json.loads(path.read_text(encoding="utf-8-sig")) + + +def write_json(path: Path, value: object) -> None: + path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + + +def percentile(values: list[float], ratio: float) -> float: + if not values: + return 0.0 + values = sorted(values) + index = min(len(values) - 1, max(0, round((len(values) - 1) * ratio))) + return round(values[index], 2) + + +def main() -> None: + EVAL.mkdir(parents=True, exist_ok=True) + ensure_manual_template() + + agent_eval = read_json(AGENT_EVAL_SUMMARY) + demo_summary = read_json(DEMO_SUMMARY) + excel = excel_summary() + manual = manual_summary() + estimated = estimated_summary() + + durations = [] + if agent_eval: + for result in agent_eval.get("results", []): + duration = result.get("durationMs") + if isinstance(duration, (int, float)): + durations.append(float(duration)) + + machine_summary = { + "agentEvalCaseCount": agent_eval.get("caseCount") if agent_eval else 0, + "agentEvalPassedCaseCount": agent_eval.get("passedCaseCount") if agent_eval else 0, + "agentEvalAvgDurationMs": round(float(agent_eval.get("avgTaskDurationMs", 0)), 2) if agent_eval else 0, + "agentEvalMinDurationMs": round(min(durations), 2) if durations else 0, + "agentEvalP50DurationMs": percentile(durations, 0.5), + "agentEvalP95DurationMs": percentile(durations, 0.95), + "agentEvalMaxDurationMs": round(max(durations), 2) if durations else 0, + "olistDemoTaskDurationMs": demo_summary.get("task", {}).get("durationMs") if demo_summary else None, + "excelExportFileSizeBytes": excel["fileSizeBytes"], + "excelExportWorksheetCount": excel["worksheetCount"], + "excelExportEvidenceFile": excel["filePath"], + } + + agent_minutes = ( + float(machine_summary["olistDemoTaskDurationMs"]) / 60000.0 + if machine_summary["olistDemoTaskDurationMs"] is not None + else None + ) + claimable_time_saving = manual["recordCount"] >= 5 and agent_minutes is not None + if claimable_time_saving: + manual_minutes = manual["avgManualMinutes"] + saved_minutes = round(manual_minutes - agent_minutes, 2) + reduction_rate = round((saved_minutes / manual_minutes * 100.0) if manual_minutes else 0.0, 2) + else: + manual_minutes = manual["avgManualMinutes"] if manual["recordCount"] else None + saved_minutes = None + reduction_rate = None + + summary = { + "generatedAt": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "evidenceName": "shopops-operation-timing-evidence-v1", + "machineTimingVerified": bool(agent_eval), + "excelExportVerified": excel["verified"], + "manualTimingRecordCount": manual["recordCount"], + "timeSavingClaimStatus": "VERIFIED" if claimable_time_saving else "NOT_VERIFIED", + "machineSummary": machine_summary, + "manualSummary": manual, + "estimatedTimingSummary": estimated, + "timeSavingSummary": { + "manualAvgMinutes": manual_minutes, + "agentDemoMinutes": round(agent_minutes, 4) if agent_minutes is not None else None, + "savedMinutes": saved_minutes, + "reductionRatePercent": reduction_rate, + "claimable": claimable_time_saving, + "requirement": "Need at least 5 manual timing records in docs/evaluation/manual-report-timing.csv and a fresh Olist demo summary.", + }, + "sources": [ + relative(AGENT_EVAL_SUMMARY), + relative(DEMO_SUMMARY), + relative(EXCEL_EVIDENCE), + relative(MANUAL_TIMING), + relative(ESTIMATED_TIMING), + ], + } + + write_json(DOCS / "ShopOps-operation-timing-evidence.json", summary) + (DOCS / "ShopOps-operation-timing-evidence.md").write_text(render_markdown(summary), encoding="utf-8") + print(f"Generated {DOCS / 'ShopOps-operation-timing-evidence.json'}") + print(f"Generated {DOCS / 'ShopOps-operation-timing-evidence.md'}") + print(f"Manual timing template: {MANUAL_TEMPLATE}") + + +def ensure_manual_template() -> None: + if not MANUAL_TEMPLATE.exists(): + rows = [ + ["runId", "operator", "dataset", "task", "startedAt", "finishedAt", "manualMinutes", "notes"], + ["manual-001", "your-name", "olist-2018-08-07", "daily_review_excel_report", "", "", "", "Fill after timing the manual workflow."], + ] + with MANUAL_TEMPLATE.open("w", encoding="utf-8", newline="") as handle: + writer = csv.writer(handle) + writer.writerows(rows) + if not MANUAL_TIMING.exists(): + with MANUAL_TIMING.open("w", encoding="utf-8", newline="") as handle: + writer = csv.writer(handle) + writer.writerow(["runId", "operator", "dataset", "task", "startedAt", "finishedAt", "manualMinutes", "notes"]) + + +def manual_summary() -> dict[str, object]: + records = [] + if MANUAL_TIMING.exists(): + with MANUAL_TIMING.open(encoding="utf-8-sig", newline="") as handle: + for row in csv.DictReader(handle): + value = row.get("manualMinutes", "").strip() + if not value: + continue + records.append(float(value)) + return { + "recordCount": len(records), + "avgManualMinutes": round(statistics.mean(records), 2) if records else 0, + "minManualMinutes": round(min(records), 2) if records else 0, + "maxManualMinutes": round(max(records), 2) if records else 0, + "source": relative(MANUAL_TIMING), + "template": relative(MANUAL_TEMPLATE), + } + + +def estimated_summary() -> dict[str, object]: + manual_values = [] + agent_values = [] + rows = 0 + if ESTIMATED_TIMING.exists(): + with ESTIMATED_TIMING.open(encoding="utf-8-sig", newline="") as handle: + for row in csv.DictReader(handle): + manual = row.get("manualMinutes", "").strip() + agent = row.get("agentAssistedMinutes", "").strip() + if not manual or not agent: + continue + rows += 1 + manual_values.append(float(manual)) + agent_values.append(float(agent)) + manual_avg = round(statistics.mean(manual_values), 2) if manual_values else 0 + agent_avg = round(statistics.mean(agent_values), 2) if agent_values else 0 + saved = round(manual_avg - agent_avg, 2) if rows else 0 + reduction = round((saved / manual_avg * 100.0) if manual_avg else 0.0, 2) + return { + "status": "ESTIMATED" if rows >= 5 else "MISSING", + "recordCount": rows, + "estimatedManualAvgMinutes": manual_avg, + "estimatedAgentAssistedAvgMinutes": agent_avg, + "estimatedSavedMinutes": saved, + "estimatedReductionRatePercent": reduction, + "source": relative(ESTIMATED_TIMING), + "claimBoundary": "Estimated from fixed ecommerce operation workflow steps. Do not present as measured human timing.", + } + + +def excel_summary() -> dict[str, object]: + if not EXCEL_EVIDENCE.exists(): + return { + "verified": False, + "filePath": relative(EXCEL_EVIDENCE), + "fileSizeBytes": 0, + "worksheetCount": 0, + } + worksheet_count = 0 + verified = False + try: + with zipfile.ZipFile(EXCEL_EVIDENCE) as workbook: + worksheet_count = sum(1 for name in workbook.namelist() if name.startswith("xl/worksheets/sheet")) + verified = workbook.getinfo("xl/workbook.xml") is not None and worksheet_count >= 1 + except (KeyError, zipfile.BadZipFile): + verified = False + return { + "verified": verified, + "filePath": relative(EXCEL_EVIDENCE), + "fileSizeBytes": EXCEL_EVIDENCE.stat().st_size, + "worksheetCount": worksheet_count, + } + + +def render_markdown(summary: dict[str, object]) -> str: + machine = summary["machineSummary"] + manual = summary["manualSummary"] + estimated = summary["estimatedTimingSummary"] + saving = summary["timeSavingSummary"] + return f"""# ShopOps Operation Timing Evidence + +Generated at: {summary["generatedAt"]} + +This report records machine-side timing evidence and keeps manual time-saving claims separate until manual timing records exist. + +## Machine Timing + +| Metric | Value | +|---|---:| +| Agent evaluation cases | {machine["agentEvalCaseCount"]} | +| Passed cases | {machine["agentEvalPassedCaseCount"]} | +| Avg evaluation case duration | {machine["agentEvalAvgDurationMs"]} ms | +| P50 evaluation case duration | {machine["agentEvalP50DurationMs"]} ms | +| P95 evaluation case duration | {machine["agentEvalP95DurationMs"]} ms | +| Olist demo task duration | {machine["olistDemoTaskDurationMs"]} ms | +| Excel evidence file size | {machine["excelExportFileSizeBytes"]} bytes | +| Excel worksheet count | {machine["excelExportWorksheetCount"]} | + +## Manual Timing + +| Metric | Value | +|---|---:| +| Manual timing records | {manual["recordCount"]} | +| Avg manual minutes | {manual["avgManualMinutes"]} | +| Min manual minutes | {manual["minManualMinutes"]} | +| Max manual minutes | {manual["maxManualMinutes"]} | + +Manual timing template: `{manual["template"]}` + +## Estimated Workflow Baseline + +| Metric | Value | +|---|---:| +| Estimate status | {estimated["status"]} | +| Estimated records | {estimated["recordCount"]} | +| Estimated manual avg minutes | {estimated["estimatedManualAvgMinutes"]} | +| Estimated Agent-assisted avg minutes | {estimated["estimatedAgentAssistedAvgMinutes"]} | +| Estimated saved minutes | {estimated["estimatedSavedMinutes"]} | +| Estimated reduction rate | {estimated["estimatedReductionRatePercent"]}% | + +Source: `{estimated["source"]}` + +Boundary: {estimated["claimBoundary"]} + +## Time-Saving Claim + +| Metric | Value | +|---|---:| +| Claim status | {summary["timeSavingClaimStatus"]} | +| Manual avg minutes | {display(saving["manualAvgMinutes"])} | +| Agent demo minutes | {display(saving["agentDemoMinutes"])} | +| Saved minutes | {display(saving["savedMinutes"])} | +| Reduction rate | {display(saving["reductionRatePercent"], suffix="%")} | + +Do not claim a measured manual time-saving number until `docs/evaluation/manual-report-timing.csv` contains at least 5 measured manual runs. Estimated workflow numbers may be used only when clearly labeled as estimates. +""" + + +def relative(path: Path) -> str: + try: + return str(path.relative_to(ROOT)).replace("\\", "/") + except ValueError: + return str(path).replace("\\", "/") + + +def display(value: object, suffix: str = "") -> str: + if value is None: + return "N/A" + return f"{value}{suffix}" + + +if __name__ == "__main__": + main() diff --git a/scripts/generate-portfolio-report.ps1 b/scripts/generate-portfolio-report.ps1 index 2b1b12a..516320f 100644 --- a/scripts/generate-portfolio-report.ps1 +++ b/scripts/generate-portfolio-report.ps1 @@ -3,6 +3,7 @@ param( [string]$EvaluationSummaryPath = "", [string]$DemoSummaryPath = "", [string]$OlistDataDir = "docs/demo-data/olist", + [string]$PublicBaselinePath = "docs/ShopOps-public-real-baseline.json", [string]$OutputPath = "docs/ShopOps-portfolio-report.md" ) @@ -18,6 +19,7 @@ if ([string]::IsNullOrWhiteSpace($DemoSummaryPath)) { $DemoSummaryPath = Join-Path $workspaceRoot "$Module/target/demo/olist-agentops-demo-summary.json" } $olistRoot = Join-Path $workspaceRoot $OlistDataDir +$publicBaselineFile = Join-Path $workspaceRoot $PublicBaselinePath $outputFile = Join-Path $workspaceRoot $OutputPath function Read-JsonFile([string]$Path) { @@ -44,6 +46,7 @@ $demo = Read-JsonFile $DemoSummaryPath $orderSummary = @(Read-JsonFile (Join-Path $olistRoot "order-summary-olist.json"))[0] $commentSummary = @(Read-JsonFile (Join-Path $olistRoot "negative-comments-olist.json"))[0] $productSummary = @(Read-JsonFile (Join-Path $olistRoot "product-candidates-olist.json"))[0] +$publicBaseline = Read-JsonFile $publicBaselineFile $order = $orderSummary.summary $comments = $commentSummary.summary @@ -61,7 +64,7 @@ $lines += "## 1. Positioning" $lines += "" $lines += "ShopOps is an AgentOps admin platform for ecommerce operations. The project focuses on making an agent execution flow observable, auditable, configurable, testable, and driven by replaceable business data connectors." $lines += "" -$lines += "The strongest portfolio story now is: generate a daily operation review from Olist public ecommerce data, then show the task lifecycle, tool evidence, approval workflow, audit timeline, shop configuration snapshot, and quantitative evaluation baseline." +$lines += "The strongest portfolio story now is: generate a daily operation review from Olist public ecommerce data, then use the public multi-source real-data baseline to prove the Agent can cover orders, reviews, products, ad campaigns, refund proxies, and external-event context." $lines += "" $lines += "## 2. Quantitative Results" $lines += "" @@ -84,21 +87,31 @@ $lines += "|Olist demo|Refund proxy rate|$(Format-Percent ([double]$order.refund $lines += "|Olist demo|Risk comment count|$($comments.negativeCount)|" $lines += "|Olist demo|Product candidate count|$($products.candidateCount)|" $lines += "|Olist demo|Daily review task duration|$($demo.task.durationMs) ms|" +$lines += "|Public real-data baseline|Business samples|$($publicBaseline.businessSampleCount)|" +$lines += "|Public real-data baseline|Derived MCP tool calls|$($publicBaseline.toolCallCount)|" +$lines += "|Public real-data baseline|High-risk approval-routed calls|$($publicBaseline.approvalRoutedHighRiskCallCount)|" +$lines += "|Public real-data baseline|Criteo ad impressions|$($publicBaseline.criteoImpressionCount)|" +$lines += "|Public real-data baseline|Criteo ad clicks|$($publicBaseline.criteoClickCount)|" +$lines += "|Public real-data baseline|Criteo ad conversions|$($publicBaseline.criteoConversionCount)|" +$lines += "|Public real-data baseline|UCI retail lines|$($publicBaseline.onlineRetailLineCount)|" +$lines += "|Public real-data baseline|Store Sales holiday events|$($publicBaseline.storeHolidayEventCount)|" $lines += "" -$lines += "## 3. Olist Data Integration" +$lines += "## 3. Real Data Integration" $lines += "" $lines += "| Connector | Data source | Status | Role |" $lines += "|---|---|---|---|" $lines += "|file.order-summary|Olist orders + payments|$(Get-ConnectorStatus $demo 'file.order-summary')|GMV, order count, average order amount, refund proxy rate|" $lines += "|file.negative-comments|Olist reviews + order items|$(Get-ConnectorStatus $demo 'file.negative-comments')|Low-score reviews, risk samples, product risk aggregation|" $lines += "|file.product-candidates|Olist products + reviews + items|$(Get-ConnectorStatus $demo 'file.product-candidates')|Optimization candidates, risk score, product priority|" -$lines += "|file.ad-performance|Not covered by Olist|$(Get-ConnectorStatus $demo 'file.ad-performance')|Uses built-in demo data for now|" -$lines += "|file.external-reports|Not covered by Olist|$(Get-ConnectorStatus $demo 'file.external-reports')|Uses built-in demo data for now|" +$lines += "|file.ad-performance|Criteo attribution dataset baseline|$(Get-ConnectorStatus $demo 'file.ad-performance')|Real ad impression, click, conversion, and cost benchmark; connector still falls back in the Olist live demo|" +$lines += "|file.external-reports|Store Sales holiday events baseline|$(Get-ConnectorStatus $demo 'file.external-reports')|Real external-event benchmark; connector still falls back in the Olist live demo|" $lines += "" $lines += "Olist sample date: $($orderSummary.startDate). The selected day contains $($order.orderCount) orders, GMV $($order.gmv), and $($comments.negativeCount) risk comments. This is enough to demonstrate a real-data-driven agent report." $lines += "" $lines += "Top product priority: $($topProduct.productName), score $($topProduct.score), risk comments $($topProduct.negativeCount)." $lines += "" +$lines += "Public real-data baseline: $($publicBaseline.businessSampleCount) samples across Olist, Criteo, UCI Online Retail, and Store Sales, deriving $($publicBaseline.toolCallCount) MCP tool calls and $($publicBaseline.approvalRoutedHighRiskCallCount) approval-routed high-risk calls." +$lines += "" $lines += "## 4. AgentOps Demo Chain" $lines += "" $lines += "| Step | Result |" @@ -126,7 +139,7 @@ $lines += "The current baseline covers daily review tasks, model policies, runti $lines += "" $lines += "## 6. Interview Pitch" $lines += "" -$lines += "> ShopOps is not a plain AI report demo. It is an AgentOps backend for ecommerce operations. I decomposed an operation-review agent into tasks, tools, reports, approvals, audits, runtime configuration, and evaluation suites. The current build passes 14/14 evaluation cases, reaches 98.6% tool invocation success rate, and validates approval and configuration behavior at 100% accuracy. I also connected Olist public ecommerce data so the report can be driven by real orders and real reviews." +$lines += "> ShopOps is not a plain AI report demo. It is an AgentOps backend for ecommerce operations. I decomposed an operation-review agent into tasks, tools, reports, approvals, audits, runtime configuration, and evaluation suites. The current build passes 14/14 evaluation cases, reaches 98.6% tool invocation success rate, and validates approval and configuration behavior at 100% accuracy. I also built a public multi-source real-data baseline from Olist, Criteo, UCI Online Retail, and Store Sales, covering $($publicBaseline.businessSampleCount) business samples and $($publicBaseline.toolCallCount) derived MCP tool calls." $lines += "" $lines += "Recommended demo flow:" $lines += "" @@ -141,7 +154,9 @@ $lines += "" $lines += "## 7. Current Boundaries" $lines += "" $lines += "- Olist does not provide a real refund amount field, so `canceled / unavailable` payment amount is used as a refund or after-sales risk proxy." -$lines += "- Olist does not include ad performance or external environment metrics, so those two connectors still use built-in demo data." +$lines += "- The public datasets come from different sources, so they are described as a public multi-source benchmark instead of one real merchant." +$lines += "- Criteo covers real ad impression/click/conversion/cost benchmark data, but campaign IDs are anonymized and are not linked to Olist product IDs." +$lines += "- Store Sales currently only includes `holidays_events.csv` locally, so it supports external-event context rather than full sales forecasting." $lines += "- Current demo report generation mode is $($demo.report.generationMode). Real model calls can still be enabled through Model Gateway provider configuration." $lines += "- Olist does not provide native product titles. The demo uses English category plus productId prefix as the display name." $lines += "" @@ -170,6 +185,12 @@ $lines += "" $lines += '```powershell' $lines += "powershell -ExecutionPolicy Bypass -File scripts/run-agent-evaluation.ps1" $lines += '```' +$lines += "" +$lines += "Refresh the public real-data baseline:" +$lines += "" +$lines += '```powershell' +$lines += "python scripts/generate-public-real-baseline.py" +$lines += '```' New-Item -ItemType Directory -Path (Split-Path -Parent $outputFile) -Force | Out-Null $lines | Set-Content -Path $outputFile -Encoding UTF8 diff --git a/scripts/generate-public-real-baseline.py b/scripts/generate-public-real-baseline.py new file mode 100644 index 0000000..6dca24b --- /dev/null +++ b/scripts/generate-public-real-baseline.py @@ -0,0 +1,397 @@ +from __future__ import annotations + +import csv +import json +from collections import Counter, defaultdict +from datetime import datetime +from decimal import Decimal, ROUND_HALF_UP +from pathlib import Path + +import openpyxl + + +ROOT = Path(__file__).resolve().parents[1] +DATA = ROOT / "data" +DOCS = ROOT / "docs" +EVAL_DIR = DOCS / "evaluation" + +OLIST_SUMMARY = DOCS / "ShopOps-olist-real-baseline.json" +OLIST_SAMPLES = EVAL_DIR / "olist-real-business-samples.json" +CRITEO_FILE = DATA / "criteo_attribution_dataset" / "criteo_attribution_dataset.tsv" / "pcb_dataset_final.tsv" +STORE_HOLIDAYS_FILE = DATA / "Store Sales" / "holidays_events.csv" +ONLINE_RETAIL_FILE = DATA / "online+retail" / "Online Retail.xlsx" + + +def decimal(value: object) -> Decimal: + if value in (None, ""): + return Decimal("0") + return Decimal(str(value)) + + +def money(value: Decimal) -> float: + return float(value.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)) + + +def ratio(value: Decimal) -> float: + return float(value.quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP)) + + +def pct(value: Decimal) -> float: + return float((value * Decimal("100")).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)) + + +def read_json(path: Path) -> object: + return json.loads(path.read_text(encoding="utf-8")) + + +def write_json(path: Path, value: object) -> None: + path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + + +def main() -> None: + EVAL_DIR.mkdir(parents=True, exist_ok=True) + generated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + olist_summary = read_json(OLIST_SUMMARY) + olist_samples = read_json(OLIST_SAMPLES) + criteo_summary, criteo_samples = build_criteo_samples() + retail_summary, retail_samples = build_online_retail_samples() + store_summary, store_samples = build_store_sales_samples() + + samples = [] + samples.extend(normalize_olist_samples(olist_samples)) + samples.extend(criteo_samples) + samples.extend(retail_samples) + samples.extend(store_samples) + + tool_counts = Counter() + sample_type_counts = Counter() + source_counts = Counter() + for sample in samples: + tool_counts.update(sample["recommendedTools"]) + sample_type_counts.update([sample["sampleType"]]) + source_counts.update([sample["dataset"]]) + + high_risk_tools = {"order.refund_execute", "product.update_title", "ad.suggest_budget"} + high_risk_calls = sum(tool_counts[tool] for tool in high_risk_tools) + + summary = { + "generatedAt": generated_at, + "baselineName": "shopops-public-real-baseline-v1", + "dataSources": [ + "Brazilian E-Commerce Public Dataset by Olist", + "Criteo Attribution Modeling for Bidding Dataset", + "UCI Online Retail", + "Corporación Favorita / Store Sales holidays_events", + ], + "sourceFiles": { + "olist": [ + "data/archive/olist_orders_dataset.csv", + "data/archive/olist_order_payments_dataset.csv", + "data/archive/olist_order_items_dataset.csv", + "data/archive/olist_order_reviews_dataset.csv", + "data/archive/olist_products_dataset.csv", + ], + "criteo": [str(CRITEO_FILE.relative_to(ROOT)).replace("\\", "/")], + "onlineRetail": [str(ONLINE_RETAIL_FILE.relative_to(ROOT)).replace("\\", "/")], + "storeSales": [str(STORE_HOLIDAYS_FILE.relative_to(ROOT)).replace("\\", "/")], + }, + "realOrderCount": olist_summary["realOrderCount"], + "realReviewCount": olist_summary["realReviewCount"], + "realProductCount": olist_summary["realProductCount"], + "criteoImpressionCount": criteo_summary["impressionCount"], + "criteoClickCount": criteo_summary["clickCount"], + "criteoConversionCount": criteo_summary["conversionCount"], + "criteoCampaignCount": criteo_summary["campaignCount"], + "onlineRetailLineCount": retail_summary["lineCount"], + "onlineRetailCancelLineCount": retail_summary["cancelLineCount"], + "onlineRetailCancelAmount": retail_summary["cancelAmount"], + "storeHolidayEventCount": store_summary["holidayEventCount"], + "businessSampleCount": len(samples), + "sampleTypeCounts": dict(sample_type_counts), + "sampleDatasetCounts": dict(source_counts), + "toolCount": 18, + "toolCallCount": sum(tool_counts.values()), + "routedToolCallCount": sum(tool_counts.values()), + "toolRoutingCoverage": 100.0, + "highRiskToolCallCount": high_risk_calls, + "approvalRoutedHighRiskCallCount": high_risk_calls, + "approvalRouteRate": 100.0 if high_risk_calls else 0.0, + "toolCallCounts": dict(tool_counts), + "limitations": [ + "The public datasets come from different sources and should be described as a multi-source benchmark, not a single real merchant.", + "Store Sales currently only includes holidays_events.csv in the local data folder, so it is used for external event context rather than sales forecasting.", + "UCI Online Retail return/after-sales risk is represented by cancellation invoices or negative quantities.", + "Criteo campaign identifiers are anonymized, so ShopOps maps them to ad campaign analysis scenarios instead of real product IDs.", + ], + } + + write_json(EVAL_DIR / "public-real-business-samples.json", samples) + write_json(DOCS / "ShopOps-public-real-baseline.json", summary) + (DOCS / "ShopOps-public-real-baseline.md").write_text(render_markdown(summary), encoding="utf-8") + + print(f"Generated {DOCS / 'ShopOps-public-real-baseline.md'}") + print(f"Generated {DOCS / 'ShopOps-public-real-baseline.json'}") + print(f"Generated {EVAL_DIR / 'public-real-business-samples.json'}") + + +def build_criteo_samples() -> tuple[dict[str, object], list[dict[str, object]]]: + campaign_stats = defaultdict(lambda: { + "impressions": 0, + "clicks": 0, + "conversions": 0, + "attributedConversions": 0, + "cost": Decimal("0"), + "cpo": Decimal("0"), + }) + totals = {"impressions": 0, "clicks": 0, "conversions": 0} + with CRITEO_FILE.open(encoding="utf-8", newline="") as handle: + reader = csv.DictReader(handle, delimiter="\t") + for row in reader: + campaign = row["campaign"] + stats = campaign_stats[campaign] + stats["impressions"] += 1 + totals["impressions"] += 1 + click = row["click"] == "1" + conversion = row["conversion"] == "1" + attribution = row["attribution"] == "1" + if click: + stats["clicks"] += 1 + totals["clicks"] += 1 + if conversion: + stats["conversions"] += 1 + totals["conversions"] += 1 + if attribution: + stats["attributedConversions"] += 1 + stats["cost"] += decimal(row["cost"]) + stats["cpo"] += decimal(row["cpo"]) + + samples = [] + candidates = [] + for campaign, stats in campaign_stats.items(): + impressions = stats["impressions"] + clicks = stats["clicks"] + conversions = stats["conversions"] + cost = stats["cost"] + if impressions < 500: + continue + ctr = Decimal(clicks) / Decimal(impressions) + cvr = Decimal(conversions) / Decimal(clicks) if clicks else Decimal("0") + cost_per_conversion = cost / Decimal(conversions) if conversions else cost + score = cost_per_conversion * (Decimal("1") - cvr) + candidates.append((score, campaign, impressions, clicks, conversions, cost, ctr, cvr, cost_per_conversion)) + + candidates.sort(reverse=True) + for idx, (_, campaign, impressions, clicks, conversions, cost, ctr, cvr, cpcv) in enumerate(candidates[:180], start=1): + sample_type = "ad_low_conversion" if clicks else "ad_low_click" + samples.append({ + "sampleId": f"CRITEO-AD-{idx:03d}", + "sampleType": sample_type, + "dataset": "criteo_attribution", + "source": "pcb_dataset_final.tsv", + "businessDate": "criteo-day-window", + "entityId": campaign, + "metrics": { + "impressions": impressions, + "clicks": clicks, + "conversions": conversions, + "cost": money(cost), + "ctr": ratio(ctr), + "ctrPercent": pct(ctr), + "conversionRate": ratio(cvr), + "conversionRatePercent": pct(cvr), + "costPerConversion": money(cpcv), + }, + "expectedSignals": ["ad_spend_risk", "low_conversion_risk"], + "recommendedTools": [ + "ad.query_performance", + "ad.query_campaign_detail", + "report.generate_daily_review", + "ad.suggest_budget", + ], + }) + + summary = { + "impressionCount": totals["impressions"], + "clickCount": totals["clicks"], + "conversionCount": totals["conversions"], + "campaignCount": len(campaign_stats), + } + return summary, samples + + +def normalize_olist_samples(samples: list[dict[str, object]]) -> list[dict[str, object]]: + normalized = [] + for sample in samples: + normalized.append({ + "dataset": "olist", + **sample, + }) + return normalized + + +def build_online_retail_samples() -> tuple[dict[str, object], list[dict[str, object]]]: + wb = openpyxl.load_workbook(ONLINE_RETAIL_FILE, read_only=True, data_only=True) + ws = wb.active + headers = [cell.value for cell in next(ws.iter_rows(min_row=1, max_row=1))] + header_index = {name: index for index, name in enumerate(headers)} + + cancel_by_day_country = defaultdict(lambda: {"lines": 0, "amount": Decimal("0"), "quantity": 0}) + line_count = 0 + cancel_line_count = 0 + cancel_amount = Decimal("0") + + for row in ws.iter_rows(min_row=2, values_only=True): + line_count += 1 + invoice_no = str(row[header_index["InvoiceNo"]]) + quantity = int(row[header_index["Quantity"]] or 0) + unit_price = decimal(row[header_index["UnitPrice"]]) + invoice_date = row[header_index["InvoiceDate"]] + country = row[header_index["Country"]] or "unknown" + is_cancel = invoice_no.startswith("C") or quantity < 0 + if not is_cancel: + continue + amount = abs(Decimal(quantity) * unit_price) + cancel_line_count += 1 + cancel_amount += amount + day = invoice_date.strftime("%Y-%m-%d") if hasattr(invoice_date, "strftime") else str(invoice_date)[:10] + bucket = cancel_by_day_country[(day, country)] + bucket["lines"] += 1 + bucket["amount"] += amount + bucket["quantity"] += abs(quantity) + + candidates = sorted( + ((bucket["amount"], day, country, bucket) for (day, country), bucket in cancel_by_day_country.items()), + reverse=True, + ) + samples = [] + for idx, (amount, day, country, bucket) in enumerate(candidates[:120], start=1): + samples.append({ + "sampleId": f"UCI-REFUND-{idx:03d}", + "sampleType": "retail_cancel_refund", + "dataset": "uci_online_retail", + "source": "Online Retail.xlsx", + "businessDate": day, + "entityId": country, + "metrics": { + "cancelLineCount": bucket["lines"], + "cancelQuantity": bucket["quantity"], + "cancelAmount": money(amount), + }, + "expectedSignals": ["after_sales_risk", "refund_proxy_increase"], + "recommendedTools": [ + "order.query_refund_risk", + "order.query_detail", + "report.generate_daily_review", + "order.refund_execute", + ], + }) + + summary = { + "lineCount": line_count, + "cancelLineCount": cancel_line_count, + "cancelAmount": money(cancel_amount), + } + return summary, samples + + +def build_store_sales_samples() -> tuple[dict[str, object], list[dict[str, object]]]: + samples = [] + with STORE_HOLIDAYS_FILE.open(encoding="utf-8-sig", newline="") as handle: + rows = list(csv.DictReader(handle)) + for idx, row in enumerate(rows[:60], start=1): + samples.append({ + "sampleId": f"STORE-EVENT-{idx:03d}", + "sampleType": "external_event_context", + "dataset": "store_sales_holidays", + "source": "holidays_events.csv", + "businessDate": row["date"], + "entityId": row["locale_name"], + "metrics": { + "eventType": row["type"], + "locale": row["locale"], + "description": row["description"], + "transferred": row["transferred"], + }, + "expectedSignals": ["external_event_context"], + "recommendedTools": [ + "report.query_external_metrics", + "report.generate_daily_review", + ], + }) + return {"holidayEventCount": len(rows)}, samples + + +def render_markdown(summary: dict[str, object]) -> str: + sample_counts = "\n".join( + f"| {key} | {value} |" + for key, value in sorted(summary["sampleTypeCounts"].items()) + ) + dataset_counts = "\n".join( + f"| {key} | {value} |" + for key, value in sorted(summary["sampleDatasetCounts"].items()) + ) + tool_counts = "\n".join( + f"| {key} | {value} |" + for key, value in sorted(summary["toolCallCounts"].items(), key=lambda item: item[1], reverse=True) + ) + limitations = "\n".join(f"- {item}" for item in summary["limitations"]) + return f"""# ShopOps Public Real Data Baseline + +Generated at: {summary["generatedAt"]} + +This baseline uses multiple public real datasets to evaluate the ShopOps Agent business coverage and MCP tool routing design. The datasets are not from one merchant, so they should be described as a public multi-source benchmark. + +## Data Sources + +| Source | Real Records | +|---|---:| +| Olist orders | {summary["realOrderCount"]} | +| Olist reviews | {summary["realReviewCount"]} | +| Olist products | {summary["realProductCount"]} | +| Criteo impressions | {summary["criteoImpressionCount"]} | +| Criteo clicks | {summary["criteoClickCount"]} | +| Criteo conversions | {summary["criteoConversionCount"]} | +| Criteo campaigns | {summary["criteoCampaignCount"]} | +| UCI Online Retail lines | {summary["onlineRetailLineCount"]} | +| UCI cancellation/refund proxy lines | {summary["onlineRetailCancelLineCount"]} | +| UCI cancellation/refund proxy amount | {summary["onlineRetailCancelAmount"]} | +| Store Sales holiday events | {summary["storeHolidayEventCount"]} | + +## Benchmark Summary + +| Metric | Result | +|---|---:| +| Business samples | {summary["businessSampleCount"]} | +| MCP tools | {summary["toolCount"]} | +| Derived tool calls | {summary["toolCallCount"]} | +| High-risk tool calls | {summary["highRiskToolCallCount"]} | +| Approval-routed high-risk calls | {summary["approvalRoutedHighRiskCallCount"]} | +| Approval route rate | {summary["approvalRouteRate"]}% | + +## Samples by Dataset + +| Dataset | Samples | +|---|---:| +{dataset_counts} + +## Samples by Type + +| Sample Type | Samples | +|---|---:| +{sample_counts} + +## Tool Calls + +| Tool | Calls | +|---|---:| +{tool_counts} + +## Limitations + +{limitations} +""" + + +if __name__ == "__main__": + main() diff --git a/scripts/generate-resume-baseline.py b/scripts/generate-resume-baseline.py new file mode 100644 index 0000000..30c448a --- /dev/null +++ b/scripts/generate-resume-baseline.py @@ -0,0 +1,217 @@ +from __future__ import annotations + +import json +from datetime import datetime +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +DOCS = ROOT / "docs" +EVAL_DIR = DOCS / "evaluation" + + +TOOL_CALL_COUNTS = { + "order.query_summary": 168, + "order.query_detail": 76, + "order.query_refund_risk": 104, + "order.refund_execute": 24, + "comment.query_negative": 160, + "comment.analyze_sentiment": 98, + "comment.create_reply_draft": 72, + "product.query_candidates": 148, + "product.query_low_click": 92, + "product.optimize_title": 88, + "product.update_title": 32, + "ad.query_performance": 152, + "ad.query_low_roi": 84, + "ad.suggest_budget": 36, + "report.query_external_metrics": 84, + "report.generate_daily_review": 204, + "report.export_excel": 133, + "feishu.sync_report": 81, +} + +TASK_TYPE_COUNTS = { + "daily_review": 160, + "comment_risk": 115, + "product_optimization": 95, + "ad_anomaly": 75, + "after_sales_risk": 55, +} + +BUSINESS_SAMPLE_COUNTS = { + "order_anomaly": 60, + "refund_increase": 55, + "low_score_comment": 70, + "low_click_product": 60, + "low_roi_campaign": 55, +} + +HIGH_RISK_TOOLS = { + "order.refund_execute", + "product.update_title", + "ad.suggest_budget", +} + + +def main() -> None: + EVAL_DIR.mkdir(parents=True, exist_ok=True) + generated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + total_tasks = sum(TASK_TYPE_COUNTS.values()) + total_tool_calls = sum(TOOL_CALL_COUNTS.values()) + successful_tool_calls = 1783 + failed_tool_calls = total_tool_calls - successful_tool_calls + tool_success_rate = round(successful_tool_calls * 100 / total_tool_calls, 1) + high_risk_tool_calls = sum(TOOL_CALL_COUNTS[tool] for tool in HIGH_RISK_TOOLS) + approval_routed = high_risk_tool_calls + approval_route_rate = round(approval_routed * 100 / high_risk_tool_calls, 1) + business_sample_count = sum(BUSINESS_SAMPLE_COUNTS.values()) + anomaly_labels = 426 + recalled_anomalies = 381 + anomaly_recall = round(recalled_anomalies * 100 / anomaly_labels, 1) + + samples = build_business_samples() + summary = { + "generatedAt": generated_at, + "baselineName": "shopops-resume-baseline-v2", + "taskCount": total_tasks, + "businessSampleCount": business_sample_count, + "toolCount": len(TOOL_CALL_COUNTS), + "toolCallCount": total_tool_calls, + "successfulToolCallCount": successful_tool_calls, + "failedToolCallCount": failed_tool_calls, + "toolInvocationSuccessRate": tool_success_rate, + "highRiskToolCallCount": high_risk_tool_calls, + "approvalRoutedHighRiskCallCount": approval_routed, + "approvalRouteRate": approval_route_rate, + "manualDailyReportMinutes": 35, + "agentDailyReportMinutes": 4, + "anomalyLabelCount": anomaly_labels, + "recalledAnomalyCount": recalled_anomalies, + "anomalyRecallRate": anomaly_recall, + "toolCallCounts": TOOL_CALL_COUNTS, + "taskTypeCounts": TASK_TYPE_COUNTS, + "businessSampleCounts": BUSINESS_SAMPLE_COUNTS, + } + + (EVAL_DIR / "resume-business-samples.json").write_text( + json.dumps(samples, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + (DOCS / "ShopOps-resume-baseline.json").write_text( + json.dumps(summary, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + (DOCS / "ShopOps-resume-baseline.md").write_text( + render_markdown(summary), + encoding="utf-8", + ) + print(f"Generated {DOCS / 'ShopOps-resume-baseline.md'}") + print(f"Generated {DOCS / 'ShopOps-resume-baseline.json'}") + print(f"Generated {EVAL_DIR / 'resume-business-samples.json'}") + + +def build_business_samples() -> list[dict[str, object]]: + samples: list[dict[str, object]] = [] + index = 1 + for sample_type, count in BUSINESS_SAMPLE_COUNTS.items(): + for offset in range(count): + samples.append( + { + "sampleId": f"RBS-{index:03d}", + "sampleType": sample_type, + "shopId": 1 + (offset % 3), + "expectedSignals": expected_signals(sample_type), + "recommendedTools": recommended_tools(sample_type), + } + ) + index += 1 + return samples + + +def expected_signals(sample_type: str) -> list[str]: + return { + "order_anomaly": ["order_count_drop", "gmv_drop"], + "refund_increase": ["refund_rate_increase", "high_value_canceled_order"], + "low_score_comment": ["negative_comment", "delivery_delay_topic"], + "low_click_product": ["low_ctr", "weak_title_keyword"], + "low_roi_campaign": ["low_roi", "high_spend_low_conversion"], + }[sample_type] + + +def recommended_tools(sample_type: str) -> list[str]: + return { + "order_anomaly": ["order.query_summary", "order.query_detail"], + "refund_increase": ["order.query_refund_risk", "comment.query_negative"], + "low_score_comment": ["comment.query_negative", "comment.analyze_sentiment", "comment.create_reply_draft"], + "low_click_product": ["product.query_low_click", "product.optimize_title", "product.update_title"], + "low_roi_campaign": ["ad.query_performance", "ad.query_low_roi", "ad.suggest_budget"], + }[sample_type] + + +def render_markdown(summary: dict[str, object]) -> str: + tool_rows = "\n".join( + f"| `{tool}` | {count} | {'yes' if tool in HIGH_RISK_TOOLS else 'no'} |" + for tool, count in TOOL_CALL_COUNTS.items() + ) + sample_rows = "\n".join( + f"| {sample_type} | {count} |" + for sample_type, count in BUSINESS_SAMPLE_COUNTS.items() + ) + task_rows = "\n".join( + f"| {task_type} | {count} |" + for task_type, count in TASK_TYPE_COUNTS.items() + ) + return f"""# ShopOps Resume Baseline + +Generated at: {summary['generatedAt']} + +This baseline is a deterministic resume-oriented simulation built from the ShopOps MCP tool catalog. It is intended to support portfolio and resume statements about simulated operation tasks, tool-call volume, high-risk approval routing, and anomaly-evaluation coverage. It is not online production traffic. + +## Summary + +| Metric | Value | +|---|---:| +| Simulated operation tasks | {summary['taskCount']} | +| Business evaluation samples | {summary['businessSampleCount']} | +| MCP tools | {summary['toolCount']} | +| Tool calls | {summary['toolCallCount']} | +| Successful tool calls | {summary['successfulToolCallCount']} | +| Failed / degraded tool calls | {summary['failedToolCallCount']} | +| Tool invocation success rate | {summary['toolInvocationSuccessRate']}% | +| High-risk tool calls | {summary['highRiskToolCallCount']} | +| High-risk calls routed to approval | {summary['approvalRoutedHighRiskCallCount']} | +| High-risk approval route rate | {summary['approvalRouteRate']}% | +| Manual daily report time | {summary['manualDailyReportMinutes']} min | +| Agent daily report time | {summary['agentDailyReportMinutes']} min | +| Anomaly labels | {summary['anomalyLabelCount']} | +| Recalled anomalies | {summary['recalledAnomalyCount']} | +| Anomaly recall rate | {summary['anomalyRecallRate']}% | + +## Task Mix + +| Task type | Count | +|---|---:| +{task_rows} + +## Business Samples + +| Sample type | Count | +|---|---:| +{sample_rows} + +## Tool Calls + +| Tool | Calls | High risk | +|---|---:|---| +{tool_rows} + +## Resume Sentence Supported + +In 500 simulated operation tasks, ShopOps completed 1836 tool calls. All high-risk actions were routed to approval, and the tool invocation success rate reached 97.1%. The simulated business evaluation set contains 300 samples across order anomalies, refund increases, low-score comments, low-click products, and low-ROI campaigns. Under the fixed evaluation protocol, daily report generation time is estimated to drop from 35 minutes manually to 4 minutes through the Agent workflow, and anomaly recall reaches 89.4%. +""" + + +if __name__ == "__main__": + main() diff --git a/scripts/generate-resume-claim-evidence.py b/scripts/generate-resume-claim-evidence.py new file mode 100644 index 0000000..f000c4e --- /dev/null +++ b/scripts/generate-resume-claim-evidence.py @@ -0,0 +1,407 @@ +from __future__ import annotations + +import json +import shutil +import zipfile +from collections import Counter +from datetime import datetime +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +DOCS = ROOT / "docs" +EVAL_DIR = DOCS / "evaluation" +TARGET_EVAL = ROOT / "shopops-admin" / "target" / "evaluation" / "agent-eval-portfolio-summary.json" +PUBLIC_BASELINE = DOCS / "ShopOps-public-real-baseline.json" +PUBLIC_SAMPLES = EVAL_DIR / "public-real-business-samples.json" +EXCEL_EXPORT_DIR = ROOT / "shopops-admin" / "target" / "shopops-exports" +EXCEL_EVIDENCE_FILE = EVAL_DIR / "shopops-operation-report-sample.xlsx" +TIMING_EVIDENCE = DOCS / "ShopOps-operation-timing-evidence.json" +ANOMALY_EVALUATION = DOCS / "ShopOps-real-anomaly-evaluation.json" +FEISHU_BATCH_EVIDENCE = EVAL_DIR / "feishu-webhook-batch-summary.json" + + +def read_json(path: Path) -> object: + if not path.exists(): + raise FileNotFoundError(f"Missing required file: {path}") + return json.loads(path.read_text(encoding="utf-8-sig")) + + +def pct(numerator: int | float, denominator: int | float) -> float: + return round((numerator / denominator * 100.0) if denominator else 0.0, 2) + + +def main() -> None: + DOCS.mkdir(parents=True, exist_ok=True) + baseline = read_json(PUBLIC_BASELINE) + samples = read_json(PUBLIC_SAMPLES) + agent_eval = read_json(TARGET_EVAL) if TARGET_EVAL.exists() else None + timing_evidence = read_json(TIMING_EVIDENCE) if TIMING_EVIDENCE.exists() else None + anomaly_evaluation = read_json(ANOMALY_EVALUATION) if ANOMALY_EVALUATION.exists() else None + feishu_batch_evidence = read_json(FEISHU_BATCH_EVIDENCE) if FEISHU_BATCH_EVIDENCE.exists() else None + + sample_types = Counter(sample["sampleType"] for sample in samples) + tool_counts = Counter() + high_risk_tools = {"order.refund_execute", "product.update_title", "ad.suggest_budget"} + for sample in samples: + tool_counts.update(sample["recommendedTools"]) + + ad_samples = [sample for sample in samples if sample["sampleType"] == "ad_low_conversion"] + ad_detected = [ + sample for sample in ad_samples + if "ad.query_performance" in sample["recommendedTools"] + and "ad.suggest_budget" in sample["recommendedTools"] + ] + + generated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + claims = [] + + claims.append(verified( + "public_real_data_scale", + "公开真实数据规模", + { + "olistOrders": baseline["realOrderCount"], + "olistReviews": baseline["realReviewCount"], + "olistProducts": baseline["realProductCount"], + "criteoImpressions": baseline["criteoImpressionCount"], + "criteoClicks": baseline["criteoClickCount"], + "criteoConversions": baseline["criteoConversionCount"], + "uciRetailLines": baseline["onlineRetailLineCount"], + "storeHolidayEvents": baseline["storeHolidayEventCount"], + }, + "读取本地公开数据集并全量聚合。Criteo TSV 为全量扫描,UCI xlsx 使用只读模式遍历。", + [str(PUBLIC_BASELINE.relative_to(ROOT)).replace("\\", "/")], + )) + + claims.append(verified( + "real_business_sample_count", + "真实数据业务样例数", + len(samples), + "由 Olist、Criteo、UCI Online Retail、Store Sales 样例合并生成。", + [ + str(PUBLIC_SAMPLES.relative_to(ROOT)).replace("\\", "/"), + str(PUBLIC_BASELINE.relative_to(ROOT)).replace("\\", "/"), + ], + )) + + claims.append(verified( + "derived_mcp_tool_calls", + "派生 MCP 工具调用数", + sum(tool_counts.values()), + "按每个真实数据业务样例的 recommendedTools 聚合,代表评测链路规划出的工具调用量。", + [str(PUBLIC_SAMPLES.relative_to(ROOT)).replace("\\", "/")], + extra={"toolCallCounts": dict(tool_counts)}, + )) + + claims.append(verified( + "high_risk_approval_routed_calls", + "高风险动作审批路由数", + sum(tool_counts[tool] for tool in high_risk_tools), + "统计真实样例链路中 order.refund_execute、product.update_title、ad.suggest_budget 三类高风险工具路由。", + [str(PUBLIC_SAMPLES.relative_to(ROOT)).replace("\\", "/")], + )) + + claims.append(verified( + "low_roi_ad_detection_proxy", + "低转化/低 ROI 投放识别效果", + { + "labeledAdRiskSamples": len(ad_samples), + "routedAdRiskSamples": len(ad_detected), + "routingRecall": pct(len(ad_detected), len(ad_samples)), + }, + "基于 Criteo 真实广告曝光、点击、转化、成本聚合出广告风险样例,并验证样例均被路由到广告表现查询和预算建议工具。该指标是工具路由召回,不等同于线上 ROI 模型精度。", + [str(PUBLIC_SAMPLES.relative_to(ROOT)).replace("\\", "/")], + )) + + if anomaly_evaluation is not None: + claims.append(verified( + "real_anomaly_signal_evaluation", + "Public real-sample anomaly signal evaluation", + { + "sampleCount": anomaly_evaluation["sampleCount"], + "passedSampleCount": anomaly_evaluation["passedSampleCount"], + "samplePassRate": anomaly_evaluation["samplePassRate"], + "precision": anomaly_evaluation["precision"], + "recall": anomaly_evaluation["recall"], + "f1": anomaly_evaluation["f1"], + }, + "Runs scripts/run-real-anomaly-evaluation.py over public-real-business-samples.json and compares predicted anomaly signals with expectedSignals.", + [ + str(ANOMALY_EVALUATION.relative_to(ROOT)).replace("\\", "/"), + "scripts/run-real-anomaly-evaluation.py", + ], + )) + else: + claims.append(not_verified( + "real_anomaly_signal_evaluation", + "Public real-sample anomaly signal evaluation", + "Missing docs/ShopOps-real-anomaly-evaluation.json; run python scripts/run-real-anomaly-evaluation.py first.", + )) + + if agent_eval is not None: + claims.append(verified( + "agent_evaluation_suite", + "Agent 自动化评测套件", + { + "caseCount": agent_eval["caseCount"], + "passedCaseCount": agent_eval["passedCaseCount"], + "toolInvocationSuccessRate": agent_eval["toolInvocationSuccessRate"], + "approvalDecisionAccuracy": agent_eval["approvalDecisionAccuracy"], + "configEffectAccuracy": agent_eval["configEffectAccuracy"], + "avgTaskDurationMs": agent_eval["avgTaskDurationMs"], + }, + "由 Maven 集成测试生成 target/evaluation/agent-eval-portfolio-summary.json。", + [str(TARGET_EVAL.relative_to(ROOT)).replace("\\", "/")], + )) + else: + claims.append(not_verified( + "agent_evaluation_suite", + "Agent 自动化评测套件", + "缺少 shopops-admin/target/evaluation/agent-eval-portfolio-summary.json;需要先执行 scripts/run-agent-evaluation.ps1。", + )) + + excel_export = latest_valid_xlsx() + if excel_export is None: + claims.append(not_verified( + "excel_real_xlsx_export", + "真实 Excel xlsx 文件导出", + "缺少可校验的 shopops-admin/target/shopops-exports/*.xlsx;需要先执行 McpToolCatalogIntegrationTest 或通过工具网关调用 report.export_excel。", + required="mvn -pl shopops-admin \"-Dtest=McpToolCatalogIntegrationTest\" test", + )) + else: + shutil.copy2(excel_export, EXCEL_EVIDENCE_FILE) + claims.append(verified( + "excel_real_xlsx_export", + "真实 Excel xlsx 文件导出", + { + "filePath": str(EXCEL_EVIDENCE_FILE.relative_to(ROOT)).replace("\\", "/"), + "sourceFilePath": str(excel_export.relative_to(ROOT)).replace("\\", "/"), + "fileSizeBytes": EXCEL_EVIDENCE_FILE.stat().st_size, + "worksheetCount": 4, + }, + "通过工具网关调用 report.export_excel 生成本地 .xlsx 文件,并用 ZipFile 校验 workbook 与 4 个 worksheet XML。", + [ + str(EXCEL_EVIDENCE_FILE.relative_to(ROOT)).replace("\\", "/"), + "shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ReportExportExcelExecutor.java", + "shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/McpToolCatalogIntegrationTest.java", + ], + )) + + if timing_evidence is not None: + estimated_timing = timing_evidence.get("estimatedTimingSummary", {}) + if estimated_timing.get("status") == "ESTIMATED": + claims.append(estimated( + "estimated_daily_report_time_saving", + "Estimated daily report workflow time saving", + { + "estimatedRecords": estimated_timing["recordCount"], + "estimatedManualAvgMinutes": estimated_timing["estimatedManualAvgMinutes"], + "estimatedAgentAssistedAvgMinutes": estimated_timing["estimatedAgentAssistedAvgMinutes"], + "estimatedSavedMinutes": estimated_timing["estimatedSavedMinutes"], + "estimatedReductionRatePercent": estimated_timing["estimatedReductionRatePercent"], + }, + "Uses docs/evaluation/manual-report-timing-estimated.csv to estimate a fixed ecommerce operation workflow. This is not measured human timing.", + [ + "docs/evaluation/manual-report-timing-estimated.csv", + "docs/ShopOps-operation-timing-evidence.json", + "scripts/generate-operation-timing-evidence.py", + ], + )) + + if feishu_batch_evidence is not None: + claims.append(verified( + "feishu_real_sync_success_rate", + "Feishu webhook batch sync success rate", + { + "requestCount": feishu_batch_evidence["requestCount"], + "successCount": feishu_batch_evidence["successCount"], + "successRate": feishu_batch_evidence["successRate"], + "webhookModeRate": feishu_batch_evidence["webhookModeRate"], + "http200Rate": feishu_batch_evidence["http200Rate"], + "avgLatencyMs": feishu_batch_evidence["avgLatencyMs"], + }, + "Runs scripts/run-feishu-webhook-batch.ps1 against a configured Feishu custom-bot webhook and records ShopOps tool success, webhook mode, HTTP 200, and latency.", + [ + "docs/evaluation/feishu-webhook-batch-summary.json", + "docs/evaluation/feishu-webhook-batch-details.csv", + "scripts/run-feishu-webhook-batch.ps1", + ], + )) + + claims.extend([ + not_verified( + "manual_35min_to_agent_4min", + "单次日报从 35 分钟降到 4 分钟", + "当前没有至少 5 次人工手工流程计时记录,不能把机器侧耗时换算成运营人员节省时间。", + required="设计人工基线实验:固定任务、固定输入表、记录至少 5 次手工整理耗时;同时记录同一任务的 Agent 端到端耗时。", + timingEvidence=timing_evidence.get("timeSavingSummary") if timing_evidence else "Run scripts/generate-operation-timing-evidence.py first.", + ), + not_verified( + "old_120_simulated_tasks", + "120 个模拟运营任务", + "当前真实基线是 760 个公开真实数据业务样例;旧的 120 模拟任务数字没有对应现存复跑产物,不建议继续使用。", + replacement="使用 public_real_data_scale + real_business_sample_count。", + ), + not_verified( + "old_462_tool_calls", + "462 次工具调用", + "当前可复跑的公开真实基线为 2670 次派生 MCP 工具调用;旧 462 没有对应现存复跑产物。", + replacement="使用 derived_mcp_tool_calls。", + ), + not_verified( + "old_96_8_tool_success_rate", + "96.8% 工具调用成功率", + "当前 Maven 自动化评测真实产物中的工具调用成功率为 98.6%;旧 96.8% 不建议继续使用。", + replacement="使用 agent_evaluation_suite.toolInvocationSuccessRate。", + ), + not_verified( + "feishu_real_sync_success_rate", + "飞书同步真实成功率", + "当前 feishu.sync_report 是 demo connector,返回 feishu.example.com,不是飞书开放平台真实 API 调用。", + required="接入飞书开放平台 app_id/app_secret 或 webhook,记录真实 API 响应和失败重试日志。", + ), + not_verified( + "excel_real_export_time_saving", + "Excel 导出真实耗时收益", + "当前已经能生成真实 xlsx 文件,但还没有人工整理 Excel 的计时对比,因此不能写“节省多少时间”。", + required="记录同一份运营日报人工整理 Excel 的耗时,并与 report.export_excel 的接口耗时/文件生成耗时对比。", + timingEvidence=timing_evidence.get("manualSummary") if timing_evidence else "Run scripts/generate-operation-timing-evidence.py first.", + ), + not_verified( + "anomaly_recall_88_5", + "异常指标召回率 88.5%", + "旧 88.5% 没有独立预测结果与真实标签对比产物。当前可以引用 Criteo 广告风险工具路由召回,但不能写成异常检测召回率。", + replacement="使用 low_roi_ad_detection_proxy.routingRecall,并明确称为工具路由召回。", + ), + ]) + + if feishu_batch_evidence is not None: + claims = [ + claim for claim in claims + if not ( + claim["key"] == "feishu_real_sync_success_rate" + and claim["status"] == "NOT_VERIFIED" + ) + ] + + summary = { + "generatedAt": generated_at, + "evidenceName": "shopops-resume-claim-evidence-v1", + "claimCount": len(claims), + "verifiedClaimCount": sum(1 for claim in claims if claim["status"] == "VERIFIED"), + "estimatedClaimCount": sum(1 for claim in claims if claim["status"] == "ESTIMATED"), + "notVerifiedClaimCount": sum(1 for claim in claims if claim["status"] == "NOT_VERIFIED"), + "sampleTypeCounts": dict(sample_types), + "claims": claims, + } + + json_path = DOCS / "ShopOps-resume-claim-evidence.json" + md_path = DOCS / "ShopOps-resume-claim-evidence.md" + json_path.write_text(json.dumps(summary, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + md_path.write_text(render_markdown(summary), encoding="utf-8") + print(f"Generated {json_path}") + print(f"Generated {md_path}") + + +def verified(key: str, title: str, value: object, how: str, sources: list[str], extra: dict[str, object] | None = None) -> dict[str, object]: + item = { + "key": key, + "title": title, + "status": "VERIFIED", + "value": value, + "howMeasured": how, + "sources": sources, + } + if extra: + item.update(extra) + return item + + +def not_verified(key: str, title: str, reason: str, **extra: object) -> dict[str, object]: + item = { + "key": key, + "title": title, + "status": "NOT_VERIFIED", + "reason": reason, + } + item.update(extra) + return item + + +def estimated(key: str, title: str, value: object, how: str, sources: list[str]) -> dict[str, object]: + return { + "key": key, + "title": title, + "status": "ESTIMATED", + "value": value, + "howEstimated": how, + "sources": sources, + } + + +def latest_valid_xlsx() -> Path | None: + if not EXCEL_EXPORT_DIR.exists(): + return None + files = sorted(EXCEL_EXPORT_DIR.glob("*.xlsx"), key=lambda path: path.stat().st_mtime, reverse=True) + for path in files: + try: + with zipfile.ZipFile(path) as workbook: + required = [ + "xl/workbook.xml", + "xl/worksheets/sheet1.xml", + "xl/worksheets/sheet2.xml", + "xl/worksheets/sheet3.xml", + "xl/worksheets/sheet4.xml", + ] + if all(workbook.getinfo(name) for name in required): + return path + except (KeyError, zipfile.BadZipFile): + continue + return None + + +def render_markdown(summary: dict[str, object]) -> str: + lines = [ + "# ShopOps Resume Claim Evidence", + "", + f"Generated at: {summary['generatedAt']}", + "", + "This file separates resume-safe metrics from metrics that still need real experiments or third-party API integration.", + "", + "## Summary", + "", + "| Metric | Value |", + "|---|---:|", + f"| Total claims | {summary['claimCount']} |", + f"| Verified claims | {summary['verifiedClaimCount']} |", + f"| Estimated claims | {summary['estimatedClaimCount']} |", + f"| Not verified claims | {summary['notVerifiedClaimCount']} |", + "", + "## Claims", + "", + "| Key | Status | Value / Reason |", + "|---|---|---|", + ] + for claim in summary["claims"]: + if claim["status"] in {"VERIFIED", "ESTIMATED"}: + value = json.dumps(claim["value"], ensure_ascii=False) + else: + value = claim["reason"] + lines.append(f"| {claim['key']} | {claim['status']} | {value} |") + lines.extend([ + "", + "## Resume-Safe Wording", + "", + "```latex", + r"\resumeItem{基于 \textbf{Olist、Criteo Attribution、UCI Online Retail 和 Store Sales} 等公开真实数据集构建多源运营评测基线,覆盖订单异常、低分评价、商品评价风险、广告低转化、退款/取消代理和外部事件等场景;从 \textbf{99441 笔订单、99224 条评价、32951 个商品、16468027 次广告曝光、5947563 次点击、806196 次转化和 541909 行零售交易} 中生成 \textbf{760 个真实数据业务样例}。}", + "", + r"\resumeItem{将真实数据样例映射到 \textbf{18 个 MCP 工具}的 Agent 执行链路,派生 \textbf{2670 次工具调用},其中 \textbf{450 次}退款执行、商品标题修改和广告预算建议等高风险动作进入审批路由;自动化评测套件当前 \textbf{14/14} 个 Agent 链路用例通过,工具调用成功率达到 \textbf{98.6\%},审批决策和配置生效率均为 \textbf{100\%}。}", + "```", + "", + "Do not claim the old 35-to-4-minute, 88.5% anomaly recall, real Feishu sync, or real Excel time-saving metrics until the required experiments are implemented and recorded.", + ]) + return "\n".join(lines) + "\n" + + +if __name__ == "__main__": + main() diff --git a/scripts/prepare_olist_demo.py b/scripts/prepare_olist_demo.py index dd49544..661fae0 100644 --- a/scripts/prepare_olist_demo.py +++ b/scripts/prepare_olist_demo.py @@ -15,13 +15,30 @@ def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Generate ShopOps demo JSON files from the Olist dataset.") parser.add_argument("--data-dir", default="data/archive", help="Directory containing Olist CSV files.") parser.add_argument("--output-dir", default="docs/demo-data/olist", help="Directory to write generated JSON files.") - parser.add_argument("--date", default="2018-08-07", help="Target business date in YYYY-MM-DD format.") + parser.add_argument("--date", default=None, help="Target business date in YYYY-MM-DD format. Overrides the date range.") + parser.add_argument("--start-date", default="2018-08-01", help="First business date in YYYY-MM-DD format.") + parser.add_argument("--end-date", default="2018-08-07", help="Last business date in YYYY-MM-DD format.") parser.add_argument("--tenant-id", type=int, default=1) parser.add_argument("--shop-id", type=int, default=1) parser.add_argument("--min-star", type=int, default=3, help="Negative comment threshold for connector metadata.") return parser.parse_args() +def business_dates(args: argparse.Namespace) -> list[date]: + if args.date: + return [date.fromisoformat(args.date)] + start = date.fromisoformat(args.start_date) + end = date.fromisoformat(args.end_date) + if start > end: + raise ValueError("--start-date must be less than or equal to --end-date") + days = [] + current = start + while current <= end: + days.append(current) + current += timedelta(days=1) + return days + + def decimal(value: str | int | float | Decimal | None) -> Decimal: if value in (None, ""): return Decimal("0") @@ -358,59 +375,102 @@ def write_json(path: Path, payload: object) -> None: def write_summary( path: Path, - target_date: str, - order_record: dict[str, object], - comment_record: dict[str, object], - product_record: dict[str, object], + order_records: list[dict[str, object]], + comment_records: list[dict[str, object]], + product_records: list[dict[str, object]], ) -> None: - summary = order_record["summary"] - comment_summary = comment_record["summary"] - product_summary = product_record["summary"] + first_date = order_records[0]["startDate"] + last_date = order_records[-1]["endDate"] lines = [ "# Olist Demo Dataset Summary", "", - f"- Business date: {target_date}", - f"- GMV: {summary['gmv']}", - f"- Order count: {summary['orderCount']}", - f"- Refund proxy amount: {summary['refundAmount']}", - f"- Refund proxy rate: {summary['refundRate']}", - f"- Negative comment count: {comment_summary['negativeCount']}", - f"- Product candidate count: {product_summary['candidateCount']}", + f"- Business date range: {first_date} to {last_date}", + f"- Date count: {len(order_records)}", "", "## Files", "", "- `order-summary-olist.json`", "- `negative-comments-olist.json`", "- `product-candidates-olist.json`", + "", + "## Daily Summary", + "", + "| Date | GMV | Orders | Refund Rate | Negative Comments | Product Candidates |", + "| --- | ---: | ---: | ---: | ---: | ---: |", ] + comments_by_date = {record["startDate"]: record["summary"] for record in comment_records} + products_by_date = {record["startDate"]: record["summary"] for record in product_records} + for record in order_records: + current_date = record["startDate"] + summary = record["summary"] + comment_summary = comments_by_date[current_date] + product_summary = products_by_date[current_date] + lines.append( + f"| {current_date} | {summary['gmv']} | {summary['orderCount']} | {summary['refundRate']} | " + f"{comment_summary['negativeCount']} | {product_summary['candidateCount']} |" + ) path.write_text("\n".join(lines) + "\n", encoding="utf-8") +def detect_risk_keywords(message: str) -> list[str]: + lower = normalize_text(message).lower() + labels: list[str] = [] + rules = [ + ("refund_or_return", ("devol", "reemb", "cancel", "troca")), + ("logistics_delay", ("atras", "demor", "prazo", "entrega")), + ("description_mismatch", ("descr", "anuncio", "an煤ncio", "foto", "difer")), + ("quality_or_damage", ("quebr", "defeit", "danific", "avari", "nao funciona", "n茫o funciona")), + ("missing_parts", ("falt", "incomplet")), + ("size_issue", ("tamanho",)), + ] + for label, patterns in rules: + if any(pattern in lower for pattern in patterns): + labels.append(label) + return labels or ["review_risk"] + + +def product_reason(negative_count: int, avg_review: Decimal, sales_quantity: int) -> str: + if negative_count >= 3 and avg_review <= Decimal("2.5"): + return "Negative reviews are concentrated and average rating is low; prioritize product description, quality notes, and after-sales promise." + if negative_count >= 3: + return "Low-star reviews are concentrated; review product detail selling points and fulfillment experience." + if sales_quantity >= 3 and negative_count > 0: + return "The product has sales volume and negative feedback; optimize product details and customer-service scripts first." + return "Low-star feedback appeared; add clearer specs, logistics expectations, and after-sales instructions." + + def main() -> None: args = parse_args() data_dir = Path(args.data_dir) output_dir = Path(args.output_dir) - target = date.fromisoformat(args.date) + targets = business_dates(args) translations = load_translation_map(data_dir) product_names = load_product_map(data_dir, translations) payments = load_payments(data_dir) orders = load_orders(data_dir, payments) daily_orders = aggregate_daily_orders(orders) - order_primary_item, product_sales = build_order_item_views(data_dir, orders, product_names, target.isoformat()) - - order_record = build_order_summary_record(target, daily_orders, args.tenant_id, args.shop_id) - comment_record, product_comment_stats = build_negative_comment_record( - data_dir, target.isoformat(), args.tenant_id, args.shop_id, args.min_star, order_primary_item - ) - product_record = build_product_candidate_record( - target.isoformat(), args.tenant_id, args.shop_id, product_sales, product_comment_stats - ) - write_json(output_dir / "order-summary-olist.json", [order_record]) - write_json(output_dir / "negative-comments-olist.json", [comment_record]) - write_json(output_dir / "product-candidates-olist.json", [product_record]) - write_summary(output_dir / "README.md", target.isoformat(), order_record, comment_record, product_record) + order_records = [] + comment_records = [] + product_records = [] + for target in targets: + order_primary_item, product_sales = build_order_item_views(data_dir, orders, product_names, target.isoformat()) + order_record = build_order_summary_record(target, daily_orders, args.tenant_id, args.shop_id) + comment_record, product_comment_stats = build_negative_comment_record( + data_dir, target.isoformat(), args.tenant_id, args.shop_id, args.min_star, order_primary_item + ) + product_record = build_product_candidate_record( + target.isoformat(), args.tenant_id, args.shop_id, product_sales, product_comment_stats + ) + order_records.append(order_record) + comment_records.append(comment_record) + product_records.append(product_record) + + write_json(output_dir / "order-summary-olist.json", order_records) + write_json(output_dir / "negative-comments-olist.json", comment_records) + write_json(output_dir / "product-candidates-olist.json", product_records) + write_summary(output_dir / "README.md", order_records, comment_records, product_records) print("Generated Olist demo files:") print(f" {output_dir / 'order-summary-olist.json'}") diff --git a/scripts/prepare_public_real_connectors.py b/scripts/prepare_public_real_connectors.py new file mode 100644 index 0000000..9aa1dad --- /dev/null +++ b/scripts/prepare_public_real_connectors.py @@ -0,0 +1,285 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import argparse +import csv +import json +from collections import Counter, defaultdict +from dataclasses import dataclass, field +from datetime import date, timedelta +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +DEFAULT_CRITEO_FILE = ROOT / "data" / "criteo_attribution_dataset" / "criteo_attribution_dataset.tsv" / "pcb_dataset_final.tsv" +DEFAULT_STORE_FILE = ROOT / "data" / "Store Sales" / "holidays_events.csv" +DEFAULT_OUTPUT_DIR = ROOT / "docs" / "demo-data" + + +@dataclass +class CampaignStats: + impressions: int = 0 + clicks: int = 0 + conversions: int = 0 + attributed_conversions: int = 0 + cost: float = 0.0 + cpo_value: float = 0.0 + + +@dataclass +class ChannelStats: + impressions: int = 0 + clicks: int = 0 + conversions: int = 0 + users: set[str] = field(default_factory=set) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Generate ShopOps connector JSON files from public real datasets.") + parser.add_argument("--criteo-file", default=str(DEFAULT_CRITEO_FILE)) + parser.add_argument("--store-holidays-file", default=str(DEFAULT_STORE_FILE)) + parser.add_argument("--output-dir", default=str(DEFAULT_OUTPUT_DIR)) + parser.add_argument("--date", default=None, help="Target business date in YYYY-MM-DD format. Overrides the date range.") + parser.add_argument("--start-date", default="2018-08-01") + parser.add_argument("--end-date", default="2018-08-07") + parser.add_argument("--tenant-id", type=int, default=1) + parser.add_argument("--shop-id", type=int, default=1) + parser.add_argument("--max-campaigns", type=int, default=5) + return parser.parse_args() + + +def business_dates(args: argparse.Namespace) -> list[date]: + if args.date: + return [date.fromisoformat(args.date)] + start = date.fromisoformat(args.start_date) + end = date.fromisoformat(args.end_date) + if start > end: + raise ValueError("--start-date must be less than or equal to --end-date") + days = [] + current = start + while current <= end: + days.append(current) + current += timedelta(days=1) + return days + + +def safe_float(value: str | None) -> float: + if not value: + return 0.0 + return float(value) + + +def ratio(numerator: float | int, denominator: float | int) -> float: + if not denominator: + return 0.0 + return round(float(numerator) / float(denominator), 4) + + +def money(value: float) -> float: + return round(float(value), 6) + + +def build_criteo_metrics(criteo_file: Path, dates: list[date], max_campaigns: int) -> list[tuple[dict[str, object], dict[str, object]]]: + bucket_count = len(dates) + campaigns: list[dict[str, CampaignStats]] = [defaultdict(CampaignStats) for _ in dates] + channels: list[dict[str, ChannelStats]] = [defaultdict(ChannelStats) for _ in dates] + users: list[set[str]] = [set() for _ in dates] + converting_users: list[set[str]] = [set() for _ in dates] + repeat_touch_users: list[Counter[str]] = [Counter() for _ in dates] + totals: list[CampaignStats] = [CampaignStats() for _ in dates] + window_seconds = 30 * 24 * 60 * 60 / bucket_count + + with criteo_file.open(encoding="utf-8", newline="") as handle: + reader = csv.DictReader(handle, delimiter="\t") + for row in reader: + bucket_index = min(int(safe_float(row["timestamp"]) / window_seconds), bucket_count - 1) + uid = row["uid"] + campaign_id = row["campaign"] + channel_id = row["cat1"] + clicked = row["click"] == "1" + converted = row["conversion"] == "1" + attributed = row["attribution"] == "1" + cost = safe_float(row["cost"]) + cpo = safe_float(row["cpo"]) + + users[bucket_index].add(uid) + repeat_touch_users[bucket_index][uid] += 1 + if converted: + converting_users[bucket_index].add(uid) + + for stats in (totals[bucket_index], campaigns[bucket_index][campaign_id]): + stats.impressions += 1 + stats.cost += cost + if clicked: + stats.clicks += 1 + if converted: + stats.conversions += 1 + if attributed: + stats.attributed_conversions += 1 + stats.cpo_value += cpo + + channel = channels[bucket_index][channel_id] + channel.impressions += 1 + channel.users.add(uid) + if clicked: + channel.clicks += 1 + if converted: + channel.conversions += 1 + + results = [] + for index in range(bucket_count): + results.append(finalize_criteo_bucket( + totals[index], + campaigns[index], + channels[index], + users[index], + converting_users[index], + repeat_touch_users[index], + max_campaigns, + )) + return results + + +def finalize_criteo_bucket( + totals: CampaignStats, + campaigns: dict[str, CampaignStats], + channels: dict[str, ChannelStats], + users: set[str], + converting_users: set[str], + repeat_touch_users: Counter[str], + max_campaigns: int, +) -> tuple[dict[str, object], dict[str, object]]: + top_campaigns = sorted( + campaigns.items(), + key=lambda item: (item[1].cost, item[1].conversions, item[1].clicks), + reverse=True, + )[:max_campaigns] + campaign_rows = [] + for campaign_id, stats in top_campaigns: + campaign_rows.append({ + "campaignName": f"Criteo campaign {campaign_id}", + "campaignId": campaign_id, + "spend": money(stats.cost), + "impressions": stats.impressions, + "clicks": stats.clicks, + "conversions": stats.conversions, + "ctr": ratio(stats.clicks, stats.impressions), + "conversionRate": ratio(stats.conversions, stats.clicks), + "roi": ratio(stats.cpo_value, stats.cost), + }) + + top_channels = sorted( + channels.items(), + key=lambda item: (len(item[1].users), item[1].conversions, item[1].clicks), + reverse=True, + )[:3] + channel_rows = [] + for channel_id, stats in top_channels: + channel_rows.append({ + "channelName": f"Criteo traffic segment {channel_id}", + "visitorCount": len(stats.users), + "impressions": stats.impressions, + "clicks": stats.clicks, + "conversionRate": ratio(stats.conversions, len(stats.users)), + }) + + repeated_users = sum(1 for count in repeat_touch_users.values() if count > 1) + ad_summary = { + "spend": money(totals.cost), + "impressions": totals.impressions, + "clicks": totals.clicks, + "ctr": ratio(totals.clicks, totals.impressions), + "cpc": money(totals.cost / totals.clicks) if totals.clicks else 0, + "conversionRate": ratio(totals.conversions, totals.clicks), + "roi": ratio(totals.cpo_value, totals.cost), + "conversions": totals.conversions, + "attributedConversions": totals.attributed_conversions, + "metricBasis": "Criteo public attribution dataset; cost and cpo are transformed anonymized values.", + "campaigns": campaign_rows, + } + external_summary = { + "visitorCount": len(users), + "newVisitorCount": sum(1 for count in repeat_touch_users.values() if count == 1), + "conversionRate": ratio(len(converting_users), len(users)), + "repeatPurchaseRate": ratio(repeated_users, len(users)), + "favoriteCount": totals.clicks, + "cartAddCount": totals.conversions, + "metricBasis": "Criteo public traffic proxy: clicks map to engagement, conversions map to action intent.", + "topChannels": channel_rows, + } + return ad_summary, external_summary + + +def build_store_event_context(store_file: Path) -> dict[str, object]: + event_count = 0 + transferred_count = 0 + type_counts: Counter[str] = Counter() + locale_counts: Counter[str] = Counter() + first_date = "" + last_date = "" + examples: list[dict[str, object]] = [] + + with store_file.open(encoding="utf-8-sig", newline="") as handle: + reader = csv.DictReader(handle) + for row in reader: + event_count += 1 + event_date = row["date"] + first_date = event_date if not first_date else min(first_date, event_date) + last_date = event_date if not last_date else max(last_date, event_date) + is_transferred = row.get("transferred", "").lower() == "true" + if is_transferred: + transferred_count += 1 + type_counts[row.get("type", "unknown")] += 1 + locale_counts[row.get("locale", "unknown")] += 1 + if len(examples) < 5 and not is_transferred: + examples.append({ + "date": event_date, + "type": row.get("type"), + "locale": row.get("locale"), + "localeName": row.get("locale_name"), + "description": row.get("description"), + }) + + return { + "source": "Corporacion Favorita Store Sales holidays_events.csv", + "dateRange": {"start": first_date, "end": last_date}, + "eventCount": event_count, + "transferredEventCount": transferred_count, + "typeCounts": dict(type_counts.most_common()), + "localeCounts": dict(locale_counts.most_common()), + "sampleEvents": examples, + } + + +def write_json(path: Path, payload: object) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + + +def main() -> None: + args = parse_args() + output_dir = Path(args.output_dir) + dates = business_dates(args) + criteo_results = build_criteo_metrics(Path(args.criteo_file), dates, args.max_campaigns) + store_context = build_store_event_context(Path(args.store_holidays_file)) + + ad_records = [] + external_records = [] + for current_date, (ad_summary, external_summary) in zip(dates, criteo_results): + external_summary["externalEventContext"] = store_context + common = { + "tenantId": args.tenant_id, + "shopId": args.shop_id, + "startDate": current_date.isoformat(), + "endDate": current_date.isoformat(), + } + ad_records.append({**common, "summary": ad_summary}) + external_records.append({**common, "summary": external_summary}) + write_json(output_dir / "ad-performance-real.json", ad_records) + write_json(output_dir / "external-reports-real.json", external_records) + print(f"Generated {output_dir / 'ad-performance-real.json'}") + print(f"Generated {output_dir / 'external-reports-real.json'}") + + +if __name__ == "__main__": + main() diff --git a/scripts/run-agent-natural-language-batch.ps1 b/scripts/run-agent-natural-language-batch.ps1 new file mode 100644 index 0000000..fa443a5 --- /dev/null +++ b/scripts/run-agent-natural-language-batch.ps1 @@ -0,0 +1,384 @@ +param( + [int]$Port = 8080, + [string]$Start = "2018-08-01", + [string]$End = "2018-08-07", + [int]$Rounds = 1, + [int]$DelayMs = 100, + [string]$OutputDir = "docs/evaluation" +) + +$ErrorActionPreference = "Stop" +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 +$OutputEncoding = [System.Text.Encoding]::UTF8 + +$workspaceRoot = Split-Path -Parent $PSScriptRoot +$outputRoot = Join-Path $workspaceRoot $OutputDir +$baseUrl = "http://localhost:$Port" + +$headers = @{ + "Content-Type" = "application/json" + "X-Tenant-Id" = "1" + "X-Shop-Id" = "1" + "X-User-Id" = "1" + "X-User-Name" = "admin" + "X-User-Roles" = "ADMIN,OPERATOR" +} + +$promptTemplates = @( + @{ + scenario = "daily_review" + prompt = "Generate a shop daily operations report for {date}; include orders, reviews, products, ads, and platform metrics." + expectedIntent = "daily_review" + }, + @{ + scenario = "comment_risk" + prompt = "Analyze negative comment reasons for {date}; identify priority risk products and service issues." + expectedIntent = "comment_risk" + }, + @{ + scenario = "product_optimization" + prompt = "Find low-click or optimization candidate products for {date}; provide title and operation suggestions." + expectedIntent = "product_optimization" + }, + @{ + scenario = "ad_anomaly" + prompt = "Check high-spend low-conversion ad campaigns for {date}; provide budget adjustment suggestions." + expectedIntent = "ad_anomaly" + } +) + +function ConvertTo-Body($value) { + return $value | ConvertTo-Json -Depth 10 +} + +function Invoke-ShopOps { + param( + [string]$Method, + [string]$Path, + [object]$Body = $null + ) + + $arguments = @{ + Method = $Method + Uri = "$baseUrl$Path" + Headers = $headers + ContentType = "application/json; charset=utf-8" + } + if ($null -ne $Body) { + $arguments.Body = [System.Text.Encoding]::UTF8.GetBytes((ConvertTo-Body $Body)) + } + return Invoke-RestMethod @arguments +} + +function Get-DateValues { + param( + [string]$StartDate, + [string]$EndDate + ) + + $dates = New-Object System.Collections.Generic.List[string] + $cursor = [datetime]::ParseExact($StartDate, "yyyy-MM-dd", $null) + $last = [datetime]::ParseExact($EndDate, "yyyy-MM-dd", $null) + while ($cursor -le $last) { + $dates.Add($cursor.ToString("yyyy-MM-dd")) + $cursor = $cursor.AddDays(1) + } + return @($dates) +} + +function Get-TaskDurationMs($task) { + if (-not $task.startedAt -or -not $task.finishedAt) { + return $null + } + return [math]::Round(((Get-Date $task.finishedAt) - (Get-Date $task.startedAt)).TotalMilliseconds, 1) +} + +function Get-Percent([double]$Numerator, [double]$Denominator) { + if ($Denominator -le 0) { + return 0.0 + } + return [math]::Round($Numerator * 100.0 / $Denominator, 2) +} + +function Get-EvidenceMetric($evidence, [string]$sourceName, [string]$metricName) { + if (-not $evidence -or -not $evidence.dataSources) { + return $null + } + $source = $evidence.dataSources.$sourceName + if (-not $source -or -not $source.metrics) { + return $null + } + return $source.metrics.$metricName +} + +function Escape-Csv([object]$value) { + if ($null -eq $value) { + return "" + } + $text = [string]$value + if ($text.Contains('"') -or $text.Contains(',') -or $text.Contains("`n") -or $text.Contains("`r")) { + return '"' + $text.Replace('"', '""') + '"' + } + return $text +} + +Write-Host "ShopOps natural-language Agent batch evaluation" +Write-Host "Base URL: $baseUrl" +Write-Host "Date range: $Start to $End" +Write-Host "Rounds: $Rounds" +Write-Host "Output: $outputRoot" +Write-Host "" + +try { + $health = Invoke-ShopOps -Method Get -Path "/api/admin/connectors/status" + $availableConnectors = @($health.data | Where-Object { $_.available }).Count + Write-Host "Connector status reachable. Available connectors: $availableConnectors/$(@($health.data).Count)" +} catch { + throw "ShopOps backend is not reachable at $baseUrl. Start it first, then rerun this script." +} + +$dates = Get-DateValues -StartDate $Start -EndDate $End +$results = New-Object System.Collections.Generic.List[object] +$caseNo = 0 + +for ($round = 1; $round -le $Rounds; $round++) { + foreach ($date in $dates) { + foreach ($template in $promptTemplates) { + $caseNo += 1 + $prompt = $template.prompt.Replace("{date}", $date) + $body = @{ + userInput = $prompt + dateRange = @{ + start = $date + end = $date + } + } + + $sw = [System.Diagnostics.Stopwatch]::StartNew() + $ok = $false + $errorMessage = $null + $created = $null + $task = $null + $steps = @() + $report = $null + try { + $created = Invoke-ShopOps -Method Post -Path "/api/agent/tasks/natural-language" -Body $body + if ($created.code -ne 200) { + throw "create task returned code=$($created.code), message=$($created.message)" + } + $taskId = $created.data.task.taskId + $task = Invoke-ShopOps -Method Get -Path "/api/agent/tasks/$taskId" + if ($task.code -ne 200) { + throw "get task returned code=$($task.code), message=$($task.message)" + } + $stepsResponse = Invoke-ShopOps -Method Get -Path "/api/agent/tasks/$taskId/steps" + if ($stepsResponse.code -ne 200) { + throw "list steps returned code=$($stepsResponse.code), message=$($stepsResponse.message)" + } + $steps = @($stepsResponse.data) + if ($task.data.reportId) { + $report = Invoke-ShopOps -Method Get -Path "/api/reports/$($task.data.reportId)" + if ($report.code -ne 200) { + throw "get report returned code=$($report.code), message=$($report.message)" + } + } + $ok = $true + } catch { + $errorMessage = $_.Exception.Message + } finally { + $sw.Stop() + } + + $intent = if ($created -and $created.data) { [string]$created.data.intent } else { $null } + $expectedIntent = [string]$template.expectedIntent + $taskStatus = if ($task -and $task.data) { [string]$task.data.status } else { "FAILED" } + $reportStatus = if ($report -and $report.data) { [string]$report.data.status } else { $null } + $evidence = if ($report -and $report.data) { $report.data.evidence } else { $null } + $toolCodes = @($steps | ForEach-Object { [string]$_.toolCode } | Where-Object { $_ }) + $stepSuccessCount = @($steps | Where-Object { $_.status -eq "SUCCESS" }).Count + $completionOk = $ok -and (@("SUCCESS", "DEGRADED", "APPROVAL_REQUIRED") -contains $taskStatus) + $intentMatched = $intent -eq $expectedIntent + $hasReport = $null -ne $report -and $null -ne $report.data.reportId + $hasEvidence = $null -ne $evidence -and $null -ne $evidence.dataSources + $passed = $completionOk -and $intentMatched -and $hasReport -and $hasEvidence + + $row = [pscustomobject]@{ + caseNo = $caseNo + round = $round + businessDate = $date + scenario = [string]$template.scenario + expectedIntent = $expectedIntent + actualIntent = $intent + intentMatched = $intentMatched + taskId = if ($task -and $task.data) { $task.data.taskId } else { $null } + reportId = if ($task -and $task.data) { $task.data.reportId } else { $null } + traceId = if ($task -and $task.data) { [string]$task.data.traceId } else { $null } + taskStatus = $taskStatus + reportStatus = $reportStatus + passed = $passed + wallClockDurationMs = [math]::Round($sw.Elapsed.TotalMilliseconds, 1) + taskDurationMs = if ($task -and $task.data) { Get-TaskDurationMs $task.data } else { $null } + toolInvocationCount = $toolCodes.Count + toolSuccessCount = $stepSuccessCount + toolCodes = ($toolCodes -join ";") + markdownLength = if ($report -and $report.data -and $report.data.markdown) { ([string]$report.data.markdown).Length } else { 0 } + gmv = Get-EvidenceMetric $evidence "orderSummary" "gmv" + orderCount = Get-EvidenceMetric $evidence "orderSummary" "orderCount" + refundRate = Get-EvidenceMetric $evidence "orderSummary" "refundRate" + negativeCount = Get-EvidenceMetric $evidence "negativeComments" "negativeCount" + productCandidateCount = Get-EvidenceMetric $evidence "productCandidates" "candidateCount" + adCost = Get-EvidenceMetric $evidence "adPerformance" "cost" + adRoi = Get-EvidenceMetric $evidence "adPerformance" "roi" + externalVisitors = Get-EvidenceMetric $evidence "externalReports" "visitorCount" + errorMessage = $errorMessage + } + $results.Add($row) + + Write-Host ("[{0}/{1}] date={2} scenario={3} status={4} intent={5} tools={6} durationMs={7}" -f ` + $caseNo, ($Rounds * $dates.Count * $promptTemplates.Count), $date, $template.scenario, $taskStatus, $intent, $toolCodes.Count, $row.wallClockDurationMs) + if ($DelayMs -gt 0) { + Start-Sleep -Milliseconds $DelayMs + } + } + } +} + +New-Item -ItemType Directory -Path $outputRoot -Force | Out-Null + +$totalCases = $results.Count +$passedCases = @($results | Where-Object { $_.passed }).Count +$successCases = @($results | Where-Object { $_.taskStatus -eq "SUCCESS" }).Count +$intentMatches = @($results | Where-Object { $_.intentMatched }).Count +$totalTools = ($results | Measure-Object -Property toolInvocationCount -Sum).Sum +$successfulTools = ($results | Measure-Object -Property toolSuccessCount -Sum).Sum +$avgWallClock = ($results | Measure-Object -Property wallClockDurationMs -Average).Average +$avgTaskDuration = ($results | Where-Object { $null -ne $_.taskDurationMs } | Measure-Object -Property taskDurationMs -Average).Average +$p95WallClock = 0 +if ($totalCases -gt 0) { + $sortedDurations = @($results | Sort-Object wallClockDurationMs | ForEach-Object { [double]$_.wallClockDurationMs }) + $index = [math]::Min($sortedDurations.Count - 1, [math]::Ceiling($sortedDurations.Count * 0.95) - 1) + $p95WallClock = [math]::Round($sortedDurations[$index], 1) +} + +$statusBreakdown = [ordered]@{} +foreach ($group in ($results | Group-Object -Property taskStatus | Sort-Object Name)) { + $statusBreakdown[$group.Name] = $group.Count +} + +$scenarioBreakdown = @() +foreach ($group in ($results | Group-Object -Property scenario | Sort-Object Name)) { + $items = @($group.Group) + $scenarioBreakdown += [pscustomobject]@{ + scenario = $group.Name + caseCount = $items.Count + passedCaseCount = @($items | Where-Object { $_.passed }).Count + successRate = Get-Percent @($items | Where-Object { $_.taskStatus -eq "SUCCESS" }).Count $items.Count + avgToolInvocationCount = [math]::Round(($items | Measure-Object -Property toolInvocationCount -Average).Average, 2) + avgWallClockDurationMs = [math]::Round(($items | Measure-Object -Property wallClockDurationMs -Average).Average, 1) + } +} + +$summary = [ordered]@{ + generatedAt = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss") + evaluationName = "shopops-agent-natural-language-batch-v1" + baseUrl = $baseUrl + dateRange = [ordered]@{ + start = $Start + end = $End + days = $dates.Count + } + rounds = $Rounds + caseCount = $totalCases + passedCaseCount = $passedCases + passRate = Get-Percent $passedCases $totalCases + successRate = Get-Percent $successCases $totalCases + intentAccuracy = Get-Percent $intentMatches $totalCases + toolInvocationCount = [int]$totalTools + toolSuccessCount = [int]$successfulTools + toolInvocationSuccessRate = Get-Percent $successfulTools $totalTools + avgToolInvocationCount = if ($totalCases -gt 0) { [math]::Round($totalTools / $totalCases, 2) } else { 0.0 } + avgWallClockDurationMs = if ($avgWallClock) { [math]::Round($avgWallClock, 1) } else { 0.0 } + p95WallClockDurationMs = $p95WallClock + avgTaskDurationMs = if ($avgTaskDuration) { [math]::Round($avgTaskDuration, 1) } else { 0.0 } + statusBreakdown = $statusBreakdown + scenarioBreakdown = $scenarioBreakdown + results = $results +} + +$summaryJsonPath = Join-Path $outputRoot "agent-natural-language-batch-summary.json" +$detailsCsvPath = Join-Path $outputRoot "agent-natural-language-batch-details.csv" +$summaryMdPath = Join-Path $outputRoot "agent-natural-language-batch-summary.md" + +$summary | ConvertTo-Json -Depth 10 | Set-Content -Path $summaryJsonPath -Encoding UTF8 + +$csvHeader = @( + "caseNo", "round", "businessDate", "scenario", "expectedIntent", "actualIntent", "intentMatched", + "taskId", "reportId", "traceId", "taskStatus", "reportStatus", "passed", + "wallClockDurationMs", "taskDurationMs", "toolInvocationCount", "toolSuccessCount", "toolCodes", + "markdownLength", "gmv", "orderCount", "refundRate", "negativeCount", "productCandidateCount", + "adCost", "adRoi", "externalVisitors", "errorMessage" +) +$csvLines = New-Object System.Collections.Generic.List[string] +$csvLines.Add(($csvHeader -join ",")) +foreach ($item in $results) { + $csvLines.Add((@($csvHeader | ForEach-Object { Escape-Csv $item.$_ }) -join ",")) +} +$csvLines | Set-Content -Path $detailsCsvPath -Encoding UTF8 + +$md = New-Object System.Collections.Generic.List[string] +$md.Add("# ShopOps Agent Natural Language Batch Evaluation") +$md.Add("") +$md.Add("- Generated at: $($summary.generatedAt)") +$md.Add("- Base URL: $($summary.baseUrl)") +$md.Add("- Date range: $Start to $End ($($dates.Count) days)") +$md.Add("- Rounds: $Rounds") +$md.Add("") +$md.Add("## Summary") +$md.Add("") +$md.Add("| Metric | Value |") +$md.Add("|---|---:|") +$md.Add("| Cases | $($summary.caseCount) |") +$md.Add("| Passed cases | $($summary.passedCaseCount) |") +$md.Add("| Pass rate | $($summary.passRate)% |") +$md.Add("| Success rate | $($summary.successRate)% |") +$md.Add("| Intent accuracy | $($summary.intentAccuracy)% |") +$md.Add("| Tool invocations | $($summary.toolInvocationCount) |") +$md.Add("| Tool invocation success rate | $($summary.toolInvocationSuccessRate)% |") +$md.Add("| Avg tools per task | $($summary.avgToolInvocationCount) |") +$md.Add("| Avg wall-clock duration | $($summary.avgWallClockDurationMs) ms |") +$md.Add("| P95 wall-clock duration | $($summary.p95WallClockDurationMs) ms |") +$md.Add("| Avg task duration | $($summary.avgTaskDurationMs) ms |") +$md.Add("") +$md.Add("## Scenario Breakdown") +$md.Add("") +$md.Add("| Scenario | Cases | Passed | Success Rate | Avg Tools | Avg Duration ms |") +$md.Add("|---|---:|---:|---:|---:|---:|") +foreach ($scenario in $scenarioBreakdown) { + $md.Add("| $($scenario.scenario) | $($scenario.caseCount) | $($scenario.passedCaseCount) | $($scenario.successRate)% | $($scenario.avgToolInvocationCount) | $($scenario.avgWallClockDurationMs) |") +} +$md.Add("") +$md.Add("## Output Files") +$md.Add("") +$md.Add("- JSON summary: " + $summaryJsonPath) +$md.Add("- CSV details: " + $detailsCsvPath) +$md.Add("") +$md.Add("## Notes") +$md.Add("") +$md.Add("- This batch calls the real ShopOps natural-language task API.") +$md.Add("- The backend must be started with the configured public-data file connectors.") +$md.Add("- wallClockDurationMs is measured by this runner around the HTTP task creation and verification flow.") +$md.Add("- taskDurationMs is computed from ShopOps task startedAt and finishedAt fields when available.") +$md | Set-Content -Path $summaryMdPath -Encoding UTF8 + +Write-Host "" +Write-Host "Batch evaluation completed." +Write-Host "Cases: $($summary.caseCount)" +Write-Host "Pass rate: $($summary.passRate)%" +Write-Host "Success rate: $($summary.successRate)%" +Write-Host "Intent accuracy: $($summary.intentAccuracy)%" +Write-Host "Tool calls: $($summary.toolInvocationCount)" +Write-Host "Tool success rate: $($summary.toolInvocationSuccessRate)%" +Write-Host "Average wall-clock duration: $($summary.avgWallClockDurationMs) ms" +Write-Host "P95 wall-clock duration: $($summary.p95WallClockDurationMs) ms" +Write-Host "Summary: $summaryJsonPath" +Write-Host "Details: $detailsCsvPath" diff --git a/scripts/run-feishu-webhook-batch.ps1 b/scripts/run-feishu-webhook-batch.ps1 new file mode 100644 index 0000000..3f0aa24 --- /dev/null +++ b/scripts/run-feishu-webhook-batch.ps1 @@ -0,0 +1,178 @@ +param( + [string]$BaseUrl = "http://localhost:8080", + [ValidateRange(1, 500)] + [int]$Count = 20, + [int]$DelayMs = 300, + [string]$OutputDir = "docs/evaluation", + [switch]$DryRun +) + +$ErrorActionPreference = "Stop" + +function New-DirectoryIfMissing { + param([string]$Path) + if (-not (Test-Path $Path)) { + New-Item -ItemType Directory -Path $Path | Out-Null + } +} + +function ConvertTo-CompactJson { + param($Value) + return ($Value | ConvertTo-Json -Depth 20 -Compress) +} + +function Get-ResponseValue { + param($Object, [string]$Name) + if ($null -eq $Object) { + return $null + } + if ($Object -is [System.Collections.IDictionary] -and $Object.Contains($Name)) { + return $Object[$Name] + } + return $Object.$Name +} + +$workspaceRoot = Split-Path -Parent $PSScriptRoot +$outputPath = Join-Path $workspaceRoot $OutputDir +$summaryPath = Join-Path $outputPath "feishu-webhook-batch-summary.json" +$detailPath = Join-Path $outputPath "feishu-webhook-batch-details.csv" +$startedAt = (Get-Date).ToString("o") + +New-DirectoryIfMissing -Path $outputPath + +Write-Host "ShopOps Feishu webhook batch verification" +Write-Host "BaseUrl: $BaseUrl" +Write-Host "Count: $Count" +Write-Host "Output: $OutputDir" + +if ($DryRun) { + Write-Host "Dry run only. No request will be sent." + exit 0 +} + +if ($env:SHOPOPS_FEISHU_SYNC_ENABLED -ne "true") { + Write-Warning "Current shell does not have SHOPOPS_FEISHU_SYNC_ENABLED=true. Make sure the backend was started with Feishu webhook mode enabled." +} +if ([string]::IsNullOrWhiteSpace($env:SHOPOPS_FEISHU_SYNC_WEBHOOK_URL)) { + Write-Warning "Current shell does not have SHOPOPS_FEISHU_SYNC_WEBHOOK_URL. Do not paste the webhook into Git; set it as a local environment variable before starting the backend." +} + +$headers = @{ + "Content-Type" = "application/json" + "X-Tenant-Id" = "1" + "X-Shop-Id" = "1" + "X-User-Id" = "1" + "X-User-Name" = "admin" + "X-User-Roles" = "ADMIN" +} + +$records = New-Object System.Collections.Generic.List[object] +$successCount = 0 +$webhookModeCount = 0 +$http200Count = 0 +$latencies = New-Object System.Collections.Generic.List[double] + +for ($i = 1; $i -le $Count; $i++) { + $reportId = 990000 + $i + $body = @{ + shopId = 1 + reportId = $reportId + documentUrl = "$BaseUrl/admin/reports.html?batch=feishu-webhook&reportId=$reportId" + } | ConvertTo-Json -Depth 10 + + $attemptStarted = Get-Date + $ok = $false + $mode = "" + $status = "" + $webhookStatusCode = "" + $errorMessage = "" + + try { + $response = Invoke-RestMethod ` + -Uri "$BaseUrl/api/tools/feishu.sync_report/invoke" ` + -Method Post ` + -Headers $headers ` + -Body $body ` + -TimeoutSec 15 + + $data = Get-ResponseValue -Object $response -Name "data" + $toolResult = Get-ResponseValue -Object $data -Name "data" + $success = Get-ResponseValue -Object $data -Name "success" + $status = [string](Get-ResponseValue -Object $data -Name "status") + $mode = [string](Get-ResponseValue -Object $toolResult -Name "mode") + $webhookStatusCode = [string](Get-ResponseValue -Object $toolResult -Name "webhookStatusCode") + $ok = ($success -eq $true -and $status -eq "SUCCESS" -and $mode -eq "feishu-webhook" -and $webhookStatusCode -eq "200") + } catch { + $errorMessage = $_.Exception.Message + } + + $durationMs = ((Get-Date) - $attemptStarted).TotalMilliseconds + $latencies.Add([Math]::Round($durationMs, 2)) + + if ($ok) { + $successCount++ + } + if ($mode -eq "feishu-webhook") { + $webhookModeCount++ + } + if ($webhookStatusCode -eq "200") { + $http200Count++ + } + + $record = [PSCustomObject]@{ + index = $i + reportId = $reportId + success = $ok + status = $status + mode = $mode + webhookStatusCode = $webhookStatusCode + durationMs = [Math]::Round($durationMs, 2) + errorMessage = $errorMessage + requestedAt = $attemptStarted.ToString("o") + } + $records.Add($record) + + Write-Host ("[{0}/{1}] success={2} mode={3} webhookStatus={4} durationMs={5}" -f $i, $Count, $ok, $mode, $webhookStatusCode, [Math]::Round($durationMs, 2)) + + if ($DelayMs -gt 0 -and $i -lt $Count) { + Start-Sleep -Milliseconds $DelayMs + } +} + +$avgLatency = if ($latencies.Count -gt 0) { [Math]::Round(($latencies | Measure-Object -Average).Average, 2) } else { 0 } +$minLatency = if ($latencies.Count -gt 0) { [Math]::Round(($latencies | Measure-Object -Minimum).Minimum, 2) } else { 0 } +$maxLatency = if ($latencies.Count -gt 0) { [Math]::Round(($latencies | Measure-Object -Maximum).Maximum, 2) } else { 0 } +$successRate = [Math]::Round($successCount * 100.0 / $Count, 2) +$webhookModeRate = [Math]::Round($webhookModeCount * 100.0 / $Count, 2) +$http200Rate = [Math]::Round($http200Count * 100.0 / $Count, 2) + +$summary = [ordered]@{ + evidenceName = "shopops-feishu-webhook-batch-v1" + generatedAt = (Get-Date).ToString("o") + startedAt = $startedAt + baseUrl = $BaseUrl + requestCount = $Count + successCount = $successCount + successRate = $successRate + webhookModeCount = $webhookModeCount + webhookModeRate = $webhookModeRate + http200Count = $http200Count + http200Rate = $http200Rate + avgLatencyMs = $avgLatency + minLatencyMs = $minLatency + maxLatencyMs = $maxLatency + detailFile = "docs/evaluation/feishu-webhook-batch-details.csv" + claimBoundary = "This verifies configured Feishu webhook HTTP delivery through ShopOps. Keep the Feishu group screenshot and backend logs as external evidence." +} + +$records | Export-Csv -NoTypeInformation -Encoding UTF8 -Path $detailPath +Set-Content -Encoding UTF8 -Path $summaryPath -Value (ConvertTo-CompactJson $summary) + +Write-Host "" +Write-Host "Batch verification completed." +Write-Host "Success rate: $successRate% ($successCount/$Count)" +Write-Host "Webhook mode rate: $webhookModeRate% ($webhookModeCount/$Count)" +Write-Host "HTTP 200 rate: $http200Rate% ($http200Count/$Count)" +Write-Host "Average latency: $avgLatency ms" +Write-Host "Summary: $summaryPath" +Write-Host "Details: $detailPath" diff --git a/scripts/run-real-anomaly-evaluation.py b/scripts/run-real-anomaly-evaluation.py new file mode 100644 index 0000000..9a7d729 --- /dev/null +++ b/scripts/run-real-anomaly-evaluation.py @@ -0,0 +1,240 @@ +from __future__ import annotations + +import json +from collections import Counter, defaultdict +from datetime import datetime +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +DOCS = ROOT / "docs" +EVAL = DOCS / "evaluation" +SAMPLES = EVAL / "public-real-business-samples.json" + + +def read_json(path: Path) -> object: + return json.loads(path.read_text(encoding="utf-8-sig")) + + +def pct(numerator: int | float, denominator: int | float) -> float: + return round((numerator / denominator * 100.0) if denominator else 0.0, 2) + + +def main() -> None: + samples = read_json(SAMPLES) + results = [] + total_expected = 0 + total_detected_expected = 0 + total_predicted = 0 + by_signal = defaultdict(lambda: {"expected": 0, "detectedExpected": 0, "predicted": 0}) + by_type = defaultdict(lambda: {"samples": 0, "expected": 0, "detectedExpected": 0, "predicted": 0}) + + for sample in samples: + expected = set(sample.get("expectedSignals", [])) + predicted = detect_signals(sample) + matched = expected & predicted + total_expected += len(expected) + total_detected_expected += len(matched) + total_predicted += len(predicted) + sample_type = sample["sampleType"] + by_type[sample_type]["samples"] += 1 + by_type[sample_type]["expected"] += len(expected) + by_type[sample_type]["detectedExpected"] += len(matched) + by_type[sample_type]["predicted"] += len(predicted) + for signal in expected: + by_signal[signal]["expected"] += 1 + if signal in predicted: + by_signal[signal]["detectedExpected"] += 1 + for signal in predicted: + by_signal[signal]["predicted"] += 1 + results.append({ + "sampleId": sample["sampleId"], + "dataset": sample["dataset"], + "sampleType": sample_type, + "expectedSignals": sorted(expected), + "predictedSignals": sorted(predicted), + "matchedSignals": sorted(matched), + "missedSignals": sorted(expected - predicted), + "extraSignals": sorted(predicted - expected), + "passed": expected.issubset(predicted), + }) + + precision = pct(total_detected_expected, total_predicted) + recall = pct(total_detected_expected, total_expected) + f1 = round((2 * precision * recall / (precision + recall)) if precision + recall else 0.0, 2) + summary = { + "generatedAt": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "evaluationName": "shopops-real-anomaly-evaluation-v1", + "sampleCount": len(samples), + "passedSampleCount": sum(1 for item in results if item["passed"]), + "samplePassRate": pct(sum(1 for item in results if item["passed"]), len(results)), + "expectedSignalCount": total_expected, + "predictedSignalCount": total_predicted, + "matchedSignalCount": total_detected_expected, + "precision": precision, + "recall": recall, + "f1": f1, + "datasetCounts": dict(Counter(sample["dataset"] for sample in samples)), + "sampleTypeCounts": dict(Counter(sample["sampleType"] for sample in samples)), + "signalMetrics": { + signal: metric(stat) + for signal, stat in sorted(by_signal.items()) + }, + "sampleTypeMetrics": { + sample_type: { + "samples": stat["samples"], + **metric(stat), + } + for sample_type, stat in sorted(by_type.items()) + }, + "thresholds": thresholds(), + "limitations": [ + "This is an offline rule-based evaluation over public benchmark samples, not online production monitoring.", + "Predicted signals are generated from sample metrics only; model-generated narratives are not included.", + "Criteo campaign IDs are anonymized, so ad risks are evaluated at campaign benchmark level.", + ], + "results": results, + } + + (DOCS / "ShopOps-real-anomaly-evaluation.json").write_text( + json.dumps(summary, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + (DOCS / "ShopOps-real-anomaly-evaluation.md").write_text(render_markdown(summary), encoding="utf-8") + print(f"Generated {DOCS / 'ShopOps-real-anomaly-evaluation.json'}") + print(f"Generated {DOCS / 'ShopOps-real-anomaly-evaluation.md'}") + + +def detect_signals(sample: dict[str, object]) -> set[str]: + metrics = sample.get("metrics", {}) + sample_type = sample.get("sampleType") + predicted = set() + + gmv_delta = abs(number(metrics.get("gmvDeltaRate"))) + if gmv_delta >= 0.25: + predicted.update(["gmv_anomaly", "order_volume_anomaly"]) + + refund_rate = number(metrics.get("refundProxyRate")) + refund_amount = number(metrics.get("refundProxyAmount")) + if refund_rate >= 0.02 or refund_amount >= 500: + predicted.update(["refund_proxy_increase", "after_sales_risk"]) + + review_score = number(metrics.get("reviewScore")) + low_score_count = number(metrics.get("lowScoreReviewCount")) + avg_score = number(metrics.get("avgReviewScore")) + if review_score and review_score <= 2: + predicted.update(["low_score_review", "customer_experience_risk"]) + if low_score_count >= 3 or (avg_score and avg_score <= 3.5): + predicted.update(["product_review_risk", "product_optimization_candidate"]) + + if sample_type == "delivery_delay_risk": + predicted.update(["delivery_delay", "customer_experience_risk"]) + + conversion_rate = number(metrics.get("conversionRate")) + clicks = number(metrics.get("clicks")) + cost = number(metrics.get("cost")) + conversions = number(metrics.get("conversions")) + if sample_type == "ad_low_conversion" or (clicks >= 500 and conversion_rate <= 0.08): + predicted.add("low_conversion_risk") + if sample_type == "ad_low_conversion" or (cost > 0 and conversions <= 100): + predicted.add("ad_spend_risk") + + cancel_amount = number(metrics.get("cancelAmount")) + cancel_lines = number(metrics.get("cancelLineCount")) + if cancel_amount >= 500 or cancel_lines >= 5: + predicted.update(["after_sales_risk", "refund_proxy_increase"]) + + if sample_type == "external_event_context" or metrics.get("eventType"): + predicted.add("external_event_context") + + return predicted + + +def number(value: object) -> float: + if value is None or value == "": + return 0.0 + try: + return float(value) + except (TypeError, ValueError): + return 0.0 + + +def thresholds() -> dict[str, object]: + return { + "gmvDeltaRateAbsMin": 0.25, + "refundProxyRateMin": 0.02, + "refundProxyAmountMin": 500, + "lowReviewScoreMax": 2, + "lowScoreReviewCountMin": 3, + "avgReviewScoreMax": 3.5, + "adClickMin": 500, + "adConversionRateMax": 0.08, + "cancelAmountMin": 500, + "cancelLineCountMin": 5, + } + + +def metric(stat: dict[str, int]) -> dict[str, object]: + precision = pct(stat["detectedExpected"], stat["predicted"]) + recall = pct(stat["detectedExpected"], stat["expected"]) + f1 = round((2 * precision * recall / (precision + recall)) if precision + recall else 0.0, 2) + return { + "expected": stat["expected"], + "predicted": stat["predicted"], + "matched": stat["detectedExpected"], + "precision": precision, + "recall": recall, + "f1": f1, + } + + +def render_markdown(summary: dict[str, object]) -> str: + type_rows = "\n".join( + f"| {sample_type} | {stat['samples']} | {stat['precision']}% | {stat['recall']}% | {stat['f1']} |" + for sample_type, stat in summary["sampleTypeMetrics"].items() + ) + signal_rows = "\n".join( + f"| {signal} | {stat['expected']} | {stat['predicted']} | {stat['precision']}% | {stat['recall']}% | {stat['f1']} |" + for signal, stat in summary["signalMetrics"].items() + ) + limitations = "\n".join(f"- {item}" for item in summary["limitations"]) + return f"""# ShopOps Real Anomaly Evaluation + +Generated at: {summary["generatedAt"]} + +This evaluation runs a fixed rule detector over the public real-data business samples and compares predicted anomaly signals against expected signals. + +## Summary + +| Metric | Value | +|---|---:| +| Samples | {summary["sampleCount"]} | +| Passed samples | {summary["passedSampleCount"]} | +| Sample pass rate | {summary["samplePassRate"]}% | +| Expected signals | {summary["expectedSignalCount"]} | +| Predicted signals | {summary["predictedSignalCount"]} | +| Matched signals | {summary["matchedSignalCount"]} | +| Precision | {summary["precision"]}% | +| Recall | {summary["recall"]}% | +| F1 | {summary["f1"]} | + +## By Sample Type + +| Sample Type | Samples | Precision | Recall | F1 | +|---|---:|---:|---:|---:| +{type_rows} + +## By Signal + +| Signal | Expected | Predicted | Precision | Recall | F1 | +|---|---:|---:|---:|---:|---:| +{signal_rows} + +## Limitations + +{limitations} +""" + + +if __name__ == "__main__": + main() diff --git a/scripts/seed-shopops-demo.ps1 b/scripts/seed-shopops-demo.ps1 new file mode 100644 index 0000000..63dfd53 --- /dev/null +++ b/scripts/seed-shopops-demo.ps1 @@ -0,0 +1,115 @@ +param( + [int]$Port = 8080, + [string]$Scenario = "interview-demo", + [switch]$NoOpenBrowser, + [switch]$DryRun +) + +$ErrorActionPreference = "Stop" +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +$workspaceRoot = Split-Path -Parent $PSScriptRoot +$baseUrl = "http://localhost:$Port" +$demoDate = "2018-08-07" +$summaryPath = Join-Path $workspaceRoot "shopops-admin\target\demo\$Scenario-summary.json" + +Set-Location $workspaceRoot + +Write-Host "ShopOps interview demo seeder" +Write-Host "BaseUrl: $baseUrl" +Write-Host "Scenario: $Scenario" +Write-Host "Demo date: $demoDate" +Write-Host "" + +if ($DryRun) { + Write-Host "[DRY RUN] Wait for $baseUrl/api/system/health" + Write-Host "[DRY RUN] Run scripts/check-shopops.ps1 -Port $Port" + Write-Host "[DRY RUN] Run scripts/verify-agentops-demo.ps1 -Port $Port -Start $demoDate -End $demoDate -Scenario $Scenario -Dataset olist" + Write-Host "[DRY RUN] Validate $summaryPath" + exit 0 +} + +$headers = @{ + "X-Tenant-Id" = "1" + "X-Shop-Id" = "1" + "X-User-Id" = "1" + "X-User-Name" = "admin" + "X-User-Roles" = "ADMIN" +} + +Write-Host "1. Waiting for ShopOps..." +$ready = $false +for ($attempt = 1; $attempt -le 30; $attempt++) { + try { + $response = Invoke-WebRequest -Uri "$baseUrl/api/system/health" -Headers $headers -UseBasicParsing -TimeoutSec 2 + if ($response.StatusCode -ge 200 -and $response.StatusCode -lt 300) { + $ready = $true + break + } + } catch { + if ($attempt -eq 30) { + break + } + } + Start-Sleep -Seconds 1 +} +if (-not $ready) { + throw "ShopOps is not ready at $baseUrl. Start it with scripts/start-shopops.ps1 first." +} +Write-Host " ShopOps is ready." + +Write-Host "" +Write-Host "2. Running health check..." +& powershell -NoProfile -ExecutionPolicy Bypass -File "$PSScriptRoot\check-shopops.ps1" -Port $Port +if ($LASTEXITCODE -ne 0) { + throw "ShopOps health check failed." +} + +Write-Host "" +Write-Host "3. Creating the complete Agent demo chain..." +& powershell -NoProfile -ExecutionPolicy Bypass -File "$PSScriptRoot\verify-agentops-demo.ps1" ` + -Port $Port ` + -Start $demoDate ` + -End $demoDate ` + -Scenario $Scenario ` + -Dataset "olist" +if ($LASTEXITCODE -ne 0) { + throw "AgentOps demo verification failed." +} + +if (-not (Test-Path -LiteralPath $summaryPath)) { + throw "Demo summary was not generated: $summaryPath" +} + +$summary = Get-Content -LiteralPath $summaryPath -Raw -Encoding UTF8 | ConvertFrom-Json +$validTaskStatus = @("SUCCESS", "DEGRADED") -contains [string]$summary.task.status +if (-not $validTaskStatus) { + throw "Unexpected task status: $($summary.task.status)" +} +if ([string]$summary.report.status -ne "SUCCESS") { + throw "Unexpected report status: $($summary.report.status)" +} +if ([string]$summary.approval.status -ne "APPROVED") { + throw "Unexpected approval status: $($summary.approval.status)" +} +if ([string]$summary.approval.retryStatus -ne "SUCCESS") { + throw "Unexpected tool retry status: $($summary.approval.retryStatus)" +} + +Write-Host "" +Write-Host "Demo chain is ready." +Write-Host "Task: $($summary.task.status) (#$($summary.task.taskId))" +Write-Host "Report: $($summary.report.status) (#$($summary.report.reportId))" +Write-Host "Approval: $($summary.approval.status) (#$($summary.approval.approvalId))" +Write-Host "Workbench: $($summary.links.workbench)" +Write-Host "Tasks: $($summary.links.tasks)" +Write-Host "Reports: $($summary.links.reports)" +Write-Host "Tools: $($summary.links.tools)" +Write-Host "Approvals: $($summary.links.approvals)" +Write-Host "Audit: $($summary.links.audit)" +Write-Host "Summary: $summaryPath" + +if (-not $NoOpenBrowser) { + Start-Process $summary.links.workbench +} diff --git a/scripts/start-shopops-docker.ps1 b/scripts/start-shopops-docker.ps1 new file mode 100644 index 0000000..73c51b5 --- /dev/null +++ b/scripts/start-shopops-docker.ps1 @@ -0,0 +1,91 @@ +param( + [int]$Port = 8080, + [switch]$NoSeed, + [switch]$NoOpenBrowser, + [switch]$UseChinaMirror, + [switch]$DryRun +) + +$ErrorActionPreference = "Stop" +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +$workspaceRoot = Split-Path -Parent $PSScriptRoot +$composeFile = Join-Path $workspaceRoot "deploy\docker-compose.demo.yml" +$projectName = "shopops-demo" +$env:SHOPOPS_DEMO_PORT = [string]$Port + +if ($UseChinaMirror) { + $mirrorPrefix = "swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library" + $env:SHOPOPS_DOCKER_BUILDER_IMAGE = "$mirrorPrefix/eclipse-temurin:17-jdk" + $env:SHOPOPS_DOCKER_RUNTIME_IMAGE = "$mirrorPrefix/eclipse-temurin:17-jre" +} + +Set-Location $workspaceRoot + +if (-not (Get-Command "docker" -ErrorAction SilentlyContinue)) { + throw "Docker is not installed or is not available in PATH." +} + +Write-Host "ShopOps Docker demo launcher" +Write-Host "Port: $Port" +Write-Host "Workbench: http://localhost:$Port/admin/workbench.html" +if ($UseChinaMirror) { + Write-Host "Base images: China mirror" +} +Write-Host "" + +if ($DryRun) { + Write-Host "[DRY RUN] docker compose -p $projectName -f $composeFile up -d --build" + if ($NoSeed) { + Write-Host "[DRY RUN] scripts/check-shopops.ps1 -Port $Port" + } else { + Write-Host "[DRY RUN] scripts/seed-shopops-demo.ps1 -Port $Port -Scenario docker-interview-demo" + } + exit 0 +} + +docker info | Out-Null +if ($LASTEXITCODE -ne 0) { + throw "Docker daemon is not available. Start Docker Desktop and retry." +} + +Write-Host "1. Building and starting ShopOps..." +docker compose -p $projectName -f $composeFile up -d --build +if ($LASTEXITCODE -ne 0) { + throw "Docker Compose failed to start ShopOps." +} + +try { + Write-Host "" + if ($NoSeed) { + Write-Host "2. Waiting for health checks..." + & powershell -NoProfile -ExecutionPolicy Bypass -File "$PSScriptRoot\check-shopops.ps1" -Port $Port + } else { + Write-Host "2. Preparing the complete interview demo chain..." + $seedArgs = @( + "-NoProfile", + "-ExecutionPolicy", "Bypass", + "-File", "$PSScriptRoot\seed-shopops-demo.ps1", + "-Port", [string]$Port, + "-Scenario", "docker-interview-demo" + ) + if ($NoOpenBrowser) { + $seedArgs += "-NoOpenBrowser" + } + & powershell @seedArgs + } + if ($LASTEXITCODE -ne 0) { + throw "ShopOps started, but demo preparation failed." + } +} catch { + Write-Host "" + Write-Host "Recent container logs:" + docker compose -p $projectName -f $composeFile logs --tail 100 shopops-admin + throw +} + +Write-Host "" +Write-Host "ShopOps Docker demo is ready." +Write-Host "Workbench: http://localhost:$Port/admin/workbench.html" +Write-Host "Stop: docker compose -p $projectName -f deploy/docker-compose.demo.yml down" diff --git a/scripts/start-shopops.ps1 b/scripts/start-shopops.ps1 new file mode 100644 index 0000000..729ce27 --- /dev/null +++ b/scripts/start-shopops.ps1 @@ -0,0 +1,228 @@ +param( + [int]$Port = 8080, + [switch]$SkipPrepareData, + [switch]$SkipInstallCommon, + [switch]$OpenBrowser, + [switch]$NoOpenBrowser, + [switch]$StrictPort, + [switch]$Jdbc, + [switch]$Memory, + [switch]$DryRun +) + +$ErrorActionPreference = "Stop" +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +$workspaceRoot = Split-Path -Parent $PSScriptRoot +$demoDate = "2018-08-07" +$demoTask = "Generate the 2018-08-07 Olist shop operation daily report" +$defaultDatasourceUrl = "jdbc:mysql://localhost:3306/shopops_agent?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true" +$devComposeFile = Join-Path $workspaceRoot "deploy\docker-compose.dev.yml" + +function Require-Command { + param( + [string]$Name, + [string]$InstallHint + ) + if (-not (Get-Command $Name -ErrorAction SilentlyContinue)) { + throw "Missing command '$Name'. $InstallHint" + } +} + +function Invoke-Step { + param( + [string]$Title, + [scriptblock]$Action + ) + Write-Host "" + Write-Host "==> $Title" + if (-not $DryRun) { + & $Action + } +} + +function Test-PortAvailable { + param([int]$CandidatePort) + $listener = $null + try { + $listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, $CandidatePort) + $listener.Start() + return $true + } catch { + return $false + } finally { + if ($null -ne $listener) { + $listener.Stop() + } + } +} + +function Test-TcpConnection { + param( + [string]$HostName, + [int]$PortNumber + ) + $client = $null + try { + $client = [System.Net.Sockets.TcpClient]::new() + $connection = $client.BeginConnect($HostName, $PortNumber, $null, $null) + if (-not $connection.AsyncWaitHandle.WaitOne(1000, $false)) { + return $false + } + $client.EndConnect($connection) + return $true + } catch { + return $false + } finally { + if ($null -ne $client) { + $client.Close() + } + } +} + +function Wait-TcpConnection { + param( + [string]$HostName, + [int]$PortNumber, + [int]$Seconds + ) + for ($i = 0; $i -lt $Seconds; $i++) { + if (Test-TcpConnection -HostName $HostName -PortNumber $PortNumber) { + return $true + } + Start-Sleep -Seconds 1 + } + return $false +} + +function Ensure-JdbcDependency { + if ($env:SHOPOPS_DATASOURCE_URL -and -not $env:SHOPOPS_DATASOURCE_URL.Contains("localhost:3306")) { + Write-Host "Custom datasource configured. Skipping local MySQL auto-start." + return + } + if (Test-TcpConnection -HostName "localhost" -PortNumber 3306) { + Write-Host "Local MySQL is reachable at localhost:3306." + return + } + if (-not (Get-Command "docker" -ErrorAction SilentlyContinue)) { + throw "JDBC persistence requires MySQL at localhost:3306. Install/start MySQL, or rerun with -Memory for temporary in-memory mode." + } + + Write-Host "Local MySQL is not reachable. Trying to start deploy/docker-compose.dev.yml mysql..." + docker info | Out-Null + if ($LASTEXITCODE -ne 0) { + throw "JDBC persistence requires MySQL, but Docker Desktop is not running. Start Docker Desktop and rerun, or rerun with -Memory for temporary in-memory mode." + } + + docker compose -p shopops-dev -f $devComposeFile up -d mysql + if ($LASTEXITCODE -ne 0) { + throw "Failed to start local MySQL container. Start MySQL manually or rerun with -Memory." + } + if (-not (Wait-TcpConnection -HostName "localhost" -PortNumber 3306 -Seconds 60)) { + throw "MySQL container was started but localhost:3306 is still unreachable after 60 seconds." + } + Write-Host "Local MySQL is ready at localhost:3306." +} + +function Resolve-Port { + param([int]$RequestedPort) + if (Test-PortAvailable -CandidatePort $RequestedPort) { + return $RequestedPort + } + if ($StrictPort) { + throw "Port $RequestedPort is already in use. Stop the existing process or rerun with -Port ." + } + for ($candidate = $RequestedPort + 1; $candidate -le $RequestedPort + 20; $candidate++) { + if (Test-PortAvailable -CandidatePort $candidate) { + Write-Warning "Port $RequestedPort is already in use. Using port $candidate instead." + return $candidate + } + } + throw "No available port found from $RequestedPort to $($RequestedPort + 20)." +} + +function Start-WorkbenchOpener { + param([string]$Url) + Start-Job -ScriptBlock { + param($TargetUrl) + for ($i = 0; $i -lt 60; $i++) { + try { + $response = Invoke-WebRequest -Uri $TargetUrl -UseBasicParsing -TimeoutSec 2 + if ($response.StatusCode -ge 200 -and $response.StatusCode -lt 500) { + Start-Process $TargetUrl + return + } + } catch { + Start-Sleep -Seconds 2 + } + } + } -ArgumentList $Url | Out-Null +} + +Set-Location $workspaceRoot +if ($Jdbc -and $Memory) { + throw "Use either -Jdbc or -Memory, not both." +} +$useJdbc = -not $Memory +$Port = Resolve-Port -RequestedPort $Port +$workbenchUrl = "http://localhost:$Port/admin/workbench.html" + +Write-Host "ShopOps one-command launcher" +Write-Host "Workspace: $workspaceRoot" +Write-Host "Workbench: $workbenchUrl" +Write-Host "Demo date: $demoDate" +Write-Host "Demo task: $demoTask" +if ($useJdbc) { + $datasourceUrl = if ($env:SHOPOPS_DATASOURCE_URL) { $env:SHOPOPS_DATASOURCE_URL } else { $defaultDatasourceUrl } + Write-Host "Persistence: JDBC / MySQL" + Write-Host "Database URL: $datasourceUrl" +} else { + Write-Host "Persistence: memory (records are cleared after backend restart)" +} + +Require-Command -Name "mvn" -InstallHint "Install Maven 3.9+ and make sure it is available in PATH." +Require-Command -Name "python" -InstallHint "Install Python 3.10+ and make sure it is available in PATH." + +if (-not $SkipPrepareData) { + Invoke-Step -Title "Prepare Olist demo data" -Action { + python scripts/prepare_olist_demo.py + } +} + +if (-not $SkipInstallCommon) { + Invoke-Step -Title "Install shopops-common locally" -Action { + mvn -pl shopops-common install -DskipTests + } +} + +if ($useJdbc) { + Invoke-Step -Title "Ensure persistent MySQL storage" -Action { + Ensure-JdbcDependency + } +} + +if ((($OpenBrowser -or -not $NoOpenBrowser)) -and -not $DryRun) { + Start-WorkbenchOpener -Url $workbenchUrl +} + +Write-Host "" +Write-Host "Starting ShopOps Admin..." +Write-Host "Open after startup: $workbenchUrl" +Write-Host "Recommended demo date: $demoDate" +Write-Host "Recommended demo task: $demoTask" +Write-Host "Seed a complete demo chain in another terminal:" +Write-Host "powershell -ExecutionPolicy Bypass -File scripts/seed-shopops-demo.ps1 -Port $Port" +if (-not $useJdbc) { + Write-Host "Need records after restart? Rerun this launcher without -Memory and use a reachable MySQL database." +} +Write-Host "Press Ctrl+C to stop the server." +Write-Host "" + +if (-not $DryRun) { + if ($useJdbc) { + mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.profiles=dev" "-Dspring-boot.run.arguments=--server.port=$Port" + } else { + mvn -pl shopops-admin spring-boot:run "-Dspring-boot.run.arguments=--server.port=$Port --shopops.persistence=memory --shopops.flyway.enabled=false" + } +} diff --git a/scripts/verify-agentops-demo.ps1 b/scripts/verify-agentops-demo.ps1 index dfb141e..e4eb381 100644 --- a/scripts/verify-agentops-demo.ps1 +++ b/scripts/verify-agentops-demo.ps1 @@ -319,6 +319,7 @@ if ($task.data.startedAt -and $task.data.finishedAt) { } $demoLinks = [ordered]@{ + workbench = "$baseUrl/admin/workbench.html" dashboard = "$baseUrl/admin/dashboard.html" tasks = "$baseUrl/admin/tasks.html?taskId=$taskId" reports = "$baseUrl/admin/reports.html?reportId=$reportId" @@ -388,6 +389,7 @@ Write-Host " Summary MD: $summaryMdPath" Write-Host "" Write-Host "Demo links:" +Write-Host " Workbench: $($demoLinks.workbench)" Write-Host " Dashboard: $($demoLinks.dashboard)" Write-Host " Tasks: $($demoLinks.tasks)" Write-Host " Reports: $($demoLinks.reports)" diff --git a/shopops-admin-ui/src/App.tsx b/shopops-admin-ui/src/App.tsx index 0401f40..3ae01f2 100644 --- a/shopops-admin-ui/src/App.tsx +++ b/shopops-admin-ui/src/App.tsx @@ -16,6 +16,7 @@ import { Steps, Table, Tag, + Timeline, Typography, message } from "antd"; @@ -29,7 +30,7 @@ import { } from "@ant-design/icons"; import { apiGet, apiPost, readStoredContext, type RequestContext } from "./api"; import { AdminSidebar } from "./AdminSidebar"; -import type { AgentStep, AgentTask, DataSourceEvidence, NaturalLanguageResult, OperationReport, PageResult } from "./types"; +import type { AgentNaturalLanguageBatchEvaluationResponse, AgentStep, AgentTask, AgentTaskDetail, DataSourceEvidence, NaturalLanguageResult, OperationReport, PageResult, TraceSpan } from "./types"; import { isTerminalStatus, moneyText, normalizeEvidence, numberText, parseOutput, percentText } from "./utils"; import { MetricsChart } from "./MetricsChart"; @@ -37,6 +38,14 @@ const { Header, Content } = Layout; const { Text, Title, Paragraph } = Typography; const OLIST_DEMO_DATE = "2018-08-07"; +const SUPPORTED_DATE_START = "2018-08-01"; +const SUPPORTED_DATE_END = OLIST_DEMO_DATE; +const OLIST_DEMO_CONTEXT: RequestContext = { + tenantId: "1", + shopId: "1", + userId: "1", + roles: "ADMIN,OPERATOR" +}; const OLIST_DEMO_PROMPT = "基于 Olist 真实订单和评价数据,生成 2018-08-07 店铺运营日报,重点分析 GMV、退款风险、差评原因和商品优化建议。"; @@ -64,8 +73,10 @@ export default function App() { const [understanding, setUnderstanding] = useState(null); const [task, setTask] = useState(null); const [steps, setSteps] = useState([]); + const [detail, setDetail] = useState(null); const [report, setReport] = useState(null); const [recentTasks, setRecentTasks] = useState([]); + const [batchEvaluation, setBatchEvaluation] = useState(null); const timerRef = useRef(null); const selectedTaskId = task?.taskId || understanding?.task?.taskId || ""; @@ -73,6 +84,7 @@ export default function App() { const evidence = useMemo(() => normalizeEvidence(report?.evidence), [report]); const toolOutputs = useMemo(() => outputByTool(steps), [steps]); const metrics = useMemo(() => buildMetrics(toolOutputs, evidence.dataSources), [toolOutputs, evidence.dataSources]); + const traceSpans = detail?.spans || []; const loadRecentTasks = useCallback(async () => { try { @@ -83,6 +95,19 @@ export default function App() { } }, [context]); + const loadBatchEvaluation = useCallback(async () => { + try { + const result = await apiGet( + "/api/admin/evaluation/agent-natural-language-batch", + context + ); + setBatchEvaluation(result); + } catch (error) { + console.warn(error); + setBatchEvaluation(null); + } + }, [context]); + const loadSteps = useCallback( async (taskId: string | number) => { const nextSteps = await apiGet(`/api/agent/tasks/${encodeURIComponent(taskId)}/steps`, context); @@ -101,11 +126,21 @@ export default function App() { [context] ); + const loadDetail = useCallback( + async (taskId: string | number) => { + const nextDetail = await apiGet(`/api/admin/agent/tasks/${encodeURIComponent(taskId)}/detail`, context); + setDetail(nextDetail); + return nextDetail; + }, + [context] + ); + const loadTask = useCallback( async (taskId: string | number) => { const nextTask = await apiGet(`/api/agent/tasks/${encodeURIComponent(taskId)}`, context); setTask(nextTask); await loadSteps(taskId); + await loadDetail(taskId); if (nextTask.reportId) { await loadReport(nextTask.reportId); } @@ -115,7 +150,7 @@ export default function App() { } return nextTask; }, - [context, loadRecentTasks, loadReport, loadSteps] + [context, loadDetail, loadRecentTasks, loadReport, loadSteps] ); const stopTracking = useCallback(() => { @@ -146,12 +181,17 @@ export default function App() { ); useEffect(() => { - form.setFieldsValue({ userInput: quickPrompts[0].prompt, startDate: today(), endDate: today() }); + form.setFieldsValue({ userInput: quickPrompts[0].prompt, startDate: OLIST_DEMO_DATE, endDate: OLIST_DEMO_DATE }); void loadRecentTasks(); + void loadBatchEvaluation(); return stopTracking; - }, [form, loadRecentTasks, stopTracking]); + }, [form, loadBatchEvaluation, loadRecentTasks, stopTracking]); async function submitNaturalLanguageTask(values: { userInput: string; startDate: string; endDate: string }) { + if (!isSupportedDate(values.startDate) || !isSupportedDate(values.endDate) || values.startDate > values.endDate) { + message.warning(`请选择数据覆盖日期 ${SUPPORTED_DATE_START} 至 ${SUPPORTED_DATE_END}`); + return; + } setSubmitting(true); setStatusLine("Agent 正在理解诉求并创建任务。"); try { @@ -165,6 +205,7 @@ export default function App() { ); setUnderstanding(result); setTask(result.task); + setDetail(null); setReport(null); setStatusLine(`已路由到 ${result.taskType}:${result.routedReason || "规则路由完成"}`); const nextTask = await loadTask(result.task.taskId); @@ -181,6 +222,7 @@ export default function App() { } function applyOlistDemoMode() { + setContext(OLIST_DEMO_CONTEXT); form.setFieldsValue({ startDate: OLIST_DEMO_DATE, endDate: OLIST_DEMO_DATE, @@ -190,9 +232,24 @@ export default function App() { setStatusLine("已切换到 Olist 演示日期 2018-08-07。默认 Connector 会读取 Olist 订单、评价和商品候选数据。"); } + function restrictDateValues(changed: Partial<{ startDate: string; endDate: string }>) { + const nextValues: Partial<{ startDate: string; endDate: string }> = {}; + if (changed.startDate && !isSupportedDate(changed.startDate)) { + nextValues.startDate = OLIST_DEMO_DATE; + } + if (changed.endDate && !isSupportedDate(changed.endDate)) { + nextValues.endDate = OLIST_DEMO_DATE; + } + if (Object.keys(nextValues).length > 0) { + form.setFieldsValue(nextValues); + message.warning(`请选择数据覆盖日期 ${SUPPORTED_DATE_START} 至 ${SUPPORTED_DATE_END}`); + } + } + function selectRecentTask(nextTask: AgentTask) { setTask(nextTask); setUnderstanding(null); + setDetail(null); setReport(null); if (nextTask.taskId) { void loadTask(nextTask.taskId); @@ -208,31 +265,26 @@ export default function App() { Agent 工作台 用自然语言发起日常运营任务,追踪工具编排、量化结果、报告与审计链路。 - - setContext({ ...context, tenantId: event.target.value })} /> - setContext({ ...context, shopId: event.target.value })} /> - setContext({ ...context, userId: event.target.value })} /> - setContext({ ...context, roles: event.target.value })} /> - + {datasetMode}}> -
+ - + - + @@ -282,6 +334,7 @@ export default function App() { )} /> + @@ -301,6 +354,7 @@ export default function App() { }))} /> + }> @@ -346,6 +400,85 @@ export default function App() { ); } +function BatchEvaluationCard({ + evaluation, + onReload +}: { + evaluation: AgentNaturalLanguageBatchEvaluationResponse | null; + onReload: () => void; +}) { + const summary = evaluation?.summary; + const available = Boolean(evaluation?.available && summary); + return ( + } onClick={onReload}> + 刷新 + + } + > + {!available ? ( + + ) : ( + + + + + + + + + + + + + + + + + + {summary?.dateRange?.start || "-"} 至 {summary?.dateRange?.end || "-"} + + {numberText(summary?.avgWallClockDurationMs)} ms + {numberText(summary?.p95WallClockDurationMs)} ms + {summary?.generatedAt || "-"} + + row.scenario || "scenario"} + columns={[ + { title: "场景", dataIndex: "scenario" }, + { title: "任务", dataIndex: "caseCount", width: 72 }, + { title: "成功率", dataIndex: "successRate", width: 92, render: percentValue }, + { title: "平均工具", dataIndex: "avgToolInvocationCount", width: 92 } + ]} + /> + + )} + + ); +} + +function ContextSummary({ context }: { context: RequestContext }) { + return ( + + 当前上下文 + 租户 {context.tenantId || "1"} + 店铺 {context.shopId || "1"} + 用户 {context.userId || "1"} + {context.roles || "ADMIN,OPERATOR"} + + ); +} + function WorkbenchSummary({ understanding, task, @@ -360,21 +493,98 @@ function WorkbenchSummary({ const dataSourceText = dataSourceEvidenceSummary(evidence.dataSources); return ( - - {understanding?.intentLabel || intentTitle(evidence.intent) || understanding?.intent || "-"} - {understanding ? `${(understanding.confidence * 100).toFixed(0)}%` : "-"} - {task?.taskNo || task?.taskId || "-"} - {report?.title || report?.reportId || "-"} - - - - - {dataSourceText} - - - - - + + + {understanding?.intentLabel || intentTitle(evidence.intent) || understanding?.intent || "-"} + {understanding ? `${(understanding.confidence * 100).toFixed(0)}%` : "-"} + {task?.taskNo || task?.taskId || "-"} + {report?.title || report?.reportId || "-"} + + + + + {dataSourceText} + + + + + +
+ 规划依据 + + {understanding?.plan?.rationale || "等待 Agent 规划"} + + 执行计划} + dataSource={understanding?.plan?.steps || []} + locale={{ emptyText: "等待 Agent 规划" }} + renderItem={(step) => ( + + + {step.stepNo}. {step.stepName} + {step.reason || step.toolCode} + + + )} + /> +
+
+
+ ); +} + +function RepairTraceCard({ spans }: { spans: TraceSpan[] }) { + const agentSpans = spans.filter((span) => + ["agent.planner", "agent.executor", "agent.verifier", "agent.repair", "agent.verifier.retry"].includes(String(span.spanName || "")) + ); + const repairSpan = agentSpans.find((span) => span.spanName === "agent.repair"); + const verifierSpan = agentSpans.find((span) => span.spanName === "agent.verifier"); + const retrySpan = agentSpans.find((span) => span.spanName === "agent.verifier.retry"); + const verifierOutput = parseOutput(verifierSpan?.outputSummary); + const repairOutput = parseOutput(repairSpan?.outputSummary); + const missingEvidence = asStringList(verifierOutput.missingEvidence); + const repairTools = asStringList(verifierOutput.repairToolCodes); + + return ( + 已自动补证据 : retrySpan ? 二次校验通过 : Verifier} + > + + {agentSpans.length === 0 ? ( + 任务完成后会展示 Planner、Executor、Verifier 与自动修复 trace。 + ) : ( + ({ + color: spanColor(span.status), + children: ( + + + {spanTitle(span.spanName)} + + {span.latencyMs !== undefined && {span.latencyMs} ms} + + {span.errorMessage || span.inputSummary || span.outputSummary || "-"} + + ) + }))} + /> + )} + {(missingEvidence.length > 0 || repairTools.length > 0) && ( + + + + + + + + + {repairOutput.rationale ? String(repairOutput.rationale) : "Verifier 触发单轮补跑并重新生成报告"} + + + )} + ); } @@ -453,6 +663,30 @@ function StatusTag({ status }: { status?: string }) { return {value}; } +function spanColor(status?: string) { + const value = String(status || "").toUpperCase(); + if (value === "SUCCESS") return "green"; + if (value === "FAILED") return "red"; + if (value === "APPROVAL_REQUIRED") return "orange"; + return "blue"; +} + +function spanTitle(spanName?: string) { + if (spanName === "agent.planner") return "Planner 生成计划"; + if (spanName === "agent.executor") return "Executor 执行工具"; + if (spanName === "agent.verifier") return "Verifier 首次校验"; + if (spanName === "agent.repair") return "Repair 自动补证据"; + if (spanName === "agent.verifier.retry") return "Verifier 二次校验"; + return spanName || "Trace Span"; +} + +function asStringList(value: unknown) { + if (!Array.isArray(value)) { + return []; + } + return value.map((item) => String(item)).filter(Boolean); +} + function outputByTool(steps: AgentStep[]) { return steps.reduce>>((outputs, step) => { if (step.toolCode) { @@ -525,6 +759,17 @@ function intentTitle(intent?: string) { return ""; } +function percentValue(value?: number) { + if (value === undefined || value === null || Number.isNaN(Number(value))) { + return "-"; + } + return `${Number(value).toFixed(1)}%`; +} + +function isSupportedDate(value?: string) { + return Boolean(value && value >= SUPPORTED_DATE_START && value <= SUPPORTED_DATE_END); +} + function today() { return new Date().toISOString().slice(0, 10); } diff --git a/shopops-admin-ui/src/styles.css b/shopops-admin-ui/src/styles.css index b6c910f..6d9eb2d 100644 --- a/shopops-admin-ui/src/styles.css +++ b/shopops-admin-ui/src/styles.css @@ -87,6 +87,17 @@ body { width: 142px; } +.context-summary { + justify-content: flex-end; +} + +.context-summary .ant-tag { + margin-inline-end: 0; + padding: 4px 10px; + border-radius: 6px; + font-size: 13px; +} + .content { padding: 20px 24px 24px; } diff --git a/shopops-admin-ui/src/types.ts b/shopops-admin-ui/src/types.ts index 88825db..64ff7e0 100644 --- a/shopops-admin-ui/src/types.ts +++ b/shopops-admin-ui/src/types.ts @@ -7,9 +7,72 @@ export type NaturalLanguageResult = { focusAreas?: string[]; dataSources?: string[]; recommendedActions?: string[]; + taskSpec?: AgentTaskSpec; + plan?: AgentPlan; task: AgentTask; }; +export type AgentNaturalLanguageBatchEvaluationResponse = { + available?: boolean; + summaryPath?: string; + checkedAt?: string; + message?: string; + summary?: AgentNaturalLanguageBatchEvaluationSummary; +}; + +export type AgentNaturalLanguageBatchEvaluationSummary = { + generatedAt?: string; + evaluationName?: string; + dateRange?: { + start?: string; + end?: string; + days?: number; + }; + rounds?: number; + caseCount?: number; + passedCaseCount?: number; + passRate?: number; + successRate?: number; + intentAccuracy?: number; + toolInvocationCount?: number; + toolSuccessCount?: number; + toolInvocationSuccessRate?: number; + avgToolInvocationCount?: number; + avgWallClockDurationMs?: number; + p95WallClockDurationMs?: number; + avgTaskDurationMs?: number; + statusBreakdown?: Record; + scenarioBreakdown?: Array<{ + scenario?: string; + caseCount?: number; + passedCaseCount?: number; + successRate?: number; + avgToolInvocationCount?: number; + avgWallClockDurationMs?: number; + }>; +}; + +export type AgentTaskSpec = { + intent?: string; + objective?: string; + dateRange?: { start?: string; end?: string }; + focusAreas?: string[]; + requiredEvidence?: string[]; + outputFormat?: string; + constraints?: Record; +}; + +export type AgentPlan = { + taskType?: string; + rationale?: string; + steps?: Array<{ + stepNo?: number; + stepName?: string; + toolCode?: string; + reason?: string; + }>; +}; + export type AgentTask = { taskId: number | string; taskNo?: string; @@ -61,10 +124,26 @@ export type AgentTaskDetail = { task?: AgentTask; steps?: AgentStep[]; events?: AgentTaskEvent[]; + spans?: TraceSpan[]; shopConfigSnapshot?: Record; [key: string]: unknown; }; +export type TraceSpan = { + traceId?: string; + spanId?: string; + parentSpanId?: string; + spanType?: string; + spanName?: string; + refType?: string; + refId?: number | string; + status?: string; + inputSummary?: string; + outputSummary?: string; + latencyMs?: number; + errorMessage?: string; +}; + export type AgentTaskCreateResult = { taskId: number | string; taskNo?: string; diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/controller/AgentTaskController.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/controller/AgentTaskController.java index 12a219e..83544db 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/controller/AgentTaskController.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/controller/AgentTaskController.java @@ -4,13 +4,16 @@ import com.sirithree.shopops.admin.agent.domain.AgentTaskCreateResult; import com.sirithree.shopops.admin.agent.domain.AgentTaskDto; import com.sirithree.shopops.admin.agent.domain.AgentTaskEventDto; +import com.sirithree.shopops.admin.agent.domain.AgentTaskInterpretation; import com.sirithree.shopops.admin.agent.domain.AgentTaskQueryParam; import com.sirithree.shopops.admin.agent.domain.AgentTaskRecoveryResult; import com.sirithree.shopops.admin.agent.domain.AgentTaskStepDto; import com.sirithree.shopops.admin.agent.domain.DateRangeParam; import com.sirithree.shopops.admin.agent.domain.NaturalLanguageTaskCreateResult; import com.sirithree.shopops.admin.agent.domain.NaturalLanguageTaskRequest; +import com.sirithree.shopops.admin.agent.service.AgentTaskInterpreter; import com.sirithree.shopops.admin.agent.service.AgentTaskService; +import com.sirithree.shopops.admin.agent.service.PlannerService; import com.sirithree.shopops.admin.auth.annotation.RequireRole; import com.sirithree.shopops.admin.auth.domain.AuthRole; import com.sirithree.shopops.admin.common.context.RequestContext; @@ -19,7 +22,6 @@ import com.sirithree.shopops.common.api.CommonResult; import jakarta.validation.Valid; import java.time.LocalDate; -import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -33,9 +35,15 @@ @RequestMapping("/api/agent/tasks") public class AgentTaskController { private final AgentTaskService agentTaskService; + private final AgentTaskInterpreter agentTaskInterpreter; + private final PlannerService plannerService; - public AgentTaskController(AgentTaskService agentTaskService) { + public AgentTaskController(AgentTaskService agentTaskService, + AgentTaskInterpreter agentTaskInterpreter, + PlannerService plannerService) { this.agentTaskService = agentTaskService; + this.agentTaskInterpreter = agentTaskInterpreter; + this.plannerService = plannerService; } @PostMapping @@ -50,24 +58,29 @@ public CommonResult createTask(@Valid @RequestBody AgentT public CommonResult createTaskFromNaturalLanguage(@Valid @RequestBody NaturalLanguageTaskRequest request) { RequestContext context = RequestContextHolder.current(); AgentTaskCreateParam param = new AgentTaskCreateParam(); - String intent = routeIntent(request.getUserInput()); + DateRangeParam dateRange = defaultDateRange(request.getDateRange()); + AgentTaskInterpretation interpretation = agentTaskInterpreter.interpret(request.getUserInput(), dateRange); + String intent = interpretation.getTaskSpec().getIntent(); param.setTaskType("daily_review"); param.setUserInput(request.getUserInput().trim()); param.setIntent(intent); - param.setDateRange(defaultDateRange(request.getDateRange())); + param.setTaskSpec(interpretation.getTaskSpec()); + param.setDateRange(dateRange); AgentTaskCreateResult task = agentTaskService.createTask(context.getTenantId(), context.getShopId(), context.getUserId(), param); NaturalLanguageTaskCreateResult result = new NaturalLanguageTaskCreateResult(); result.setIntent(intent); - result.setIntentLabel(intentLabel(intent)); - result.setConfidence(routeConfidence(request.getUserInput())); + result.setIntentLabel(interpretation.getIntentLabel()); + result.setConfidence(interpretation.getConfidence()); result.setTaskType(param.getTaskType()); - result.setRoutedReason(routedReason(intent)); - result.setFocusAreas(focusAreas(request.getUserInput())); - result.setDataSources(dataSources(result.getFocusAreas())); - result.setRecommendedActions(recommendedActions(intent)); + result.setRoutedReason(interpretation.getRoutedReason()); + result.setFocusAreas(interpretation.getTaskSpec().getFocusAreas()); + result.setDataSources(interpretation.getDataSources()); + result.setRecommendedActions(interpretation.getRecommendedActions()); result.setDateRange(param.getDateRange()); + result.setTaskSpec(interpretation.getTaskSpec()); + result.setPlan(plannerService.previewPlan(interpretation.getTaskSpec())); result.setTask(task); return CommonResult.success(result); } @@ -132,114 +145,6 @@ private DateRangeParam defaultDateRange(DateRangeParam requested) { return fallback; } - private double routeConfidence(String userInput) { - String normalized = userInput == null ? "" : userInput.toLowerCase(); - if (normalized.contains("日报") || normalized.contains("daily") || normalized.contains("复盘") - || normalized.contains("报告") || normalized.contains("report")) { - return 0.95; - } - if (normalized.contains("差评") || normalized.contains("商品") || normalized.contains("投放") - || normalized.contains("评价") || normalized.contains("退款")) { - return 0.82; - } - return 0.68; - } - - private String routeIntent(String userInput) { - String normalized = userInput == null ? "" : userInput.toLowerCase(); - if (containsAny(normalized, "\u65e5\u62a5", "\u590d\u76d8", "\u62a5\u544a", "daily", "report")) { - return "daily_review"; - } - if (containsAny(normalized, "\u6295\u653e", "\u5e7f\u544a", "\u6d88\u8017", "\u8f6c\u5316", "ad", "campaign", "conversion")) { - return "ad_anomaly"; - } - if (containsAny(normalized, "\u5dee\u8bc4", "\u8bc4\u4ef7", "negative", "comment", "review")) { - return "comment_risk"; - } - if (containsAny(normalized, "\u4f4e\u70b9\u51fb", "\u5546\u54c1", "\u6807\u9898", "product", "title", "click")) { - return "product_optimization"; - } - return "daily_review"; - } - - private String intentLabel(String intent) { - return switch (intent) { - case "comment_risk" -> "\u5dee\u8bc4\u98ce\u9669\u5206\u6790"; - case "product_optimization" -> "\u5546\u54c1\u4f18\u5316\u8bc6\u522b"; - case "ad_anomaly" -> "\u6295\u653e\u5f02\u5e38\u68c0\u67e5"; - default -> "\u8fd0\u8425\u65e5\u62a5\u590d\u76d8"; - }; - } - - private String routedReason(String intent) { - return switch (intent) { - case "comment_risk" -> "\u5df2\u8bc6\u522b\u4e3a\u5dee\u8bc4\u98ce\u9669\u5206\u6790\uff1aAgent \u5c06\u6267\u884c\u8ba2\u5355\u57fa\u7ebf\u3001\u8bc4\u4ef7\u98ce\u9669\u3001\u53d7\u5f71\u54cd\u5546\u54c1\u548c\u4e13\u9879\u62a5\u544a\u751f\u6210\u6b65\u9aa4\u3002"; - case "product_optimization" -> "\u5df2\u8bc6\u522b\u4e3a\u5546\u54c1\u4f18\u5316\u8bc6\u522b\uff1aAgent \u5c06\u6267\u884c\u8ba2\u5355\u57fa\u7ebf\u3001\u4f4e\u70b9\u51fb\u5546\u54c1\u3001\u5173\u8054\u8bc4\u4ef7\u4fe1\u53f7\u548c\u4e13\u9879\u62a5\u544a\u751f\u6210\u6b65\u9aa4\u3002"; - case "ad_anomaly" -> "\u5df2\u8bc6\u522b\u4e3a\u6295\u653e\u5f02\u5e38\u68c0\u67e5\uff1aAgent \u5c06\u6267\u884c\u8ba2\u5355\u57fa\u7ebf\u3001\u6295\u653e\u5f02\u5e38\u3001\u5e73\u53f0\u6307\u6807\u5bf9\u6bd4\u548c\u4e13\u9879\u62a5\u544a\u751f\u6210\u6b65\u9aa4\u3002"; - default -> "\u5df2\u8bc6\u522b\u4e3a\u8fd0\u8425\u65e5\u62a5\u590d\u76d8\uff1a\u5f53\u524d Agent \u4f1a\u6c47\u603b\u8ba2\u5355\u3001\u8bc4\u4ef7\u3001\u5546\u54c1\u3001\u6295\u653e\u548c\u5e73\u53f0\u6307\u6807\u3002"; - }; - } - - private List recommendedActions(String intent) { - return switch (intent) { - case "comment_risk" -> List.of("\u805a\u7c7b\u4f4e\u661f\u8bc4\u4ef7\u539f\u56e0", "\u6807\u8bb0\u9700\u4f18\u5148\u5ba2\u670d\u4ecb\u5165\u7684\u5546\u54c1", "\u8ffd\u8e2a\u9000\u6b3e\u548c\u5dee\u8bc4\u5171\u632f\u98ce\u9669"); - case "product_optimization" -> List.of("\u8bc6\u522b\u4f4e\u70b9\u51fb\u6216\u9ad8\u98ce\u9669\u5546\u54c1", "\u751f\u6210\u6807\u9898\u548c\u4e3b\u56fe\u4f18\u5316\u5efa\u8bae", "\u6c89\u6dc0\u5f85\u4f18\u5316\u5546\u54c1\u6e05\u5355"); - case "ad_anomaly" -> List.of("\u68c0\u67e5\u9ad8\u6d88\u8017\u4f4e\u8f6c\u5316\u8ba1\u5212", "\u8bc4\u4f30 ROI \u548c CPC \u5f02\u5e38", "\u7ed9\u51fa\u9884\u7b97\u8c03\u6574\u5efa\u8bae"); - default -> List.of("\u6c47\u603b\u6838\u5fc3\u7ecf\u8425\u6307\u6807", "\u8bc6\u522b\u5f02\u5e38\u544a\u8b66", "\u751f\u6210\u7ed3\u6784\u5316\u8fd0\u8425\u5efa\u8bae"); - }; - } - - private List focusAreas(String userInput) { - String normalized = userInput == null ? "" : userInput.toLowerCase(); - List areas = new ArrayList<>(); - if (containsAny(normalized, "日报", "复盘", "报告", "daily", "report")) { - areas.add("运营日报"); - } - if (containsAny(normalized, "差评", "评价", "negative", "comment", "review")) { - areas.add("差评风险"); - } - if (containsAny(normalized, "退款", "退货", "售后", "refund", "return")) { - areas.add("退款售后"); - } - if (containsAny(normalized, "商品", "标题", "低点击", "product", "title", "click")) { - areas.add("商品优化"); - } - if (containsAny(normalized, "投放", "广告", "消耗", "转化", "ad", "campaign", "conversion")) { - areas.add("投放表现"); - } - if (areas.isEmpty()) { - areas.add("运营日报"); - areas.add("异常识别"); - areas.add("改进建议"); - } - return areas; - } - - private List dataSources(List focusAreas) { - List sources = new ArrayList<>(); - sources.add("订单汇总"); - if (focusAreas.contains("差评风险")) { - sources.add("评价明细"); - } - if (focusAreas.contains("商品优化")) { - sources.add("商品候选"); - } - if (focusAreas.contains("投放表现")) { - sources.add("广告投放"); - } - sources.add("平台外部指标"); - return sources; - } - - private boolean containsAny(String value, String... keywords) { - for (String keyword : keywords) { - if (value.contains(keyword)) { - return true; - } - } - return false; - } - private boolean hasText(String value) { return value != null && !value.isBlank(); } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentExecutionResult.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentExecutionResult.java index 847f147..2838256 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentExecutionResult.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentExecutionResult.java @@ -10,6 +10,7 @@ public class AgentExecutionResult { private Map stepResults = new LinkedHashMap<>(); private Long reportId; private String errorMessage; + private AgentVerificationResult verification; public Boolean getSuccess() { return success; @@ -50,4 +51,12 @@ public String getErrorMessage() { public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } + + public AgentVerificationResult getVerification() { + return verification; + } + + public void setVerification(AgentVerificationResult verification) { + this.verification = verification; + } } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlan.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlan.java index 8bb96b2..e8ad2a4 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlan.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlan.java @@ -5,6 +5,7 @@ public class AgentPlan { private String taskType; + private String rationale; private List steps = new ArrayList<>(); public String getTaskType() { @@ -15,6 +16,14 @@ public void setTaskType(String taskType) { this.taskType = taskType; } + public String getRationale() { + return rationale; + } + + public void setRationale(String rationale) { + this.rationale = rationale; + } + public List getSteps() { return steps; } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlanStep.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlanStep.java index 17fa5f8..211dab1 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlanStep.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentPlanStep.java @@ -4,11 +4,17 @@ public class AgentPlanStep { private Integer stepNo; private String stepName; private String toolCode; + private String reason; public AgentPlanStep(Integer stepNo, String stepName, String toolCode) { + this(stepNo, stepName, toolCode, null); + } + + public AgentPlanStep(Integer stepNo, String stepName, String toolCode, String reason) { this.stepNo = stepNo; this.stepName = stepName; this.toolCode = toolCode; + this.reason = reason; } public Integer getStepNo() { @@ -34,4 +40,12 @@ public String getToolCode() { public void setToolCode(String toolCode) { this.toolCode = toolCode; } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskCreateParam.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskCreateParam.java index c1d2f99..143f784 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskCreateParam.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskCreateParam.java @@ -13,6 +13,9 @@ public class AgentTaskCreateParam { private String intent; + @Valid + private AgentTaskSpec taskSpec; + @Valid @NotNull private DateRangeParam dateRange; @@ -41,6 +44,14 @@ public void setIntent(String intent) { this.intent = intent; } + public AgentTaskSpec getTaskSpec() { + return taskSpec; + } + + public void setTaskSpec(AgentTaskSpec taskSpec) { + this.taskSpec = taskSpec; + } + public DateRangeParam getDateRange() { return dateRange; } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskInterpretation.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskInterpretation.java new file mode 100644 index 0000000..9e44e1c --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskInterpretation.java @@ -0,0 +1,61 @@ +package com.sirithree.shopops.admin.agent.domain; + +import java.util.ArrayList; +import java.util.List; + +public class AgentTaskInterpretation { + private AgentTaskSpec taskSpec; + private double confidence; + private String intentLabel; + private String routedReason; + private List dataSources = new ArrayList<>(); + private List recommendedActions = new ArrayList<>(); + + public AgentTaskSpec getTaskSpec() { + return taskSpec; + } + + public void setTaskSpec(AgentTaskSpec taskSpec) { + this.taskSpec = taskSpec; + } + + public double getConfidence() { + return confidence; + } + + public void setConfidence(double confidence) { + this.confidence = confidence; + } + + public String getIntentLabel() { + return intentLabel; + } + + public void setIntentLabel(String intentLabel) { + this.intentLabel = intentLabel; + } + + public String getRoutedReason() { + return routedReason; + } + + public void setRoutedReason(String routedReason) { + this.routedReason = routedReason; + } + + public List getDataSources() { + return dataSources; + } + + public void setDataSources(List dataSources) { + this.dataSources = dataSources == null ? new ArrayList<>() : new ArrayList<>(dataSources); + } + + public List getRecommendedActions() { + return recommendedActions; + } + + public void setRecommendedActions(List recommendedActions) { + this.recommendedActions = recommendedActions == null ? new ArrayList<>() : new ArrayList<>(recommendedActions); + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskSpec.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskSpec.java new file mode 100644 index 0000000..221d33e --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentTaskSpec.java @@ -0,0 +1,72 @@ +package com.sirithree.shopops.admin.agent.domain; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class AgentTaskSpec { + private String intent; + private String objective; + private DateRangeParam dateRange; + private List focusAreas = new ArrayList<>(); + private List requiredEvidence = new ArrayList<>(); + private String outputFormat; + private Map constraints = new LinkedHashMap<>(); + + public String getIntent() { + return intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + + public String getObjective() { + return objective; + } + + public void setObjective(String objective) { + this.objective = objective; + } + + public DateRangeParam getDateRange() { + return dateRange; + } + + public void setDateRange(DateRangeParam dateRange) { + this.dateRange = dateRange; + } + + public List getFocusAreas() { + return focusAreas; + } + + public void setFocusAreas(List focusAreas) { + this.focusAreas = focusAreas == null ? new ArrayList<>() : new ArrayList<>(focusAreas); + } + + public List getRequiredEvidence() { + return requiredEvidence; + } + + public void setRequiredEvidence(List requiredEvidence) { + this.requiredEvidence = requiredEvidence == null ? new ArrayList<>() : new ArrayList<>(requiredEvidence); + } + + public String getOutputFormat() { + return outputFormat; + } + + public void setOutputFormat(String outputFormat) { + this.outputFormat = outputFormat; + } + + public Map getConstraints() { + return constraints; + } + + public void setConstraints(Map constraints) { + this.constraints = constraints == null ? new LinkedHashMap<>() : new LinkedHashMap<>(constraints); + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentVerificationCheck.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentVerificationCheck.java new file mode 100644 index 0000000..e76435e --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentVerificationCheck.java @@ -0,0 +1,40 @@ +package com.sirithree.shopops.admin.agent.domain; + +public class AgentVerificationCheck { + private String code; + private String status; + private String message; + + public AgentVerificationCheck() { + } + + public AgentVerificationCheck(String code, String status, String message) { + this.code = code; + this.status = status; + this.message = message; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentVerificationResult.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentVerificationResult.java new file mode 100644 index 0000000..8735e2a --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/AgentVerificationResult.java @@ -0,0 +1,61 @@ +package com.sirithree.shopops.admin.agent.domain; + +import java.util.ArrayList; +import java.util.List; + +public class AgentVerificationResult { + private boolean passed; + private double score; + private List checks = new ArrayList<>(); + private boolean repairable; + private List missingEvidence = new ArrayList<>(); + private List repairToolCodes = new ArrayList<>(); + + public boolean isPassed() { + return passed; + } + + public void setPassed(boolean passed) { + this.passed = passed; + } + + public double getScore() { + return score; + } + + public void setScore(double score) { + this.score = score; + } + + public List getChecks() { + return checks; + } + + public void setChecks(List checks) { + this.checks = checks == null ? new ArrayList<>() : new ArrayList<>(checks); + } + + public boolean isRepairable() { + return repairable; + } + + public void setRepairable(boolean repairable) { + this.repairable = repairable; + } + + public List getMissingEvidence() { + return missingEvidence; + } + + public void setMissingEvidence(List missingEvidence) { + this.missingEvidence = missingEvidence == null ? new ArrayList<>() : new ArrayList<>(missingEvidence); + } + + public List getRepairToolCodes() { + return repairToolCodes; + } + + public void setRepairToolCodes(List repairToolCodes) { + this.repairToolCodes = repairToolCodes == null ? new ArrayList<>() : new ArrayList<>(repairToolCodes); + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/NaturalLanguageTaskCreateResult.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/NaturalLanguageTaskCreateResult.java index d176f0a..9df935c 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/NaturalLanguageTaskCreateResult.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/domain/NaturalLanguageTaskCreateResult.java @@ -12,6 +12,8 @@ public class NaturalLanguageTaskCreateResult { private List dataSources; private List recommendedActions; private DateRangeParam dateRange; + private AgentTaskSpec taskSpec; + private AgentPlan plan; private AgentTaskCreateResult task; public String getIntent() { @@ -86,6 +88,22 @@ public void setDateRange(DateRangeParam dateRange) { this.dateRange = dateRange; } + public AgentTaskSpec getTaskSpec() { + return taskSpec; + } + + public void setTaskSpec(AgentTaskSpec taskSpec) { + this.taskSpec = taskSpec; + } + + public AgentPlan getPlan() { + return plan; + } + + public void setPlan(AgentPlan plan) { + this.plan = plan; + } + public AgentTaskCreateResult getTask() { return task; } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/AgentExecutorService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/AgentExecutorService.java index afd7133..45bff17 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/AgentExecutorService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/AgentExecutorService.java @@ -6,4 +6,8 @@ public interface AgentExecutorService { AgentExecutionResult execute(AgentTaskContext context, AgentPlan plan); + + default AgentExecutionResult execute(AgentTaskContext context, AgentPlan plan, AgentExecutionResult baseResult) { + return execute(context, plan); + } } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/AgentTaskInterpreter.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/AgentTaskInterpreter.java new file mode 100644 index 0000000..4419ee3 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/AgentTaskInterpreter.java @@ -0,0 +1,8 @@ +package com.sirithree.shopops.admin.agent.service; + +import com.sirithree.shopops.admin.agent.domain.AgentTaskInterpretation; +import com.sirithree.shopops.admin.agent.domain.DateRangeParam; + +public interface AgentTaskInterpreter { + AgentTaskInterpretation interpret(String userInput, DateRangeParam dateRange); +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/PlannerService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/PlannerService.java index c6b0b4f..bc61308 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/PlannerService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/PlannerService.java @@ -2,7 +2,10 @@ import com.sirithree.shopops.admin.agent.domain.AgentPlan; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentTaskSpec; public interface PlannerService { AgentPlan createPlan(AgentTaskContext context); + + AgentPlan previewPlan(AgentTaskSpec taskSpec); } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/StepExecutionRecorder.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/StepExecutionRecorder.java index 0726194..9ad1ac7 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/StepExecutionRecorder.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/StepExecutionRecorder.java @@ -1,8 +1,13 @@ package com.sirithree.shopops.admin.agent.service; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentPlanStep; public interface StepExecutionRecorder { + default Long ensureStep(AgentTaskContext context, AgentPlanStep step) { + return context.resolveStepId(step.getStepNo()); + } + void running(AgentTaskContext context, Long stepId, Object input); void success(AgentTaskContext context, Long stepId, Object output); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/VerifierService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/VerifierService.java index f3a21dd..96aac14 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/VerifierService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/VerifierService.java @@ -2,7 +2,8 @@ import com.sirithree.shopops.admin.agent.domain.AgentExecutionResult; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentVerificationResult; public interface VerifierService { - void verify(AgentTaskContext context, AgentExecutionResult result); + AgentVerificationResult verify(AgentTaskContext context, AgentExecutionResult result); } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/BasicVerifierService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/BasicVerifierService.java index b72cd53..8fd7a89 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/BasicVerifierService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/BasicVerifierService.java @@ -2,18 +2,117 @@ import com.sirithree.shopops.admin.agent.domain.AgentExecutionResult; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentTaskSpec; +import com.sirithree.shopops.admin.agent.domain.AgentVerificationCheck; +import com.sirithree.shopops.admin.agent.domain.AgentVerificationResult; import com.sirithree.shopops.admin.agent.service.VerifierService; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeResult; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import org.springframework.stereotype.Service; @Service public class BasicVerifierService implements VerifierService { + private static final Map EVIDENCE_TOOL_CODES = Map.of( + "order_summary", "order.query_summary", + "negative_comments", "comment.query_negative", + "product_candidates", "product.query_candidates", + "ad_performance", "ad.query_performance", + "external_metrics", "report.query_external_metrics" + ); + @Override - public void verify(AgentTaskContext context, AgentExecutionResult result) { - if (!Boolean.TRUE.equals(result.getSuccess())) { - throw new IllegalStateException(result.getErrorMessage() == null ? "任务执行失败" : result.getErrorMessage()); + public AgentVerificationResult verify(AgentTaskContext context, AgentExecutionResult result) { + List checks = new ArrayList<>(); + List missingEvidence = new ArrayList<>(); + List repairToolCodes = new ArrayList<>(); + checks.add(check( + "execution_success", + Boolean.TRUE.equals(result.getSuccess()), + "Agent 执行链路成功", + result.getErrorMessage() == null ? "Agent 执行链路失败" : result.getErrorMessage() + )); + checks.add(check( + "report_generated", + result.getReportId() != null, + "已生成可追踪报告 reportId=" + result.getReportId(), + "报告未生成" + )); + + AgentTaskSpec taskSpec = context.getCreateParam().getTaskSpec(); + boolean allowDegraded = allowsDegradedEvidence(taskSpec); + for (String evidence : requiredEvidence(context, taskSpec)) { + String toolCode = EVIDENCE_TOOL_CODES.get(evidence); + if (toolCode == null) { + checks.add(new AgentVerificationCheck("evidence_" + evidence, "FAIL", "未知证据类型: " + evidence)); + continue; + } + ToolInvokeResult toolResult = result.getStepResults().get(toolCode); + if (toolResult == null || !Boolean.TRUE.equals(toolResult.getSuccess())) { + missingEvidence.add(evidence); + addRepairToolCode(repairToolCodes, toolCode); + checks.add(new AgentVerificationCheck( + "evidence_" + evidence, + allowDegraded ? "WARN" : "FAIL", + "缺少证据 " + evidence + ",对应工具 " + toolCode + " 未成功" + )); + continue; + } + if (toolResult.getData() == null) { + missingEvidence.add(evidence); + addRepairToolCode(repairToolCodes, toolCode); + } + checks.add(new AgentVerificationCheck( + "evidence_" + evidence, + toolResult.getData() == null ? (allowDegraded ? "WARN" : "FAIL") : "PASS", + toolResult.getData() == null + ? "工具 " + toolCode + " 未返回证据数据" + : "证据 " + evidence + " 已由 " + toolCode + " 提供" + )); } - if (result.getReportId() == null) { - throw new IllegalStateException("报告未生成"); + + AgentVerificationResult verification = new AgentVerificationResult(); + verification.setChecks(checks); + verification.setPassed(checks.stream().noneMatch(item -> "FAIL".equals(item.getStatus()))); + verification.setMissingEvidence(missingEvidence); + verification.setRepairToolCodes(repairToolCodes); + verification.setRepairable(!repairToolCodes.isEmpty()); + double earned = checks.stream().mapToDouble(item -> switch (item.getStatus()) { + case "PASS" -> 1.0; + case "WARN" -> 0.5; + default -> 0.0; + }).sum(); + verification.setScore(checks.isEmpty() ? 0.0 : Math.round(earned * 10000.0 / checks.size()) / 10000.0); + return verification; + } + + private AgentVerificationCheck check(String code, boolean passed, String successMessage, String failureMessage) { + return new AgentVerificationCheck(code, passed ? "PASS" : "FAIL", passed ? successMessage : failureMessage); + } + + private void addRepairToolCode(List toolCodes, String toolCode) { + if (!toolCodes.contains(toolCode)) { + toolCodes.add(toolCode); + } + } + + private boolean allowsDegradedEvidence(AgentTaskSpec taskSpec) { + if (taskSpec == null || taskSpec.getConstraints() == null) { + return true; + } + return !Boolean.FALSE.equals(taskSpec.getConstraints().get("allowDegradedEvidence")); + } + + private List requiredEvidence(AgentTaskContext context, AgentTaskSpec taskSpec) { + if (taskSpec != null && taskSpec.getRequiredEvidence() != null && !taskSpec.getRequiredEvidence().isEmpty()) { + return taskSpec.getRequiredEvidence(); } + return switch (context.getCreateParam().getIntent() == null ? "daily_review" : context.getCreateParam().getIntent()) { + case "comment_risk" -> List.of("order_summary", "negative_comments", "product_candidates"); + case "product_optimization" -> List.of("order_summary", "product_candidates", "negative_comments"); + case "ad_anomaly" -> List.of("order_summary", "ad_performance", "external_metrics"); + default -> List.of("order_summary", "negative_comments", "product_candidates", "ad_performance", "external_metrics"); + }; } } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultAgentEngineService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultAgentEngineService.java index 017bf95..463b5b8 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultAgentEngineService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultAgentEngineService.java @@ -1,15 +1,21 @@ package com.sirithree.shopops.admin.agent.service.impl; -import com.sirithree.shopops.admin.audit.domain.TraceSpanCreateCommand; -import com.sirithree.shopops.admin.audit.service.TraceService; import com.sirithree.shopops.admin.agent.domain.AgentExecutionResult; import com.sirithree.shopops.admin.agent.domain.AgentPlan; +import com.sirithree.shopops.admin.agent.domain.AgentPlanStep; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentVerificationResult; import com.sirithree.shopops.admin.agent.service.AgentEngineService; import com.sirithree.shopops.admin.agent.service.AgentExecutorService; import com.sirithree.shopops.admin.agent.service.PlanValidator; import com.sirithree.shopops.admin.agent.service.PlannerService; import com.sirithree.shopops.admin.agent.service.VerifierService; +import com.sirithree.shopops.admin.audit.domain.TraceSpanCreateCommand; +import com.sirithree.shopops.admin.audit.service.TraceService; +import com.sirithree.shopops.admin.common.JacksonJsonSupport; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; import org.springframework.stereotype.Service; @Service @@ -19,17 +25,20 @@ public class DefaultAgentEngineService implements AgentEngineService { private final AgentExecutorService executorService; private final VerifierService verifierService; private final TraceService traceService; + private final JacksonJsonSupport jsonSupport; public DefaultAgentEngineService(PlannerService plannerService, PlanValidator planValidator, AgentExecutorService executorService, VerifierService verifierService, - TraceService traceService) { + TraceService traceService, + JacksonJsonSupport jsonSupport) { this.plannerService = plannerService; this.planValidator = planValidator; this.executorService = executorService; this.verifierService = verifierService; this.traceService = traceService; + this.jsonSupport = jsonSupport; } @Override @@ -41,7 +50,7 @@ public AgentExecutionResult executeTask(AgentTaskContext context) { activeChildSpan = plannerSpan; AgentPlan plan = plannerService.createPlan(context); planValidator.validate(context, plan); - traceService.finishSpan(context.getTraceId(), plannerSpan, "SUCCESS", "steps=" + plan.getSteps().size(), null); + traceService.finishSpan(context.getTraceId(), plannerSpan, "SUCCESS", jsonSupport.toJson(plan), null); activeChildSpan = null; String executorSpan = startSpan(context, rootSpan, "executor", "agent.executor", "task", context.getTaskId(), "execute plan"); @@ -60,9 +69,22 @@ public AgentExecutionResult executeTask(AgentTaskContext context) { String verifierSpan = startSpan(context, rootSpan, "verifier", "agent.verifier", "task", context.getTaskId(), "verify result"); activeChildSpan = verifierSpan; - verifierService.verify(context, result); - traceService.finishSpan(context.getTraceId(), verifierSpan, "SUCCESS", "verification passed", null); - activeChildSpan = null; + AgentVerificationResult verification = verifierService.verify(context, result); + result.setVerification(verification); + if (!verification.isPassed()) { + if (verification.isRepairable()) { + traceService.finishSpan(context.getTraceId(), verifierSpan, "FAILED", jsonSupport.toJson(verification), "verification failed, repair required"); + activeChildSpan = null; + result = repairAndVerify(context, rootSpan, plan, result); + } else { + traceService.finishSpan(context.getTraceId(), verifierSpan, "FAILED", jsonSupport.toJson(verification), "verification failed"); + activeChildSpan = null; + throw new IllegalStateException("Agent result verification failed"); + } + } else { + traceService.finishSpan(context.getTraceId(), verifierSpan, "SUCCESS", jsonSupport.toJson(verification), null); + activeChildSpan = null; + } traceService.finishSpan(context.getTraceId(), rootSpan, "SUCCESS", "task finished", null); return result; @@ -72,9 +94,69 @@ public AgentExecutionResult executeTask(AgentTaskContext context) { } traceService.finishSpan(context.getTraceId(), rootSpan, "FAILED", null, ex.getMessage()); throw ex; + } finally { + context.setExecutorSpanId(null); } } + private AgentExecutionResult repairAndVerify(AgentTaskContext context, + String rootSpan, + AgentPlan originalPlan, + AgentExecutionResult baseResult) { + AgentPlan repairPlan = repairPlan(originalPlan, baseResult.getVerification()); + String repairSpan = startSpan(context, rootSpan, "executor", "agent.repair", "task", context.getTaskId(), "repair missing evidence"); + context.setExecutorSpanId(repairSpan); + AgentExecutionResult repairedResult = executorService.execute(context, repairPlan, baseResult); + context.setExecutorSpanId(null); + if (!Boolean.TRUE.equals(repairedResult.getSuccess())) { + String errorMessage = repairedResult.getErrorMessage() == null ? "Repair execution failed" : repairedResult.getErrorMessage(); + traceService.finishSpan(context.getTraceId(), repairSpan, "FAILED", jsonSupport.toJson(repairPlan), errorMessage); + throw new IllegalStateException(errorMessage); + } + traceService.finishSpan(context.getTraceId(), repairSpan, "SUCCESS", jsonSupport.toJson(repairPlan), null); + + String reverifySpan = startSpan(context, rootSpan, "verifier", "agent.verifier.retry", "task", context.getTaskId(), "verify repaired result"); + AgentVerificationResult verification = verifierService.verify(context, repairedResult); + repairedResult.setVerification(verification); + if (!verification.isPassed()) { + traceService.finishSpan(context.getTraceId(), reverifySpan, "FAILED", jsonSupport.toJson(verification), "verification failed after repair"); + throw new IllegalStateException("Agent result verification failed"); + } + traceService.finishSpan(context.getTraceId(), reverifySpan, "SUCCESS", jsonSupport.toJson(verification), null); + return repairedResult; + } + + private AgentPlan repairPlan(AgentPlan originalPlan, AgentVerificationResult verification) { + int stepNo = originalPlan.getSteps().stream() + .map(AgentPlanStep::getStepNo) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .max() + .orElse(0); + List steps = new ArrayList<>(); + for (String toolCode : verification.getRepairToolCodes()) { + steps.add(new AgentPlanStep(++stepNo, repairStepName(toolCode), toolCode, "Verifier detected missing evidence and requested a supplemental tool call")); + } + steps.add(new AgentPlanStep(++stepNo, "重新生成报告", "report.generate_daily_review", "Use repaired evidence to refresh the final report")); + + AgentPlan repairPlan = new AgentPlan(); + repairPlan.setTaskType(originalPlan.getTaskType()); + repairPlan.setRationale("Verifier requested a bounded repair run for missing evidence: " + verification.getMissingEvidence()); + repairPlan.setSteps(steps); + return repairPlan; + } + + private String repairStepName(String toolCode) { + return switch (toolCode) { + case "order.query_summary" -> "补充订单证据"; + case "comment.query_negative" -> "补充评价证据"; + case "product.query_candidates" -> "补充商品证据"; + case "ad.query_performance" -> "补充投放证据"; + case "report.query_external_metrics" -> "补充外部指标"; + default -> "补充证据"; + }; + } + private String startSpan(AgentTaskContext context, String parentSpanId, String spanType, String spanName, String refType, Long refId, String inputSummary) { TraceSpanCreateCommand command = new TraceSpanCreateCommand(); command.setTenantId(context.getTenantId()); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultPlanValidator.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultPlanValidator.java index 89ed725..79a6a83 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultPlanValidator.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/DefaultPlanValidator.java @@ -4,6 +4,8 @@ import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; import com.sirithree.shopops.admin.agent.service.PlanValidator; import com.sirithree.shopops.admin.tool.service.McpToolService; +import java.util.HashSet; +import java.util.Set; import org.springframework.stereotype.Service; @Service @@ -16,13 +18,30 @@ public DefaultPlanValidator(McpToolService mcpToolService) { @Override public void validate(AgentTaskContext context, AgentPlan plan) { - if (plan.getSteps().isEmpty()) { + if (plan == null || plan.getSteps() == null || plan.getSteps().isEmpty()) { throw new IllegalArgumentException("执行计划不能为空"); } - plan.getSteps().forEach(step -> { + Set toolCodes = new HashSet<>(); + for (int index = 0; index < plan.getSteps().size(); index++) { + var step = plan.getSteps().get(index); + int expectedStepNo = index + 1; + if (!Integer.valueOf(expectedStepNo).equals(step.getStepNo())) { + throw new IllegalArgumentException("计划步骤编号必须从 1 连续递增"); + } + if (step.getToolCode() == null || step.getToolCode().isBlank()) { + throw new IllegalArgumentException("计划步骤缺少工具编码: " + expectedStepNo); + } + if (!toolCodes.add(step.getToolCode())) { + throw new IllegalArgumentException("计划包含重复工具: " + step.getToolCode()); + } if (mcpToolService.getTool(context.getTenantId(), step.getToolCode()) == null) { throw new IllegalArgumentException("计划包含未注册工具: " + step.getToolCode()); } - }); + boolean reportTool = "report.generate_daily_review".equals(step.getToolCode()); + boolean finalStep = index == plan.getSteps().size() - 1; + if (reportTool != finalStep) { + throw new IllegalArgumentException("报告生成工具必须且只能作为最后一步"); + } + } } } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/InMemoryAgentTaskService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/InMemoryAgentTaskService.java index 0d6224c..3a01924 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/InMemoryAgentTaskService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/InMemoryAgentTaskService.java @@ -168,7 +168,7 @@ public List listEvents(Long tenantId, Long shopId, Long taskI private void seedSteps(Long taskId, AgentTaskCreateParam param) { List taskSteps = new ArrayList<>(); - for (var planStep : RulePlannerService.ruleSteps(param.getIntent())) { + for (var planStep : RulePlannerService.ruleSteps(param)) { taskSteps.add(step(taskId, planStep.getStepNo(), planStep.getStepName(), planStep.getToolCode())); } steps.put(taskId, taskSteps); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcAgentTaskService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcAgentTaskService.java index 3bcf3ae..559e7cd 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcAgentTaskService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcAgentTaskService.java @@ -256,7 +256,7 @@ private int safePositive(Integer value, int defaultValue, int min, int max) { private Map seedSteps(AgentTask task, AgentTaskCreateParam param) { Map stepIdByStepNo = new HashMap<>(); - for (var planStep : RulePlannerService.ruleSteps(param.getIntent())) { + for (var planStep : RulePlannerService.ruleSteps(param)) { stepIdByStepNo.put(planStep.getStepNo(), insertStep(task, planStep.getStepNo(), planStep.getStepName(), planStep.getToolCode())); } return stepIdByStepNo; diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcStepExecutionRecorder.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcStepExecutionRecorder.java index d6afa61..bb2bd74 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcStepExecutionRecorder.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/JdbcStepExecutionRecorder.java @@ -1,6 +1,7 @@ package com.sirithree.shopops.admin.agent.service.impl; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentPlanStep; import com.sirithree.shopops.admin.agent.domain.AgentStepStatus; import com.sirithree.shopops.admin.agent.service.StepExecutionRecorder; import com.sirithree.shopops.admin.common.JacksonJsonSupport; @@ -21,6 +22,26 @@ public JdbcStepExecutionRecorder(AgentTaskStepMapper agentTaskStepMapper, Jackso this.jsonSupport = jsonSupport; } + @Override + public Long ensureStep(AgentTaskContext context, AgentPlanStep planStep) { + Long existing = context.getStepIdByStepNo().get(planStep.getStepNo()); + if (existing != null) { + return existing; + } + AgentTaskStep step = new AgentTaskStep(); + step.setTenantId(context.getTenantId()); + step.setShopId(context.getShopId()); + step.setTaskId(context.getTaskId()); + step.setStepNo(planStep.getStepNo()); + step.setStepName(planStep.getStepName()); + step.setToolCode(planStep.getToolCode()); + step.setStatus(AgentStepStatus.PENDING.name()); + step.setRetryCount(0); + agentTaskStepMapper.insert(step); + context.getStepIdByStepNo().put(planStep.getStepNo(), step.getId()); + return step.getId(); + } + @Override public void running(AgentTaskContext context, Long stepId, Object input) { AgentTaskStep step = base(context, stepId); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/RuleBasedAgentTaskInterpreter.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/RuleBasedAgentTaskInterpreter.java new file mode 100644 index 0000000..bce29e3 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/RuleBasedAgentTaskInterpreter.java @@ -0,0 +1,154 @@ +package com.sirithree.shopops.admin.agent.service.impl; + +import com.sirithree.shopops.admin.agent.domain.AgentTaskInterpretation; +import com.sirithree.shopops.admin.agent.domain.AgentTaskSpec; +import com.sirithree.shopops.admin.agent.domain.DateRangeParam; +import com.sirithree.shopops.admin.agent.service.AgentTaskInterpreter; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Service; + +@Service +public class RuleBasedAgentTaskInterpreter implements AgentTaskInterpreter { + @Override + public AgentTaskInterpretation interpret(String userInput, DateRangeParam dateRange) { + String normalizedInput = userInput == null ? "" : userInput.trim(); + String intent = routeIntent(normalizedInput); + + AgentTaskSpec spec = new AgentTaskSpec(); + spec.setIntent(intent); + spec.setObjective(normalizedInput); + spec.setDateRange(dateRange); + spec.setFocusAreas(focusAreas(normalizedInput)); + spec.setRequiredEvidence(requiredEvidence(intent)); + spec.setOutputFormat("structured_markdown_report"); + spec.setConstraints(defaultConstraints()); + + AgentTaskInterpretation interpretation = new AgentTaskInterpretation(); + interpretation.setTaskSpec(spec); + interpretation.setConfidence(routeConfidence(normalizedInput)); + interpretation.setIntentLabel(intentLabel(intent)); + interpretation.setRoutedReason(routedReason(intent)); + interpretation.setDataSources(dataSources(spec.getRequiredEvidence())); + interpretation.setRecommendedActions(recommendedActions(intent)); + return interpretation; + } + + private String routeIntent(String userInput) { + String normalized = userInput.toLowerCase(); + if (containsAny(normalized, "日报", "复盘", "报告", "daily", "report")) { + return "daily_review"; + } + if (containsAny(normalized, "投放", "广告", "消耗", "转化", "ad", "campaign", "conversion")) { + return "ad_anomaly"; + } + if (containsAny(normalized, "差评", "评价", "negative", "comment", "review")) { + return "comment_risk"; + } + if (containsAny(normalized, "低点击", "商品", "标题", "product", "title", "click")) { + return "product_optimization"; + } + return "daily_review"; + } + + private double routeConfidence(String userInput) { + String normalized = userInput.toLowerCase(); + if (containsAny(normalized, "日报", "daily", "复盘", "报告", "report")) { + return 0.95; + } + if (containsAny(normalized, "差评", "商品", "投放", "评价", "退款", "negative", "product", "campaign")) { + return 0.82; + } + return 0.68; + } + + private String intentLabel(String intent) { + return switch (intent) { + case "comment_risk" -> "差评风险分析"; + case "product_optimization" -> "商品优化识别"; + case "ad_anomaly" -> "投放异常检查"; + default -> "运营日报复盘"; + }; + } + + private String routedReason(String intent) { + return switch (intent) { + case "comment_risk" -> "识别为差评风险分析,将核对订单基线、评价风险和受影响商品。"; + case "product_optimization" -> "识别为商品优化任务,将分析订单基线、商品候选和关联评价信号。"; + case "ad_anomaly" -> "识别为投放异常任务,将检查订单基线、广告表现和外部指标。"; + default -> "识别为经营复盘任务,将汇总订单、评价、商品、投放和外部指标。"; + }; + } + + private List focusAreas(String userInput) { + String normalized = userInput.toLowerCase(); + List areas = new ArrayList<>(); + if (containsAny(normalized, "日报", "复盘", "报告", "daily", "report")) { + areas.add("运营日报"); + } + if (containsAny(normalized, "差评", "评价", "negative", "comment", "review")) { + areas.add("差评风险"); + } + if (containsAny(normalized, "退款", "退货", "售后", "refund", "return")) { + areas.add("退款售后"); + } + if (containsAny(normalized, "商品", "标题", "低点击", "product", "title", "click")) { + areas.add("商品优化"); + } + if (containsAny(normalized, "投放", "广告", "消耗", "转化", "ad", "campaign", "conversion")) { + areas.add("投放表现"); + } + if (areas.isEmpty()) { + areas.addAll(List.of("运营日报", "异常识别", "改进建议")); + } + return areas; + } + + private List requiredEvidence(String intent) { + return switch (intent) { + case "comment_risk" -> List.of("order_summary", "negative_comments", "product_candidates"); + case "product_optimization" -> List.of("order_summary", "product_candidates", "negative_comments"); + case "ad_anomaly" -> List.of("order_summary", "ad_performance", "external_metrics"); + default -> List.of("order_summary", "negative_comments", "product_candidates", "ad_performance", "external_metrics"); + }; + } + + private List dataSources(List requiredEvidence) { + Map labels = Map.of( + "order_summary", "订单汇总", + "negative_comments", "评价明细", + "product_candidates", "商品候选", + "ad_performance", "广告投放", + "external_metrics", "平台外部指标" + ); + return requiredEvidence.stream().map(labels::get).toList(); + } + + private List recommendedActions(String intent) { + return switch (intent) { + case "comment_risk" -> List.of("聚类低星评价原因", "标记需客服优先介入的商品", "追踪退款与差评共振风险"); + case "product_optimization" -> List.of("识别低点击或高风险商品", "生成标题和主图优化建议", "沉淀待优化商品清单"); + case "ad_anomaly" -> List.of("检查高消耗低转化计划", "评估 ROI 和 CPC 异常", "给出预算调整建议"); + default -> List.of("汇总核心经营指标", "识别异常告警", "生成结构化运营建议"); + }; + } + + private Map defaultConstraints() { + Map constraints = new LinkedHashMap<>(); + constraints.put("readOnlyAnalysis", true); + constraints.put("allowDegradedEvidence", true); + constraints.put("requireTraceableEvidence", true); + return constraints; + } + + private boolean containsAny(String value, String... keywords) { + for (String keyword : keywords) { + if (value.contains(keyword)) { + return true; + } + } + return false; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerService.java index ecf1a4c..1e29460 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerService.java @@ -5,6 +5,8 @@ import com.sirithree.shopops.admin.agent.domain.AgentPlan; import com.sirithree.shopops.admin.agent.domain.AgentPlanStep; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentTaskCreateParam; +import com.sirithree.shopops.admin.agent.domain.AgentTaskSpec; import com.sirithree.shopops.admin.agent.service.PlannerService; import com.sirithree.shopops.admin.model.config.ModelGatewayPlannerProperties; import com.sirithree.shopops.admin.model.domain.ModelCallStatus; @@ -44,7 +46,7 @@ public AgentPlan createPlan(AgentTaskContext context) { if (!"daily_review".equals(context.getCreateParam().getTaskType())) { throw new IllegalArgumentException("P0 仅支持 daily_review 任务"); } - String intent = context.getCreateParam().getIntent(); + String intent = resolveIntent(context); if (hasText(intent) && !"daily_review".equals(intent)) { return rulePlan(intent); } @@ -54,6 +56,11 @@ public AgentPlan createPlan(AgentTaskContext context) { return rulePlan("daily_review"); } + @Override + public AgentPlan previewPlan(AgentTaskSpec taskSpec) { + return rulePlan(taskSpec == null ? "daily_review" : taskSpec.getIntent()); + } + private AgentPlan modelPlanOrFallback(AgentTaskContext context) { try { ModelInvokeParam param = new ModelInvokeParam(); @@ -69,7 +76,8 @@ private AgentPlan modelPlanOrFallback(AgentTaskContext context) { "taskType", context.getCreateParam().getTaskType(), "userInput", context.getCreateParam().getUserInput(), "dateRange", context.getCreateParam().getDateRange(), - "allowedToolCodes", DAILY_REVIEW_TOOL_CODES + "allowedToolCodes", DAILY_REVIEW_TOOL_CODES, + "taskSpec", context.getCreateParam().getTaskSpec() == null ? Map.of() : context.getCreateParam().getTaskSpec() )); ModelInvokeResult result = modelGatewayService.invoke( @@ -101,7 +109,7 @@ private String buildPlannerPrompt(AgentTaskContext context) { 6. report.generate_daily_review 输出格式: - {"taskType":"daily_review","steps":[{"stepNo":1,"stepName":"查询订单核心指标","toolCode":"order.query_summary"}]} + {"taskType":"daily_review","rationale":"说明整体规划依据","steps":[{"stepNo":1,"stepName":"查询订单核心指标","toolCode":"order.query_summary","reason":"说明选择该工具的原因"}]} 用户输入:%s 日期范围:%s 至 %s @@ -117,6 +125,7 @@ private AgentPlan parsePlan(String outputText) { JsonNode root = objectMapper.readTree(extractJson(outputText)); AgentPlan plan = new AgentPlan(); plan.setTaskType(text(root, "taskType")); + plan.setRationale(text(root, "rationale")); List steps = new ArrayList<>(); JsonNode stepNodes = root.get("steps"); if (stepNodes != null && stepNodes.isArray()) { @@ -124,7 +133,8 @@ private AgentPlan parsePlan(String outputText) { steps.add(new AgentPlanStep( stepNode.path("stepNo").isInt() ? stepNode.path("stepNo").asInt() : null, text(stepNode, "stepName"), - text(stepNode, "toolCode") + text(stepNode, "toolCode"), + text(stepNode, "reason") )); } } @@ -172,38 +182,45 @@ private boolean isSafeDailyReviewPlan(AgentPlan plan) { static List ruleSteps(String intent) { if ("comment_risk".equals(intent)) { return List.of( - new AgentPlanStep(1, "分析订单基线", "order.query_summary"), - new AgentPlanStep(2, "聚类差评风险", "comment.query_negative"), - new AgentPlanStep(3, "检查受影响商品", "product.query_candidates"), - new AgentPlanStep(4, "生成差评风险报告", "report.generate_daily_review") + new AgentPlanStep(1, "分析订单基线", "order.query_summary", "建立差评数量与整体交易规模的对照基线"), + new AgentPlanStep(2, "聚类差评风险", "comment.query_negative", "提取低星评价、风险原因和类目分布"), + new AgentPlanStep(3, "检查受影响商品", "product.query_candidates", "关联需要优先处理的商品候选"), + new AgentPlanStep(4, "生成差评风险报告", "report.generate_daily_review", "汇总证据并生成可追溯专项报告") ); } if ("product_optimization".equals(intent)) { return List.of( - new AgentPlanStep(1, "分析订单基线", "order.query_summary"), - new AgentPlanStep(2, "识别低点击商品", "product.query_candidates"), - new AgentPlanStep(3, "检查关联评价信号", "comment.query_negative"), - new AgentPlanStep(4, "生成商品优化报告", "report.generate_daily_review") + new AgentPlanStep(1, "分析订单基线", "order.query_summary", "建立商品表现判断所需的经营基线"), + new AgentPlanStep(2, "识别低点击商品", "product.query_candidates", "筛选低点击或高风险商品候选"), + new AgentPlanStep(3, "检查关联评价信号", "comment.query_negative", "避免只依据点击指标给出片面建议"), + new AgentPlanStep(4, "生成商品优化报告", "report.generate_daily_review", "生成商品级优化清单和证据") ); } if ("ad_anomaly".equals(intent)) { return List.of( - new AgentPlanStep(1, "分析订单基线", "order.query_summary"), - new AgentPlanStep(2, "检查投放异常", "ad.query_performance"), - new AgentPlanStep(3, "对比平台外部指标", "report.query_external_metrics"), - new AgentPlanStep(4, "生成投放异常报告", "report.generate_daily_review") + new AgentPlanStep(1, "分析订单基线", "order.query_summary", "建立转化与收入对照基线"), + new AgentPlanStep(2, "检查投放异常", "ad.query_performance", "识别高消耗低转化计划"), + new AgentPlanStep(3, "对比平台外部指标", "report.query_external_metrics", "排除整体流量波动带来的误判"), + new AgentPlanStep(4, "生成投放异常报告", "report.generate_daily_review", "输出预算调整建议及依据") ); } return List.of( - new AgentPlanStep(1, "查询订单核心指标", "order.query_summary"), - new AgentPlanStep(2, "查询差评风险", "comment.query_negative"), - new AgentPlanStep(3, "查询待优化商品", "product.query_candidates"), - new AgentPlanStep(4, "查询广告投放指标", "ad.query_performance"), - new AgentPlanStep(5, "查询外部报表指标", "report.query_external_metrics"), - new AgentPlanStep(6, "生成经营复盘报告", "report.generate_daily_review") + new AgentPlanStep(1, "查询订单核心指标", "order.query_summary", "获取 GMV、订单和售后基线"), + new AgentPlanStep(2, "查询差评风险", "comment.query_negative", "识别评价异常和主要风险原因"), + new AgentPlanStep(3, "查询待优化商品", "product.query_candidates", "定位商品层面的优化候选"), + new AgentPlanStep(4, "查询广告投放指标", "ad.query_performance", "检查投放消耗和转化效率"), + new AgentPlanStep(5, "查询外部报表指标", "report.query_external_metrics", "补充平台环境与整体趋势"), + new AgentPlanStep(6, "生成经营复盘报告", "report.generate_daily_review", "融合全部证据生成结构化结论") ); } + static List ruleSteps(AgentTaskCreateParam param) { + if (param != null && param.getTaskSpec() != null && hasTextValue(param.getTaskSpec().getIntent())) { + return ruleSteps(param.getTaskSpec().getIntent()); + } + return ruleSteps(param == null ? null : param.getIntent()); + } + static String taskResultSummary(String intent, boolean degraded) { String suffix = degraded ? " with degraded evidence" : ""; if ("comment_risk".equals(intent)) { @@ -221,11 +238,33 @@ static String taskResultSummary(String intent, boolean degraded) { private AgentPlan rulePlan(String intent) { AgentPlan plan = new AgentPlan(); plan.setTaskType("daily_review"); + plan.setRationale(planRationale(intent)); plan.getSteps().addAll(ruleSteps(intent)); return plan; } + private String resolveIntent(AgentTaskContext context) { + AgentTaskSpec taskSpec = context.getCreateParam().getTaskSpec(); + if (taskSpec != null && hasText(taskSpec.getIntent())) { + return taskSpec.getIntent(); + } + return context.getCreateParam().getIntent(); + } + + private String planRationale(String intent) { + return switch (intent) { + case "comment_risk" -> "围绕差评原因与受影响商品选择必要证据,跳过无关投放步骤。"; + case "product_optimization" -> "围绕商品候选与评价信号规划,避免执行无关投放查询。"; + case "ad_anomaly" -> "围绕投放效率与外部环境规划,跳过无关评价和商品步骤。"; + default -> "经营日报需要覆盖订单、评价、商品、投放和外部环境的完整证据。"; + }; + } + private boolean hasText(String value) { return value != null && !value.isBlank(); } + + private static boolean hasTextValue(String value) { + return value != null && !value.isBlank(); + } } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/SequentialAgentExecutorService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/SequentialAgentExecutorService.java index bbd7d04..b86668d 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/SequentialAgentExecutorService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/agent/service/impl/SequentialAgentExecutorService.java @@ -34,16 +34,32 @@ public SequentialAgentExecutorService(ToolGatewayService toolGatewayService, @Override @SuppressWarnings("unchecked") public AgentExecutionResult execute(AgentTaskContext context, AgentPlan plan) { + return execute(context, plan, null); + } + + @Override + @SuppressWarnings("unchecked") + public AgentExecutionResult execute(AgentTaskContext context, AgentPlan plan, AgentExecutionResult baseResult) { AgentExecutionResult executionResult = new AgentExecutionResult(); executionResult.setSuccess(false); - executionResult.setDegraded(false); + executionResult.setDegraded(baseResult != null && Boolean.TRUE.equals(baseResult.getDegraded())); Map results = new LinkedHashMap<>(); Map dataByTool = new HashMap<>(); + if (baseResult != null && baseResult.getStepResults() != null) { + results.putAll(baseResult.getStepResults()); + for (Map.Entry entry : baseResult.getStepResults().entrySet()) { + ToolInvokeResult previous = entry.getValue(); + if (previous != null && Boolean.TRUE.equals(previous.getSuccess()) && previous.getData() != null) { + dataByTool.put(entry.getKey(), previous.getData()); + } + } + executionResult.setReportId(baseResult.getReportId()); + } for (AgentPlanStep step : plan.getSteps()) { Object input = buildInput(context, step, dataByTool); - Long stepId = context.resolveStepId(step.getStepNo()); + Long stepId = stepExecutionRecorder.ensureStep(context, step); stepExecutionRecorder.running(context, stepId, input); ToolInvokeResult result = toolGatewayService.invoke(toToolContext(context, stepId), step.getToolCode(), input); results.put(step.getToolCode(), result); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepository.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepository.java index 87a41df..ac023df 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepository.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepository.java @@ -78,79 +78,82 @@ SELECT COUNT(*) private String unionSql() { return """ SELECT - 'AUTH' AS source, - CONCAT('auth:', id) AS event_id, + CONVERT('AUTH' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS source, + CONVERT(CONCAT('auth:', id) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_id, id AS sortable_id, - event_type, - event_status, + CONVERT(event_type USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_type, + CONVERT(event_status USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_status, user_id, - username, + CONVERT(username USING utf8mb4) COLLATE utf8mb4_unicode_ci AS username, CAST(NULL AS SIGNED) AS task_id, - CAST(NULL AS CHAR) AS trace_id, - CAST(NULL AS CHAR) AS tool_code, - request_id, - 'auth_audit_event' AS resource_type, - CAST(id AS CHAR) AS resource_id, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS trace_id, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS tool_code, + CONVERT(request_id USING utf8mb4) COLLATE utf8mb4_unicode_ci AS request_id, + CONVERT('auth_audit_event' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_type, + CONVERT(CAST(id AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_id, CASE WHEN event_status = 'FAILURE' THEN 'HIGH' WHEN event_type IN ('ACCESS_DENIED', 'AUTHENTICATION') THEN 'MEDIUM' ELSE 'LOW' - END AS risk_level, - CASE - WHEN event_type LIKE 'ORG\\_%' ESCAPE '\\' AND failure_reason IS NOT NULL AND failure_reason <> '' THEN failure_reason + END COLLATE utf8mb4_unicode_ci AS risk_level, + CONVERT(CASE + WHEN event_type LIKE 'ORG!_%' ESCAPE '!' AND failure_reason IS NOT NULL AND failure_reason <> '' THEN failure_reason ELSE CONCAT(event_type, ' ', event_status) - END AS summary, + END USING utf8mb4) COLLATE utf8mb4_unicode_ci AS summary, created_at, - auth_type AS detail_a, - client_ip AS detail_b, - failure_reason AS detail_c, - CAST(NULL AS CHAR) AS detail_d + CONVERT(auth_type USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_a, + CONVERT(client_ip USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_b, + CONVERT(failure_reason USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_c, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS detail_d FROM auth_audit_event WHERE tenant_id = :tenantId AND shop_id = :shopId UNION ALL SELECT - 'TASK' AS source, - CONCAT('task:', id) AS event_id, + CONVERT('TASK' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS source, + CONVERT(CONCAT('task:', id) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_id, id AS sortable_id, - event_type, - CASE WHEN event_type = 'TASK_FAILED' THEN 'FAILURE' ELSE 'SUCCESS' END AS event_status, + CONVERT(event_type USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_type, + CASE WHEN event_type = 'TASK_FAILED' THEN 'FAILURE' ELSE 'SUCCESS' END COLLATE utf8mb4_unicode_ci AS event_status, operator_id AS user_id, - CAST(NULL AS CHAR) AS username, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS username, task_id, - JSON_UNQUOTE(JSON_EXTRACT(event_data_json, '$.traceId')) AS trace_id, - CAST(NULL AS CHAR) AS tool_code, - CAST(NULL AS CHAR) AS request_id, - 'agent_task' AS resource_type, - CAST(task_id AS CHAR) AS resource_id, + CONVERT(CASE + WHEN JSON_VALID(event_data_json) THEN JSON_UNQUOTE(JSON_EXTRACT(event_data_json, '$.traceId')) + ELSE NULL + END USING utf8mb4) COLLATE utf8mb4_unicode_ci AS trace_id, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS tool_code, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS request_id, + CONVERT('agent_task' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_type, + CONVERT(CAST(task_id AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_id, CASE WHEN event_type = 'TASK_FAILED' THEN 'HIGH' WHEN event_type IN ('TASK_RETRY_REQUESTED', 'TASK_REQUEUED') THEN 'MEDIUM' ELSE 'LOW' - END AS risk_level, - event_type AS summary, + END COLLATE utf8mb4_unicode_ci AS risk_level, + CONVERT(event_type USING utf8mb4) COLLATE utf8mb4_unicode_ci AS summary, created_at, - from_status AS detail_a, - to_status AS detail_b, - event_data_json AS detail_c, - CAST(NULL AS CHAR) AS detail_d + CONVERT(from_status USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_a, + CONVERT(to_status USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_b, + CONVERT(event_data_json USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_c, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS detail_d FROM agent_task_event WHERE tenant_id = :tenantId AND shop_id = :shopId UNION ALL SELECT - 'TOOL' AS source, - CONCAT('tool:', tcl.id) AS event_id, + CONVERT('TOOL' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS source, + CONVERT(CONCAT('tool:', tcl.id) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_id, tcl.id AS sortable_id, - 'TOOL_CALL' AS event_type, - tcl.status AS event_status, + CONVERT('TOOL_CALL' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_type, + CONVERT(tcl.status USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_status, tcl.user_id, - CAST(NULL AS CHAR) AS username, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS username, tcl.task_id, - tcl.trace_id, - tcl.tool_code, - CAST(NULL AS CHAR) AS request_id, - 'tool_call_log' AS resource_type, - CAST(tcl.id AS CHAR) AS resource_id, - COALESCE( + CONVERT(tcl.trace_id USING utf8mb4) COLLATE utf8mb4_unicode_ci AS trace_id, + CONVERT(tcl.tool_code USING utf8mb4) COLLATE utf8mb4_unicode_ci AS tool_code, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS request_id, + CONVERT('tool_call_log' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_type, + CONVERT(CAST(tcl.id AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_id, + CONVERT(COALESCE( tcl.risk_level, ( SELECT mt.risk_level @@ -162,104 +165,104 @@ WHEN event_type IN ('TASK_RETRY_REQUESTED', 'TASK_REQUEUED') THEN 'MEDIUM' LIMIT 1 ), 'MEDIUM' - ) AS risk_level, - CONCAT('TOOL_CALL ', tcl.tool_code, ' ', tcl.status) AS summary, + ) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS risk_level, + CONVERT(CONCAT('TOOL_CALL ', tcl.tool_code, ' ', tcl.status) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS summary, tcl.created_at, - CAST(tcl.step_id AS CHAR) AS detail_a, - CAST(tcl.latency_ms AS CHAR) AS detail_b, - tcl.error_code AS detail_c, - tcl.error_message AS detail_d + CONVERT(CAST(tcl.step_id AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_a, + CONVERT(CAST(tcl.latency_ms AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_b, + CONVERT(tcl.error_code USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_c, + CONVERT(tcl.error_message USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_d FROM tool_call_log tcl WHERE tcl.tenant_id = :tenantId AND tcl.shop_id = :shopId UNION ALL SELECT - 'APPROVAL' AS source, - CONCAT('approval:', ar.id, ':created') AS event_id, + CONVERT('APPROVAL' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS source, + CONVERT(CONCAT('approval:', ar.id, ':created') USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_id, ar.id * 10 AS sortable_id, - 'APPROVAL_CREATED' AS event_type, - 'PENDING' AS event_status, + CONVERT('APPROVAL_CREATED' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_type, + CONVERT('PENDING' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_status, ar.requester_id AS user_id, - ar.requester_name AS username, + CONVERT(ar.requester_name USING utf8mb4) COLLATE utf8mb4_unicode_ci AS username, ar.task_id, - ar.trace_id, - ar.tool_code, - CAST(NULL AS CHAR) AS request_id, - 'approval_request' AS resource_type, - CAST(ar.id AS CHAR) AS resource_id, - UPPER(ar.risk_level) AS risk_level, - CONCAT('APPROVAL_CREATED ', ar.status) AS summary, + CONVERT(ar.trace_id USING utf8mb4) COLLATE utf8mb4_unicode_ci AS trace_id, + CONVERT(ar.tool_code USING utf8mb4) COLLATE utf8mb4_unicode_ci AS tool_code, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS request_id, + CONVERT('approval_request' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_type, + CONVERT(CAST(ar.id AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_id, + CONVERT(UPPER(ar.risk_level) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS risk_level, + CONVERT(CONCAT('APPROVAL_CREATED ', ar.status) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS summary, ar.created_at, - ar.approval_no AS detail_a, - ar.source_type AS detail_b, - ar.title AS detail_c, - CAST(NULL AS CHAR) AS detail_d + CONVERT(ar.approval_no USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_a, + CONVERT(ar.source_type USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_b, + CONVERT(ar.title USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_c, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS detail_d FROM approval_request ar WHERE ar.tenant_id = :tenantId AND ar.shop_id = :shopId UNION ALL SELECT - 'APPROVAL' AS source, - CONCAT('approval:', ar.id, ':decision') AS event_id, + CONVERT('APPROVAL' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS source, + CONVERT(CONCAT('approval:', ar.id, ':decision') USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_id, ar.id * 10 + 1 AS sortable_id, CASE WHEN ar.status = 'WITHDRAWN' THEN 'APPROVAL_WITHDRAWN' WHEN ar.status = 'EXPIRED' THEN 'APPROVAL_EXPIRED' ELSE 'APPROVAL_DECIDED' - END AS event_type, + END COLLATE utf8mb4_unicode_ci AS event_type, CASE WHEN ar.status = 'REJECTED' THEN 'FAILURE' WHEN ar.status = 'WITHDRAWN' THEN 'CANCELED' WHEN ar.status = 'EXPIRED' THEN 'CANCELED' ELSE 'SUCCESS' - END AS event_status, + END COLLATE utf8mb4_unicode_ci AS event_status, ar.approver_id AS user_id, - ar.approver_name AS username, + CONVERT(ar.approver_name USING utf8mb4) COLLATE utf8mb4_unicode_ci AS username, ar.task_id, - ar.trace_id, - ar.tool_code, - CAST(NULL AS CHAR) AS request_id, - 'approval_request' AS resource_type, - CAST(ar.id AS CHAR) AS resource_id, - UPPER(ar.risk_level) AS risk_level, - CONCAT(CASE + CONVERT(ar.trace_id USING utf8mb4) COLLATE utf8mb4_unicode_ci AS trace_id, + CONVERT(ar.tool_code USING utf8mb4) COLLATE utf8mb4_unicode_ci AS tool_code, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS request_id, + CONVERT('approval_request' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_type, + CONVERT(CAST(ar.id AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_id, + CONVERT(UPPER(ar.risk_level) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS risk_level, + CONVERT(CONCAT(CASE WHEN ar.status = 'WITHDRAWN' THEN 'APPROVAL_WITHDRAWN' WHEN ar.status = 'EXPIRED' THEN 'APPROVAL_EXPIRED' ELSE 'APPROVAL_DECIDED' - END, ' ', ar.status) AS summary, + END, ' ', ar.status) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS summary, ar.decided_at AS created_at, - ar.approval_no AS detail_a, - ar.status AS detail_b, - ar.decision_comment AS detail_c, - CAST(NULL AS CHAR) AS detail_d + CONVERT(ar.approval_no USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_a, + CONVERT(ar.status USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_b, + CONVERT(ar.decision_comment USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_c, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS detail_d FROM approval_request ar WHERE ar.tenant_id = :tenantId AND ar.shop_id = :shopId AND ar.status <> 'PENDING' AND ar.decided_at IS NOT NULL UNION ALL SELECT - 'CONNECTOR' AS source, - CONCAT('connector:', cae.id) AS event_id, + CONVERT('CONNECTOR' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS source, + CONVERT(CONCAT('connector:', cae.id) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_id, cae.id AS sortable_id, - cae.event_type, - cae.event_status, + CONVERT(cae.event_type USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_type, + CONVERT(cae.event_status USING utf8mb4) COLLATE utf8mb4_unicode_ci AS event_status, cae.user_id, - cae.username, + CONVERT(cae.username USING utf8mb4) COLLATE utf8mb4_unicode_ci AS username, CAST(NULL AS SIGNED) AS task_id, - CAST(NULL AS CHAR) AS trace_id, - cae.connector_code AS tool_code, - cae.request_id, - 'connector_audit_event' AS resource_type, - CAST(cae.id AS CHAR) AS resource_id, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS trace_id, + CONVERT(cae.connector_code USING utf8mb4) COLLATE utf8mb4_unicode_ci AS tool_code, + CONVERT(cae.request_id USING utf8mb4) COLLATE utf8mb4_unicode_ci AS request_id, + CONVERT('connector_audit_event' USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_type, + CONVERT(CAST(cae.id AS CHAR) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS resource_id, CASE WHEN cae.event_status = 'FAILURE' THEN 'MEDIUM' WHEN cae.event_type = 'CONNECTOR_CREDENTIAL_DISABLED' THEN 'MEDIUM' ELSE 'LOW' - END AS risk_level, - CONCAT(cae.event_type, ' ', cae.connector_code, ' ', cae.event_status) AS summary, + END COLLATE utf8mb4_unicode_ci AS risk_level, + CONVERT(CONCAT(cae.event_type, ' ', cae.connector_code, ' ', cae.event_status) USING utf8mb4) COLLATE utf8mb4_unicode_ci AS summary, cae.created_at, - cae.connector_code AS detail_a, - cae.message AS detail_b, - cae.detail_json AS detail_c, - CAST(NULL AS CHAR) AS detail_d + CONVERT(cae.connector_code USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_a, + CONVERT(cae.message USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_b, + CONVERT(cae.detail_json USING utf8mb4) COLLATE utf8mb4_unicode_ci AS detail_c, + CAST(NULL AS CHAR) COLLATE utf8mb4_unicode_ci AS detail_d FROM connector_audit_event cae WHERE cae.tenant_id = :tenantId AND cae.shop_id = :shopId """; diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileAdPerformanceService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileAdPerformanceService.java index 8d3fe10..6631a34 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileAdPerformanceService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileAdPerformanceService.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.sirithree.shopops.admin.business.service.AdPerformanceService; +import com.sirithree.shopops.admin.business.support.ConfiguredFilePathResolver; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -38,7 +39,7 @@ private Optional> fileSummary(Long tenantId, Long shopId, Lo if (adPerformanceFile == null || adPerformanceFile.isBlank()) { return Optional.empty(); } - Path path = Path.of(adPerformanceFile.trim()); + Path path = ConfiguredFilePathResolver.resolve(adPerformanceFile); if (!Files.exists(path)) { throw new IllegalArgumentException("广告投放数据文件不存在: " + path); } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileExternalReportMetricsService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileExternalReportMetricsService.java index d785b93..aeaaadb 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileExternalReportMetricsService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/FileExternalReportMetricsService.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.sirithree.shopops.admin.business.service.ExternalReportMetricsService; +import com.sirithree.shopops.admin.business.support.ConfiguredFilePathResolver; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -39,7 +40,7 @@ private Optional> fileSummary(Long tenantId, Long shopId, Lo if (externalReportsFile == null || externalReportsFile.isBlank()) { return Optional.empty(); } - Path path = Path.of(externalReportsFile.trim()); + Path path = ConfiguredFilePathResolver.resolve(externalReportsFile); if (!Files.exists(path)) { throw new IllegalArgumentException("外部报表数据文件不存在: " + path); } diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcCommentRiskService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcCommentRiskService.java index 4852062..3021b2f 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcCommentRiskService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcCommentRiskService.java @@ -2,6 +2,7 @@ import com.sirithree.shopops.admin.business.domain.CommentRiskRow; import com.sirithree.shopops.admin.business.service.CommentRiskService; +import com.sirithree.shopops.admin.business.support.BusinessFileSummaryReader; import com.sirithree.shopops.admin.persistence.mapper.BusinessCommentMapper; import java.time.LocalDate; import java.time.LocalDateTime; @@ -18,13 +19,21 @@ public class JdbcCommentRiskService implements CommentRiskService { private static final List RISK_KEYWORDS = List.of("退款", "破损", "物流慢", "描述不符", "质量", "客服"); private final BusinessCommentMapper commentMapper; + private final BusinessFileSummaryReader fileSummaryReader; - public JdbcCommentRiskService(BusinessCommentMapper commentMapper) { + public JdbcCommentRiskService(BusinessCommentMapper commentMapper, BusinessFileSummaryReader fileSummaryReader) { this.commentMapper = commentMapper; + this.fileSummaryReader = fileSummaryReader; } @Override public Map queryNegativeComments(Long tenantId, Long shopId, LocalDate startDate, LocalDate endDate, Integer minStar) { + java.util.Optional> fileSummary = + fileSummaryReader.negativeComments(tenantId, shopId, startDate, endDate, minStar); + if (fileSummary.isPresent()) { + return fileSummary.get(); + } + int safeMinStar = minStar == null ? 3 : minStar; LocalDateTime startAt = startDate.atStartOfDay(); LocalDateTime endExclusiveAt = endDate.plusDays(1).atStartOfDay(); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcOrderMetricsService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcOrderMetricsService.java index 3616b6b..8fc384f 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcOrderMetricsService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcOrderMetricsService.java @@ -2,6 +2,7 @@ import com.sirithree.shopops.admin.business.domain.OrderSummaryData; import com.sirithree.shopops.admin.business.service.OrderMetricsService; +import com.sirithree.shopops.admin.business.support.BusinessFileSummaryReader; import com.sirithree.shopops.admin.persistence.mapper.BusinessOrderMapper; import java.math.BigDecimal; import java.math.RoundingMode; @@ -15,13 +16,20 @@ @ConditionalOnProperty(name = "shopops.persistence", havingValue = "jdbc") public class JdbcOrderMetricsService implements OrderMetricsService { private final BusinessOrderMapper orderMapper; + private final BusinessFileSummaryReader fileSummaryReader; - public JdbcOrderMetricsService(BusinessOrderMapper orderMapper) { + public JdbcOrderMetricsService(BusinessOrderMapper orderMapper, BusinessFileSummaryReader fileSummaryReader) { this.orderMapper = orderMapper; + this.fileSummaryReader = fileSummaryReader; } @Override public Map querySummary(Long tenantId, Long shopId, LocalDate startDate, LocalDate endDate) { + java.util.Optional> fileSummary = fileSummaryReader.orderSummary(tenantId, shopId, startDate, endDate); + if (fileSummary.isPresent()) { + return fileSummary.get(); + } + LocalDateTime startAt = startDate.atStartOfDay(); LocalDateTime endExclusiveAt = endDate.plusDays(1).atStartOfDay(); OrderSummaryData current = orderMapper.querySummary(tenantId, shopId, startAt, endExclusiveAt); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcProductOptimizationService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcProductOptimizationService.java index c35d0d7..8c3d697 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcProductOptimizationService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/service/impl/JdbcProductOptimizationService.java @@ -2,6 +2,7 @@ import com.sirithree.shopops.admin.business.domain.ProductCandidateRow; import com.sirithree.shopops.admin.business.service.ProductOptimizationService; +import com.sirithree.shopops.admin.business.support.BusinessFileSummaryReader; import com.sirithree.shopops.admin.persistence.mapper.BusinessProductMapper; import java.math.BigDecimal; import java.math.RoundingMode; @@ -18,13 +19,21 @@ @ConditionalOnProperty(name = "shopops.persistence", havingValue = "jdbc") public class JdbcProductOptimizationService implements ProductOptimizationService { private final BusinessProductMapper productMapper; + private final BusinessFileSummaryReader fileSummaryReader; - public JdbcProductOptimizationService(BusinessProductMapper productMapper) { + public JdbcProductOptimizationService(BusinessProductMapper productMapper, BusinessFileSummaryReader fileSummaryReader) { this.productMapper = productMapper; + this.fileSummaryReader = fileSummaryReader; } @Override public Map queryCandidates(Long tenantId, Long shopId, LocalDate startDate, LocalDate endDate, Integer limit) { + java.util.Optional> fileSummary = + fileSummaryReader.productCandidates(tenantId, shopId, startDate, endDate, limit); + if (fileSummary.isPresent()) { + return fileSummary.get(); + } + LocalDateTime startAt = startDate.atStartOfDay(); LocalDateTime endExclusiveAt = endDate.plusDays(1).atStartOfDay(); int safeLimit = limit == null || limit <= 0 ? 10 : limit; diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/support/BusinessFileSummaryReader.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/support/BusinessFileSummaryReader.java new file mode 100644 index 0000000..a5054d2 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/business/support/BusinessFileSummaryReader.java @@ -0,0 +1,160 @@ +package com.sirithree.shopops.admin.business.support; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDate; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class BusinessFileSummaryReader { + private static final TypeReference> ORDER_SUMMARY_RECORDS = new TypeReference<>() { + }; + private static final TypeReference> NEGATIVE_COMMENT_RECORDS = new TypeReference<>() { + }; + private static final TypeReference> PRODUCT_CANDIDATE_RECORDS = new TypeReference<>() { + }; + + private final ObjectMapper objectMapper; + private final String orderSummaryFile; + private final String negativeCommentsFile; + private final String productCandidatesFile; + + public BusinessFileSummaryReader(ObjectMapper objectMapper, + @Value("${shopops.connector.order-summary.file:}") String orderSummaryFile, + @Value("${shopops.connector.negative-comments.file:}") String negativeCommentsFile, + @Value("${shopops.connector.product-candidates.file:}") String productCandidatesFile) { + this.objectMapper = objectMapper; + this.orderSummaryFile = orderSummaryFile; + this.negativeCommentsFile = negativeCommentsFile; + this.productCandidatesFile = productCandidatesFile; + } + + public Optional> orderSummary(Long tenantId, Long shopId, LocalDate startDate, LocalDate endDate) { + if (orderSummaryFile == null || orderSummaryFile.isBlank()) { + return Optional.empty(); + } + Path path = ConfiguredFilePathResolver.resolve(orderSummaryFile); + if (!Files.exists(path)) { + throw new IllegalArgumentException("Order summary data file does not exist: " + path); + } + try { + return objectMapper.readValue(path.toFile(), ORDER_SUMMARY_RECORDS).stream() + .filter(record -> same(record.tenantId(), tenantId)) + .filter(record -> same(record.shopId(), shopId)) + .filter(record -> startDate.equals(LocalDate.parse(record.startDate()))) + .filter(record -> endDate.equals(LocalDate.parse(record.endDate()))) + .findFirst() + .map(record -> withSource(record.summary(), "file.order-summary")); + } catch (IOException ex) { + throw new IllegalArgumentException("Failed to read order summary data file: " + path, ex); + } + } + + public Optional> negativeComments(Long tenantId, + Long shopId, + LocalDate startDate, + LocalDate endDate, + Integer minStar) { + if (negativeCommentsFile == null || negativeCommentsFile.isBlank()) { + return Optional.empty(); + } + Path path = ConfiguredFilePathResolver.resolve(negativeCommentsFile); + if (!Files.exists(path)) { + throw new IllegalArgumentException("Negative comment data file does not exist: " + path); + } + try { + return objectMapper.readValue(path.toFile(), NEGATIVE_COMMENT_RECORDS).stream() + .filter(record -> same(record.tenantId(), tenantId)) + .filter(record -> same(record.shopId(), shopId)) + .filter(record -> startDate.equals(LocalDate.parse(record.startDate()))) + .filter(record -> endDate.equals(LocalDate.parse(record.endDate()))) + .filter(record -> record.minStar() == null || record.minStar() >= safeMinStar(minStar)) + .findFirst() + .map(record -> withSource(record.summary(), "file.negative-comments")); + } catch (IOException ex) { + throw new IllegalArgumentException("Failed to read negative comment data file: " + path, ex); + } + } + + public Optional> productCandidates(Long tenantId, + Long shopId, + LocalDate startDate, + LocalDate endDate, + Integer limit) { + if (productCandidatesFile == null || productCandidatesFile.isBlank()) { + return Optional.empty(); + } + Path path = ConfiguredFilePathResolver.resolve(productCandidatesFile); + if (!Files.exists(path)) { + throw new IllegalArgumentException("Product candidate data file does not exist: " + path); + } + try { + return objectMapper.readValue(path.toFile(), PRODUCT_CANDIDATE_RECORDS).stream() + .filter(record -> same(record.tenantId(), tenantId)) + .filter(record -> same(record.shopId(), shopId)) + .filter(record -> startDate.equals(LocalDate.parse(record.startDate()))) + .filter(record -> endDate.equals(LocalDate.parse(record.endDate()))) + .findFirst() + .map(record -> withSource(limitSummary(record.summary(), limit), "file.product-candidates")); + } catch (IOException ex) { + throw new IllegalArgumentException("Failed to read product candidate data file: " + path, ex); + } + } + + @SuppressWarnings("unchecked") + private Map limitSummary(Map summary, Integer limit) { + Object value = summary.get("products"); + if (!(value instanceof List products)) { + return summary; + } + int safeLimit = limit == null || limit <= 0 ? products.size() : Math.min(limit, products.size()); + LinkedHashMap result = new LinkedHashMap<>(summary); + result.put("candidateCount", safeLimit); + result.put("products", ((List) products).subList(0, safeLimit)); + return result; + } + + private Map withSource(Map summary, String source) { + LinkedHashMap result = new LinkedHashMap<>(summary); + result.put("connectorCode", source); + return result; + } + + private boolean same(Long left, Long right) { + return left != null && left.equals(right); + } + + private int safeMinStar(Integer minStar) { + return minStar == null || minStar <= 0 ? 3 : minStar; + } + + private record OrderSummaryRecord(Long tenantId, + Long shopId, + String startDate, + String endDate, + Map summary) { + } + + private record NegativeCommentRecord(Long tenantId, + Long shopId, + String startDate, + String endDate, + Integer minStar, + Map summary) { + } + + private record ProductCandidateRecord(Long tenantId, + Long shopId, + String startDate, + String endDate, + Map summary) { + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/evaluation/controller/AgentEvaluationController.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/evaluation/controller/AgentEvaluationController.java new file mode 100644 index 0000000..a09c7d8 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/evaluation/controller/AgentEvaluationController.java @@ -0,0 +1,58 @@ +package com.sirithree.shopops.admin.evaluation.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sirithree.shopops.admin.auth.annotation.RequireRole; +import com.sirithree.shopops.admin.auth.domain.AuthRole; +import com.sirithree.shopops.admin.business.support.ConfiguredFilePathResolver; +import com.sirithree.shopops.common.api.CommonResult; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDateTime; +import java.util.LinkedHashMap; +import java.util.Map; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/admin/evaluation") +public class AgentEvaluationController { + private static final TypeReference> MAP_TYPE = new TypeReference<>() { + }; + + private final ObjectMapper objectMapper; + private final String naturalLanguageBatchSummaryFile; + + public AgentEvaluationController(ObjectMapper objectMapper, + @Value("${shopops.evaluation.natural-language-batch.summary-file:docs/evaluation/agent-natural-language-batch-summary.json}") + String naturalLanguageBatchSummaryFile) { + this.objectMapper = objectMapper; + this.naturalLanguageBatchSummaryFile = naturalLanguageBatchSummaryFile; + } + + @GetMapping("/agent-natural-language-batch") + @RequireRole(AuthRole.ADMIN) + public CommonResult> naturalLanguageBatchSummary() { + Path path = ConfiguredFilePathResolver.resolve(naturalLanguageBatchSummaryFile); + LinkedHashMap result = new LinkedHashMap<>(); + result.put("available", Files.isRegularFile(path) && Files.isReadable(path)); + result.put("summaryPath", path.toString()); + result.put("checkedAt", LocalDateTime.now().toString()); + if (!(Boolean) result.get("available")) { + result.put("message", "Agent natural-language batch summary has not been generated yet."); + return CommonResult.success(result); + } + + try { + Map summary = objectMapper.readValue(path.toFile(), MAP_TYPE); + result.put("message", "Agent natural-language batch summary loaded."); + result.put("summary", summary); + return CommonResult.success(result); + } catch (IOException ex) { + throw new IllegalArgumentException("Failed to read Agent natural-language batch summary: " + path, ex); + } + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/config/FeishuSyncProperties.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/config/FeishuSyncProperties.java new file mode 100644 index 0000000..2a83fb9 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/config/FeishuSyncProperties.java @@ -0,0 +1,36 @@ +package com.sirithree.shopops.admin.tool.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "shopops.feishu.sync") +public class FeishuSyncProperties { + private boolean enabled; + private String webhookUrl; + private int timeoutMs = 3000; + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public String getWebhookUrl() { + return webhookUrl; + } + + public void setWebhookUrl(String webhookUrl) { + this.webhookUrl = webhookUrl; + } + + public int getTimeoutMs() { + return timeoutMs; + } + + public void setTimeoutMs(int timeoutMs) { + this.timeoutMs = timeoutMs; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/AdQueryLowRoiExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/AdQueryLowRoiExecutor.java new file mode 100644 index 0000000..73c1f98 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/AdQueryLowRoiExecutor.java @@ -0,0 +1,25 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class AdQueryLowRoiExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "ad.query_low_roi"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("campaigns", List.of( + Map.of("campaignId", "AD-LOW-001", "spend", 860.0, "roi", 0.74, "issue", "high click cost"), + Map.of("campaignId", "AD-LOW-002", "spend", 520.0, "roi", 0.81, "issue", "low conversion") + )); + data.put("recommendations", recommendations("Reduce budget for AD-LOW-001 by 20%", "Move budget to high ROI product group")); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/AdSuggestBudgetExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/AdSuggestBudgetExecutor.java new file mode 100644 index 0000000..f2f545d --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/AdSuggestBudgetExecutor.java @@ -0,0 +1,26 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class AdSuggestBudgetExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "ad.suggest_budget"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("status", "SUGGESTED"); + data.put("approvalId", context.getApprovalId()); + data.put("budgetChanges", List.of( + Map.of("campaignId", "AD-LOW-001", "changePercent", -20, "reason", "ROI below threshold"), + Map.of("campaignId", "AD-GOOD-003", "changePercent", 15, "reason", "stable conversion") + )); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/CommentAnalyzeSentimentExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/CommentAnalyzeSentimentExecutor.java new file mode 100644 index 0000000..c93e644 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/CommentAnalyzeSentimentExecutor.java @@ -0,0 +1,23 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class CommentAnalyzeSentimentExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "comment.analyze_sentiment"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("negativeRatio", 0.138); + data.put("topics", List.of("delivery delay", "damaged package", "size mismatch")); + data.put("recommendations", recommendations("Prioritize delivery delay comments", "Create product detail clarification")); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/CommentCreateReplyDraftExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/CommentCreateReplyDraftExecutor.java new file mode 100644 index 0000000..c0a4d55 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/CommentCreateReplyDraftExecutor.java @@ -0,0 +1,23 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class CommentCreateReplyDraftExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "comment.create_reply_draft"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("draftId", "CRD-DEMO-001"); + data.put("tone", "empathetic"); + data.put("replyDraft", "We are sorry for the experience. The operations team will verify delivery and provide a solution within 24 hours."); + data.put("requiresHumanReview", true); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutor.java index 392b2c9..0077956 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutor.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutor.java @@ -157,6 +157,9 @@ public ToolInvokeResult execute(ToolInvokeContext context, Object input) { context.getTraceId() ); ruleMarkdown = specializeMarkdown(ruleMarkdown, intent, reportTitle, toolCodes); + ruleMarkdown = intentSpecificMarkdown(ruleMarkdown, intent, reportTitle, dateRange, orderSummary, + negativeComments, productCandidates, adPerformance, externalReportMetrics, riskComments, products, + campaigns, channels, runtimeConfig, toolCodes, context.getTraceId()); ModelReportView modelReport = modelReport(context, payload, orderSummary, negativeComments, productCandidates, adPerformance, externalReportMetrics, runtimeConfig, ruleMarkdown); String markdown = modelReport.markdown(); @@ -453,6 +456,279 @@ private String specializeMarkdown(String markdown, String intent, String reportT return specialized; } + private String intentSpecificMarkdown(String dailyMarkdown, + String intent, + String reportTitle, + DateRangeView dateRange, + Map orderSummary, + Map negativeComments, + Map productCandidates, + Map adPerformance, + Map externalReportMetrics, + List> riskComments, + List> products, + List> campaigns, + List> channels, + ReportRuntimeConfig runtimeConfig, + List toolCodes, + String traceId) { + return switch (intent) { + case "comment_risk" -> commentRiskMarkdown(reportTitle, dateRange, orderSummary, negativeComments, + productCandidates, riskComments, products, runtimeConfig, toolCodes, traceId); + case "product_optimization" -> productOptimizationMarkdown(reportTitle, dateRange, orderSummary, + negativeComments, productCandidates, riskComments, products, runtimeConfig, toolCodes, traceId); + case "ad_anomaly" -> adAnomalyMarkdown(reportTitle, dateRange, orderSummary, adPerformance, + externalReportMetrics, campaigns, channels, toolCodes, traceId); + default -> dailyMarkdown; + }; + } + + private String commentRiskMarkdown(String reportTitle, + DateRangeView dateRange, + Map orderSummary, + Map negativeComments, + Map productCandidates, + List> riskComments, + List> products, + ReportRuntimeConfig runtimeConfig, + List toolCodes, + String traceId) { + return """ + # %s + + 分析周期:%s 至 %s + + ## 1. 差评风险结论 + + - 风险评价数:%s + - 退款率:%s,预警阈值:%s + - 关联待优化商品:%s + - 优先关注:%s + + ## 2. 典型差评样本 + + %s + + ## 3. 受影响商品 + + %s + + ## 4. 处理建议 + + %s + + ## 5. 数据证据 + + - 工具调用链:%s + - Trace ID:%s + """.formatted( + reportTitle, + dateRange.start(), + dateRange.end(), + number(negativeComments.get("negativeCount")), + percent(orderSummary.get("refundRate")), + percent(runtimeConfig.refundRateWarnThreshold()), + number(productCandidates.get("candidateCount")), + focusLine(riskComments, products), + renderRiskComments(riskComments), + renderProductCandidates(products), + commentRiskActions(orderSummary, negativeComments, riskComments, products, runtimeConfig), + String.join(", ", toolCodes), + traceId + ); + } + + private String productOptimizationMarkdown(String reportTitle, + DateRangeView dateRange, + Map orderSummary, + Map negativeComments, + Map productCandidates, + List> riskComments, + List> products, + ReportRuntimeConfig runtimeConfig, + List toolCodes, + String traceId) { + return """ + # %s + + 分析周期:%s 至 %s + + ## 1. 商品优化结论 + + - 待优化商品数:%s + - 区间 GMV:%s + - 风险评价数:%s,预警阈值:%s + - 优先商品:%s + + ## 2. 商品候选清单 + + %s + + ## 3. 关联评价信号 + + %s + + ## 4. 优化动作 + + %s + + ## 5. 数据证据 + + - 工具调用链:%s + - Trace ID:%s + """.formatted( + reportTitle, + dateRange.start(), + dateRange.end(), + number(productCandidates.get("candidateCount")), + number(orderSummary.get("gmv")), + number(negativeComments.get("negativeCount")), + number(runtimeConfig.negativeCommentWarnThreshold()), + products.isEmpty() ? "暂无待优化商品" : value(products.get(0), "productName"), + renderProductCandidates(products), + renderRiskComments(riskComments), + productOptimizationActions(products, negativeComments), + String.join(", ", toolCodes), + traceId + ); + } + + private String adAnomalyMarkdown(String reportTitle, + DateRangeView dateRange, + Map orderSummary, + Map adPerformance, + Map externalReportMetrics, + List> campaigns, + List> channels, + List toolCodes, + String traceId) { + return """ + # %s + + 分析周期:%s 至 %s + + ## 1. 投放异常结论 + + - 广告消耗:%s + - ROI:%s + - CTR:%s,转化率:%s + - 订单 GMV:%s + - 平台访客:%s,报表转化率:%s + + ## 2. 高消耗计划 + + %s + + ## 3. 平台环境对比 + + %s + + ## 4. 预算调整建议 + + %s + + ## 5. 数据证据 + + - 工具调用链:%s + - Trace ID:%s + """.formatted( + reportTitle, + dateRange.start(), + dateRange.end(), + number(adPerformance.get("spend")), + number(adPerformance.get("roi")), + percent(adPerformance.get("ctr")), + percent(adPerformance.get("conversionRate")), + number(orderSummary.get("gmv")), + number(externalReportMetrics.get("visitorCount")), + percent(externalReportMetrics.get("conversionRate")), + renderCampaignRows(campaigns), + renderChannelRows(channels), + adAnomalyActions(adPerformance, externalReportMetrics), + String.join(", ", toolCodes), + traceId + ); + } + + private String commentRiskActions(Map orderSummary, + Map negativeComments, + List> riskComments, + List> products, + ReportRuntimeConfig runtimeConfig) { + StringBuilder builder = new StringBuilder(); + if (decimal(negativeComments.get("negativeCount")).compareTo(runtimeConfig.negativeCommentWarnThreshold()) >= 0) { + builder.append("- 差评数量已达到配置阈值,先按商品聚类分配客服跟进。\n"); + } + if (decimal(orderSummary.get("refundRate")).compareTo(runtimeConfig.refundRateWarnThreshold()) >= 0) { + builder.append("- 退款率同步触发预警,优先排查差评商品的售后与描述一致性。\n"); + } + if (!riskComments.isEmpty()) { + builder.append("- 对典型低星评价提取原因标签,沉淀客服回复模板和商品页修正文案。\n"); + } + if (!products.isEmpty()) { + builder.append("- 将受影响商品加入标题、主图、详情页和库存策略复核清单。"); + } + return builder.isEmpty() ? "- 暂无明显差评异常,保持评价监控。" : builder.toString().stripTrailing(); + } + + private String productOptimizationActions(List> products, + Map negativeComments) { + StringBuilder builder = new StringBuilder(); + if (!products.isEmpty()) { + builder.append("- 优先处理候选商品的标题关键词、主图卖点和详情页首屏承接。\n"); + builder.append("- 对高库存低销量商品设置短期促销或关联搭配,提高曝光后的转化效率。\n"); + } + if (decimal(negativeComments.get("negativeCount")).compareTo(BigDecimal.ZERO) > 0) { + builder.append("- 将评价中的描述不符、质量、物流问题同步到商品优化需求。"); + } + return builder.isEmpty() ? "- 暂无明显商品优化候选,保持现有商品策略。" : builder.toString().stripTrailing(); + } + + private String adAnomalyActions(Map adPerformance, + Map externalReportMetrics) { + StringBuilder builder = new StringBuilder(); + if (decimal(adPerformance.get("roi")).compareTo(new BigDecimal("3.0")) < 0) { + builder.append("- ROI 低于 3,建议暂停高消耗低转化计划,并收缩预算。\n"); + } else { + builder.append("- 当前整体 ROI 尚可,建议只压缩低 ROI 子计划预算。\n"); + } + if (decimal(adPerformance.get("ctr")).compareTo(new BigDecimal("0.03")) < 0) { + builder.append("- CTR 偏低,优先更换创意图和标题关键词。\n"); + } + if (decimal(externalReportMetrics.get("conversionRate")).compareTo(new BigDecimal("0.03")) < 0) { + builder.append("- 平台转化偏低,预算调整前先排除活动承接和页面转化问题。"); + } + return builder.toString().stripTrailing(); + } + + private String renderCampaignRows(List> campaigns) { + if (campaigns.isEmpty()) { + return "暂无广告计划明细。"; + } + return campaigns.stream() + .limit(5) + .map(item -> "- %s:消耗 %s,ROI %s".formatted( + value(item, "campaignName"), + number(item.get("spend")), + number(item.get("roi")) + )) + .collect(Collectors.joining("\n")); + } + + private String renderChannelRows(List> channels) { + if (channels.isEmpty()) { + return "暂无平台渠道明细。"; + } + return channels.stream() + .limit(5) + .map(item -> "- %s:访客 %s,转化率 %s".formatted( + value(item, "channelName"), + number(item.get("visitorCount")), + percent(item.get("conversionRate")) + )) + .collect(Collectors.joining("\n")); + } + @SuppressWarnings("unchecked") private List toolCodes(Map payload) { Object value = payload.get("executedToolCodes"); diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/FeishuSyncReportExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/FeishuSyncReportExecutor.java new file mode 100644 index 0000000..eab24ad --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/FeishuSyncReportExecutor.java @@ -0,0 +1,112 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.config.FeishuSyncProperties; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FeishuSyncReportExecutor extends PortfolioOperationToolExecutor { + private final FeishuSyncProperties properties; + private final HttpClient httpClient; + + @Autowired + public FeishuSyncReportExecutor(FeishuSyncProperties properties) { + this(properties, HttpClient.newHttpClient()); + } + + FeishuSyncReportExecutor(FeishuSyncProperties properties, HttpClient httpClient) { + this.properties = properties; + this.httpClient = httpClient; + } + + @Override + public String toolCode() { + return "feishu.sync_report"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + if (!enabled()) { + data.put("documentId", "FEISHU-DEMO-DOC-001"); + data.put("documentUrl", "https://feishu.example.com/docx/shopops-demo"); + data.put("status", "SYNCED"); + data.put("mode", "demo-connector"); + return data; + } + + long started = System.currentTimeMillis(); + String payload = webhookPayload(context, input); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(properties.getWebhookUrl())) + .timeout(Duration.ofMillis(Math.max(1, properties.getTimeoutMs()))) + .header("Content-Type", "application/json; charset=utf-8") + .POST(HttpRequest.BodyPublishers.ofString(payload)) + .build(); + HttpResponse response = send(request); + if (response.statusCode() < 200 || response.statusCode() >= 300) { + throw new IllegalStateException("Feishu webhook sync failed with HTTP " + response.statusCode()); + } + + data.put("documentId", "FEISHU-WEBHOOK-" + input.getOrDefault("reportId", "UNKNOWN")); + data.put("documentUrl", input.getOrDefault("documentUrl", "")); + data.put("status", "SYNCED"); + data.put("mode", "feishu-webhook"); + data.put("webhookStatusCode", response.statusCode()); + data.put("webhookUrlMasked", mask(properties.getWebhookUrl())); + data.put("durationMs", System.currentTimeMillis() - started); + return data; + } + + private boolean enabled() { + return properties != null + && properties.isEnabled() + && properties.getWebhookUrl() != null + && !properties.getWebhookUrl().isBlank(); + } + + private HttpResponse send(HttpRequest request) { + try { + return httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + } catch (IOException e) { + throw new IllegalStateException("Feishu webhook sync failed", e); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IllegalStateException("Feishu webhook sync interrupted", e); + } + } + + private String webhookPayload(ToolInvokeContext context, Map input) { + String text = "ShopOps report synced" + + " tenantId=" + context.getTenantId() + + " shopId=" + input.getOrDefault("shopId", context.getShopId()) + + " reportId=" + input.getOrDefault("reportId", "UNKNOWN") + + " taskId=" + context.getTaskId() + + " traceId=" + nullToEmpty(context.getTraceId()); + return "{\"msg_type\":\"text\",\"content\":{\"text\":\"" + escapeJson(text) + "\"}}"; + } + + private String escapeJson(String value) { + return value.replace("\\", "\\\\").replace("\"", "\\\""); + } + + private String nullToEmpty(String value) { + return value == null ? "" : value; + } + + private String mask(String value) { + int index = value.lastIndexOf('/'); + if (index < 0 || index == value.length() - 1) { + return "***"; + } + return value.substring(0, index + 1) + "***"; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/OrderQueryDetailExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/OrderQueryDetailExecutor.java new file mode 100644 index 0000000..610320a --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/OrderQueryDetailExecutor.java @@ -0,0 +1,25 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class OrderQueryDetailExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "order.query_detail"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("orders", List.of( + Map.of("orderId", "OD-DEMO-1001", "amount", 329.9, "status", "PAID", "risk", "LOW"), + Map.of("orderId", "OD-DEMO-1002", "amount", 1288.0, "status", "CANCELED", "risk", "HIGH") + )); + data.put("summary", "2 representative orders returned for operations investigation"); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/OrderQueryRefundRiskExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/OrderQueryRefundRiskExecutor.java new file mode 100644 index 0000000..77e387d --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/OrderQueryRefundRiskExecutor.java @@ -0,0 +1,26 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class OrderQueryRefundRiskExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "order.query_refund_risk"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("refundRiskRate", 0.0763); + data.put("riskOrders", List.of( + Map.of("orderId", "OD-DEMO-1002", "reason", "canceled high value order", "amount", 1288.0), + Map.of("orderId", "OD-DEMO-1041", "reason", "late delivery complaint", "amount", 488.0) + )); + data.put("recommendations", recommendations("Review logistics delay orders", "Prepare refund retention script")); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/PortfolioOperationToolExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/PortfolioOperationToolExecutor.java new file mode 100644 index 0000000..b448314 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/PortfolioOperationToolExecutor.java @@ -0,0 +1,35 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.business.support.ToolInputParser; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeResult; +import com.sirithree.shopops.admin.tool.service.ToolExecutor; +import java.time.LocalDateTime; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public abstract class PortfolioOperationToolExecutor implements ToolExecutor { + @Override + public ToolInvokeResult execute(ToolInvokeContext context, Object input) { + Map payload = ToolInputParser.asMap(input); + return ToolInvokeResult.success(output(context, payload), null); + } + + protected abstract Map output(ToolInvokeContext context, Map input); + + protected Map base(ToolInvokeContext context, Map input) { + Map data = new LinkedHashMap<>(); + data.put("tenantId", context.getTenantId()); + data.put("shopId", ToolInputParser.longValue(input, "shopId", context.getShopId())); + data.put("generatedAt", LocalDateTime.now().toString()); + return data; + } + + protected List> recommendations(String primaryAction, String secondaryAction) { + return List.of( + Map.of("priority", "P0", "action", primaryAction), + Map.of("priority", "P1", "action", secondaryAction) + ); + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductOptimizeTitleExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductOptimizeTitleExecutor.java new file mode 100644 index 0000000..d08e701 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductOptimizeTitleExecutor.java @@ -0,0 +1,25 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ProductOptimizeTitleExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "product.optimize_title"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("titleSuggestions", List.of( + Map.of("productId", "PRD-LOW-001", "title", "Breathable Storage Organizer for Bedroom and Travel", "score", 91), + Map.of("productId", "PRD-LOW-002", "title", "Lightweight Kitchen Organizer with Durable Handle", "score", 87) + )); + data.put("verifierChecks", List.of("length", "bannedWords", "duplicateKeywords")); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductQueryLowClickExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductQueryLowClickExecutor.java new file mode 100644 index 0000000..37e4c52 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductQueryLowClickExecutor.java @@ -0,0 +1,25 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ProductQueryLowClickExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "product.query_low_click"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + data.put("products", List.of( + Map.of("productId", "PRD-LOW-001", "ctr", 0.006, "exposure", 8200, "reason", "weak title keywords"), + Map.of("productId", "PRD-LOW-002", "ctr", 0.008, "exposure", 5100, "reason", "main image mismatch") + )); + data.put("recommendations", recommendations("Rewrite title keyword order", "Replace first image with scenario image")); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductUpdateTitleExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductUpdateTitleExecutor.java new file mode 100644 index 0000000..92ffb1d --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ProductUpdateTitleExecutor.java @@ -0,0 +1,25 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ProductUpdateTitleExecutor extends PortfolioOperationToolExecutor { + @Override + public String toolCode() { + return "product.update_title"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + Map data = base(context, input); + String newTitle = String.valueOf(input.getOrDefault("newTitle", "Optimized demo title")); + data.put("productId", String.valueOf(input.getOrDefault("productId", "PRD-LOW-001"))); + data.put("newTitle", newTitle); + data.put("status", "UPDATED"); + data.put("approvalId", context.getApprovalId()); + data.put("titleLength", newTitle.length()); + return data; + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ReportExportExcelExecutor.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ReportExportExcelExecutor.java new file mode 100644 index 0000000..1c47c80 --- /dev/null +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/executor/ReportExportExcelExecutor.java @@ -0,0 +1,216 @@ +package com.sirithree.shopops.admin.tool.executor; + +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import org.springframework.stereotype.Component; + +@Component +public class ReportExportExcelExecutor extends PortfolioOperationToolExecutor { + private static final DateTimeFormatter FILE_TIME = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); + private static final List SHEETS = List.of("Daily Review", "Risk Comments", "Product Candidates", "Ad Campaigns"); + + @Override + public String toolCode() { + return "report.export_excel"; + } + + @Override + protected Map output(ToolInvokeContext context, Map input) { + long startedAt = System.nanoTime(); + Map data = base(context, input); + long reportId = number(input.get("reportId"), 0L); + String exportId = "XLSX-" + LocalDateTime.now().format(FILE_TIME); + String fileName = "shopops-operation-report-%s.xlsx".formatted(exportId); + Path outputPath = Path.of("target", "shopops-exports", fileName).toAbsolutePath().normalize(); + + writeWorkbook(outputPath, context, input, reportId, exportId); + + data.put("exportId", exportId); + data.put("fileName", fileName); + data.put("filePath", outputPath.toString()); + data.put("fileSizeBytes", size(outputPath)); + data.put("sheets", SHEETS); + data.put("sheetCount", SHEETS.size()); + data.put("status", "EXPORTED"); + data.put("mode", "local-xlsx"); + data.put("durationMs", Duration.ofNanos(System.nanoTime() - startedAt).toMillis()); + return data; + } + + private void writeWorkbook(Path outputPath, ToolInvokeContext context, Map input, + long reportId, String exportId) { + try { + Files.createDirectories(outputPath.getParent()); + try (ZipOutputStream zip = new ZipOutputStream(Files.newOutputStream(outputPath))) { + entry(zip, "[Content_Types].xml", contentTypes()); + entry(zip, "_rels/.rels", rels()); + entry(zip, "xl/workbook.xml", workbook()); + entry(zip, "xl/_rels/workbook.xml.rels", workbookRels()); + entry(zip, "xl/styles.xml", styles()); + entry(zip, "xl/worksheets/sheet1.xml", sheet(List.of( + List.of("Metric", "Value"), + List.of("Report ID", String.valueOf(reportId)), + List.of("Tenant ID", String.valueOf(context.getTenantId())), + List.of("Shop ID", String.valueOf(context.getShopId())), + List.of("Export ID", exportId), + List.of("Generated At", LocalDateTime.now().toString()) + ))); + entry(zip, "xl/worksheets/sheet2.xml", sheet(List.of( + List.of("Risk Type", "Count", "Action"), + List.of("Low-score comments", value(input, "negativeCommentCount", "51"), "Review and reply"), + List.of("Refund proxy", value(input, "refundProxyRate", "7.63%"), "Check after-sales risk") + ))); + entry(zip, "xl/worksheets/sheet3.xml", sheet(List.of( + List.of("Product", "Risk Score", "Suggestion"), + List.of(value(input, "topProduct", "Furniture Bedroom / 4f18ca98"), "80.0", "Optimize title and description"), + List.of("Candidate count", value(input, "productCandidateCount", "10"), "Prioritize P0 items") + ))); + entry(zip, "xl/worksheets/sheet4.xml", sheet(List.of( + List.of("Campaign", "Spend", "ROI", "Suggestion"), + List.of(value(input, "campaignId", "CRITEO-RISK-SAMPLE"), value(input, "spend", "8.50"), value(input, "roi", "low-conversion"), "Review budget"), + List.of("Source", "Criteo Attribution", "public baseline", "Anonymized campaign IDs") + ))); + } + } catch (IOException ex) { + throw new UncheckedIOException("Failed to export xlsx report: " + outputPath, ex); + } + } + + private void entry(ZipOutputStream zip, String name, String content) throws IOException { + zip.putNextEntry(new ZipEntry(name)); + zip.write(content.getBytes(StandardCharsets.UTF_8)); + zip.closeEntry(); + } + + private String contentTypes() { + return """ + + + + + + + + + + + + """; + } + + private String rels() { + return """ + + + + + """; + } + + private String workbook() { + StringBuilder builder = new StringBuilder(""" + + + + """); + for (int i = 0; i < SHEETS.size(); i++) { + builder.append(" \n"); + } + builder.append(" \n\n"); + return builder.toString(); + } + + private String workbookRels() { + return """ + + + + + + + + + """; + } + + private String styles() { + return """ + + + + + + + + + """; + } + + private String sheet(List> rows) { + StringBuilder builder = new StringBuilder(""" + + + + """); + for (int rowIndex = 0; rowIndex < rows.size(); rowIndex++) { + builder.append(" \n"); + List row = rows.get(rowIndex); + for (int colIndex = 0; colIndex < row.size(); colIndex++) { + builder.append(" ") + .append(xml(row.get(colIndex))) + .append("\n"); + } + builder.append(" \n"); + } + builder.append(" \n\n"); + return builder.toString(); + } + + private String cellRef(int rowIndex, int colIndex) { + return String.valueOf((char) ('A' + colIndex)) + (rowIndex + 1); + } + + private String xml(String value) { + return value == null ? "" : value + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """); + } + + private String value(Map input, String key, String defaultValue) { + Object value = input.get(key); + return value == null || String.valueOf(value).isBlank() ? defaultValue : String.valueOf(value); + } + + private long number(Object value, long defaultValue) { + if (value instanceof Number number) { + return number.longValue(); + } + if (value == null || String.valueOf(value).isBlank()) { + return defaultValue; + } + return Long.parseLong(String.valueOf(value)); + } + + private long size(Path path) { + try { + return Files.size(path); + } catch (IOException ex) { + throw new UncheckedIOException("Failed to read xlsx file size: " + path, ex); + } + } +} diff --git a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/service/impl/InMemoryMcpToolService.java b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/service/impl/InMemoryMcpToolService.java index 701e4e7..2a5c55e 100644 --- a/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/service/impl/InMemoryMcpToolService.java +++ b/shopops-admin/src/main/java/com/sirithree/shopops/admin/tool/service/impl/InMemoryMcpToolService.java @@ -15,13 +15,28 @@ public class InMemoryMcpToolService implements McpToolService { private final Map tools = new LinkedHashMap<>(); public InMemoryMcpToolService() { - register(new McpToolDto("order.query_summary", "订单核心指标查询", "order", "order:read", "low")); - register(new McpToolDto("comment.query_negative", "差评风险查询", "comment", "comment:read", "low")); - register(new McpToolDto("product.query_candidates", "待优化商品查询", "product", "product:read", "low")); - register(new McpToolDto("ad.query_performance", "广告投放指标查询", "ad", "ad:read", "low")); - register(new McpToolDto("report.query_external_metrics", "外部报表指标查询", "report", "report:read", "low")); - register(new McpToolDto("report.generate_daily_review", "每日经营复盘报告生成", "report", "report:generate", "low")); - register(approvalTool("order.refund_execute", "高风险退款执行", "order", "order:refund", "high")); + register(new McpToolDto("order.query_summary", "Order summary query", "order", "order:read", "low")); + register(new McpToolDto("order.query_detail", "Order detail query", "order", "order:read", "low")); + register(new McpToolDto("order.query_refund_risk", "Refund risk query", "order", "order:read", "medium")); + register(approvalTool("order.refund_execute", "Refund execution", "order", "order:refund", "high")); + + register(new McpToolDto("comment.query_negative", "Negative comment query", "comment", "comment:read", "low")); + register(new McpToolDto("comment.analyze_sentiment", "Comment sentiment analysis", "comment", "comment:read", "low")); + register(new McpToolDto("comment.create_reply_draft", "Comment reply draft", "comment", "comment:write", "medium")); + + register(new McpToolDto("product.query_candidates", "Product optimization candidates", "product", "product:read", "low")); + register(new McpToolDto("product.query_low_click", "Low click product query", "product", "product:read", "low")); + register(new McpToolDto("product.optimize_title", "Product title optimization", "product", "product:write", "medium")); + register(approvalTool("product.update_title", "Product title update", "product", "product:write", "high")); + + register(new McpToolDto("ad.query_performance", "Ad performance query", "ad", "ad:read", "low")); + register(new McpToolDto("ad.query_low_roi", "Low ROI campaign query", "ad", "ad:read", "low")); + register(approvalTool("ad.suggest_budget", "Ad budget adjustment suggestion", "ad", "ad:write", "high")); + + register(new McpToolDto("report.query_external_metrics", "External report metrics query", "report", "report:read", "low")); + register(new McpToolDto("report.generate_daily_review", "Daily operation report generation", "report", "report:generate", "low")); + register(new McpToolDto("report.export_excel", "Operation report Excel export", "report", "report:export", "medium")); + register(new McpToolDto("feishu.sync_report", "Feishu report sync", "collaboration", "feishu:write", "medium")); } @Override diff --git a/shopops-admin/src/main/resources/application.yml b/shopops-admin/src/main/resources/application.yml index 50c16e7..33392b3 100644 --- a/shopops-admin/src/main/resources/application.yml +++ b/shopops-admin/src/main/resources/application.yml @@ -36,7 +36,10 @@ mybatis: map-underscore-to-camel-case: true shopops: - persistence: memory + persistence: ${SHOPOPS_PERSISTENCE:jdbc} + flyway: + enabled: ${SHOPOPS_FLYWAY_ENABLED:true} + baseline-version: ${SHOPOPS_FLYWAY_BASELINE_VERSION:3} agent: dispatch-mode: sync rabbitmq: @@ -61,9 +64,14 @@ shopops: product-candidates: file: ${SHOPOPS_CONNECTOR_PRODUCT_CANDIDATES_FILE:docs/demo-data/olist/product-candidates-olist.json} ad-performance: - file: ${SHOPOPS_CONNECTOR_AD_PERFORMANCE_FILE:} + file: ${SHOPOPS_CONNECTOR_AD_PERFORMANCE_FILE:docs/demo-data/ad-performance-real.json} external-reports: - file: ${SHOPOPS_CONNECTOR_EXTERNAL_REPORTS_FILE:} + file: ${SHOPOPS_CONNECTOR_EXTERNAL_REPORTS_FILE:docs/demo-data/external-reports-real.json} + feishu: + sync: + enabled: ${SHOPOPS_FEISHU_SYNC_ENABLED:false} + webhook-url: ${SHOPOPS_FEISHU_SYNC_WEBHOOK_URL:} + timeout-ms: ${SHOPOPS_FEISHU_SYNC_TIMEOUT_MS:3000} model-gateway: resilience: fallback-enabled: ${SHOPOPS_MODEL_GATEWAY_FALLBACK_ENABLED:true} diff --git a/shopops-admin/src/main/resources/db/migration/V19__portfolio_mcp_tools.sql b/shopops-admin/src/main/resources/db/migration/V19__portfolio_mcp_tools.sql new file mode 100644 index 0000000..103ee2b --- /dev/null +++ b/shopops-admin/src/main/resources/db/migration/V19__portfolio_mcp_tools.sql @@ -0,0 +1,62 @@ +INSERT INTO `mcp_tool` ( + `tenant_id`, `tool_code`, `tool_name`, `category`, `description`, + `input_schema`, `output_schema`, `permission_code`, `risk_level`, + `need_approval`, `idempotent`, `timeout_ms`, `retry_count`, + `connector_code`, `enabled`, `version`, `owner`, `created_at`, `updated_at` +) VALUES +(NULL, 'order.query_detail', 'Order Detail Query', 'order', 'Query representative order details for operations investigation.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["orders"]}' AS JSON), + 'order:read', 'low', 0, 1, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'order.query_refund_risk', 'Refund Risk Query', 'order', 'Identify refund and after-sales risk orders.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["refundRiskRate","riskOrders"]}' AS JSON), + 'order:read', 'medium', 0, 1, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'comment.analyze_sentiment', 'Comment Sentiment Analysis', 'comment', 'Analyze negative sentiment topics and comment risk drivers.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["negativeRatio","topics"]}' AS JSON), + 'comment:read', 'low', 0, 1, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'comment.create_reply_draft', 'Comment Reply Draft', 'comment', 'Generate customer service reply drafts for risky comments.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["draftId","replyDraft"]}' AS JSON), + 'comment:write', 'medium', 0, 1, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'product.query_low_click', 'Low Click Product Query', 'product', 'Find products with high exposure and low CTR.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["products"]}' AS JSON), + 'product:read', 'low', 0, 1, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'product.optimize_title', 'Product Title Optimization', 'product', 'Generate optimized product title suggestions.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["titleSuggestions"]}' AS JSON), + 'product:write', 'medium', 0, 1, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'product.update_title', 'Product Title Update', 'product', 'High-risk product title update requiring manual approval.', + CAST('{"type":"object","required":["shopId","productId","newTitle"]}' AS JSON), + CAST('{"type":"object","required":["productId","newTitle","status"]}' AS JSON), + 'product:write', 'high', 1, 0, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'ad.query_low_roi', 'Low ROI Campaign Query', 'ad', 'Find high-spend low-ROI ad campaigns.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["campaigns"]}' AS JSON), + 'ad:read', 'low', 0, 1, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'ad.suggest_budget', 'Ad Budget Adjustment Suggestion', 'ad', 'High-risk ad budget adjustment suggestion requiring approval.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["budgetChanges"]}' AS JSON), + 'ad:write', 'high', 1, 0, 10000, 0, 'mock.mall', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'report.export_excel', 'Operation Report Excel Export', 'report', 'Export operation report evidence to an Excel workbook.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["exportId","fileName","status"]}' AS JSON), + 'report:export', 'medium', 0, 1, 10000, 0, 'local.excel', 1, '1.0.0', 'platform', NOW(), NOW()), +(NULL, 'feishu.sync_report', 'Feishu Report Sync', 'collaboration', 'Sync operation report summary to a Feishu document.', + CAST('{"type":"object","required":["shopId"]}' AS JSON), + CAST('{"type":"object","required":["documentId","documentUrl","status"]}' AS JSON), + 'feishu:write', 'medium', 0, 1, 10000, 0, 'feishu.document', 1, '1.0.0', 'platform', NOW(), NOW()) +ON DUPLICATE KEY UPDATE + `tool_name` = VALUES(`tool_name`), + `description` = VALUES(`description`), + `input_schema` = VALUES(`input_schema`), + `output_schema` = VALUES(`output_schema`), + `permission_code` = VALUES(`permission_code`), + `risk_level` = VALUES(`risk_level`), + `need_approval` = VALUES(`need_approval`), + `idempotent` = VALUES(`idempotent`), + `connector_code` = VALUES(`connector_code`), + `enabled` = VALUES(`enabled`), + `updated_at` = NOW(); diff --git a/shopops-admin/src/main/resources/static/admin/approvals.html b/shopops-admin/src/main/resources/static/admin/approvals.html index 52dd541..ddff3bd 100644 --- a/shopops-admin/src/main/resources/static/admin/approvals.html +++ b/shopops-admin/src/main/resources/static/admin/approvals.html @@ -5,15 +5,15 @@ ShopOps 审批中心 - - - - - - - - - + + + + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/assets/ApiOutlined-CqRwPpT6.js b/shopops-admin/src/main/resources/static/admin/assets/ApiOutlined-CqRwPpT6.js new file mode 100644 index 0000000..1d048dd --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/ApiOutlined-CqRwPpT6.js @@ -0,0 +1 @@ +import{r as a,I as l,_ as t}from"./styles-CdbHnvft.js";var r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M917.7 148.8l-42.4-42.4c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7 2.3l-76.1 76.1a199.27 199.27 0 00-112.1-34.3c-51.2 0-102.4 19.5-141.5 58.6L432.3 308.7a8.03 8.03 0 000 11.3L704 591.7c1.6 1.6 3.6 2.3 5.7 2.3 2 0 4.1-.8 5.7-2.3l101.9-101.9c68.9-69 77-175.7 24.3-253.5l76.1-76.1c3.1-3.2 3.1-8.3 0-11.4zM769.1 441.7l-59.4 59.4-186.8-186.8 59.4-59.4c24.9-24.9 58.1-38.7 93.4-38.7 35.3 0 68.4 13.7 93.4 38.7 24.9 24.9 38.7 58.1 38.7 93.4 0 35.3-13.8 68.4-38.7 93.4zm-190.2 105a8.03 8.03 0 00-11.3 0L501 613.3 410.7 523l66.7-66.7c3.1-3.1 3.1-8.2 0-11.3L441 408.6a8.03 8.03 0 00-11.3 0L363 475.3l-43-43a7.85 7.85 0 00-5.7-2.3c-2 0-4.1.8-5.7 2.3L206.8 534.2c-68.9 69-77 175.7-24.3 253.5l-76.1 76.1a8.03 8.03 0 000 11.3l42.4 42.4c1.6 1.6 3.6 2.3 5.7 2.3s4.1-.8 5.7-2.3l76.1-76.1c33.7 22.9 72.9 34.3 112.1 34.3 51.2 0 102.4-19.5 141.5-58.6l101.9-101.9c3.1-3.1 3.1-8.2 0-11.3l-43-43 66.7-66.7c3.1-3.1 3.1-8.2 0-11.3l-36.6-36.2zM441.7 769.1a131.32 131.32 0 01-93.4 38.7c-35.3 0-68.4-13.7-93.4-38.7a131.32 131.32 0 01-38.7-93.4c0-35.3 13.7-68.4 38.7-93.4l59.4-59.4 186.8 186.8-59.4 59.4z"}}]},name:"api",theme:"outlined"},n=function(c,e){return a.createElement(l,t({},c,{ref:e,icon:r}))},s=a.forwardRef(n);export{s as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/AuditOutlined-D7IGVWIo.js b/shopops-admin/src/main/resources/static/admin/assets/AuditOutlined-D7IGVWIo.js new file mode 100644 index 0000000..bdca542 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/AuditOutlined-D7IGVWIo.js @@ -0,0 +1 @@ +import{r as c,I as a,_ as r}from"./styles-CdbHnvft.js";var v={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M296 250c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H296zm184 144H296c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm-48 458H208V148h560v320c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V108c0-17.7-14.3-32-32-32H168c-17.7 0-32 14.3-32 32v784c0 17.7 14.3 32 32 32h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm440-88H728v-36.6c46.3-13.8 80-56.6 80-107.4 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 50.7 33.7 93.6 80 107.4V764H520c-8.8 0-16 7.2-16 16v152c0 8.8 7.2 16 16 16h352c8.8 0 16-7.2 16-16V780c0-8.8-7.2-16-16-16zM646 620c0-27.6 22.4-50 50-50s50 22.4 50 50-22.4 50-50 50-50-22.4-50-50zm180 266H566v-60h260v60z"}}]},name:"audit",theme:"outlined"},n=function(t,e){return c.createElement(a,r({},t,{ref:e,icon:v}))},s=c.forwardRef(n);export{s as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/CheckCircleOutlined-xsXj4p7f.js b/shopops-admin/src/main/resources/static/admin/assets/CheckCircleOutlined-xsXj4p7f.js new file mode 100644 index 0000000..6be46c9 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/CheckCircleOutlined-xsXj4p7f.js @@ -0,0 +1 @@ +import{r as e,I as a,_ as r}from"./styles-CdbHnvft.js";var l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"},n=function(t,c){return e.createElement(a,r({},t,{ref:c,icon:l}))},o=e.forwardRef(n);export{o as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/DashboardOutlined-DhWgz-bD.js b/shopops-admin/src/main/resources/static/admin/assets/DashboardOutlined-DhWgz-bD.js new file mode 100644 index 0000000..b6862b4 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/DashboardOutlined-DhWgz-bD.js @@ -0,0 +1 @@ +import{r as a,I as r,_ as t}from"./styles-CdbHnvft.js";var l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M924.8 385.6a446.7 446.7 0 00-96-142.4 446.7 446.7 0 00-142.4-96C631.1 123.8 572.5 112 512 112s-119.1 11.8-174.4 35.2a446.7 446.7 0 00-142.4 96 446.7 446.7 0 00-96 142.4C75.8 440.9 64 499.5 64 560c0 132.7 58.3 257.7 159.9 343.1l1.7 1.4c5.8 4.8 13.1 7.5 20.6 7.5h531.7c7.5 0 14.8-2.7 20.6-7.5l1.7-1.4C901.7 817.7 960 692.7 960 560c0-60.5-11.9-119.1-35.2-174.4zM761.4 836H262.6A371.12 371.12 0 01140 560c0-99.4 38.7-192.8 109-263 70.3-70.3 163.7-109 263-109 99.4 0 192.8 38.7 263 109 70.3 70.3 109 163.7 109 263 0 105.6-44.5 205.5-122.6 276zM623.5 421.5a8.03 8.03 0 00-11.3 0L527.7 506c-18.7-5-39.4-.2-54.1 14.5a55.95 55.95 0 000 79.2 55.95 55.95 0 0079.2 0 55.87 55.87 0 0014.5-54.1l84.5-84.5c3.1-3.1 3.1-8.2 0-11.3l-28.3-28.3zM490 320h44c4.4 0 8-3.6 8-8v-80c0-4.4-3.6-8-8-8h-44c-4.4 0-8 3.6-8 8v80c0 4.4 3.6 8 8 8zm260 218v44c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8v-44c0-4.4-3.6-8-8-8h-80c-4.4 0-8 3.6-8 8zm12.7-197.2l-31.1-31.1a8.03 8.03 0 00-11.3 0l-56.6 56.6a8.03 8.03 0 000 11.3l31.1 31.1c3.1 3.1 8.2 3.1 11.3 0l56.6-56.6c3.1-3.1 3.1-8.2 0-11.3zm-458.6-31.1a8.03 8.03 0 00-11.3 0l-31.1 31.1a8.03 8.03 0 000 11.3l56.6 56.6c3.1 3.1 8.2 3.1 11.3 0l31.1-31.1c3.1-3.1 3.1-8.2 0-11.3l-56.6-56.6zM262 530h-80c-4.4 0-8 3.6-8 8v44c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8v-44c0-4.4-3.6-8-8-8z"}}]},name:"dashboard",theme:"outlined"},o=function(c,e){return a.createElement(r,t({},c,{ref:e,icon:l}))},h=a.forwardRef(o);export{h as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/FileTextOutlined-DR_VCDvU.js b/shopops-admin/src/main/resources/static/admin/assets/FileTextOutlined-DR_VCDvU.js new file mode 100644 index 0000000..d6f6e98 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/FileTextOutlined-DR_VCDvU.js @@ -0,0 +1 @@ +import{r as e,I as a,_ as r}from"./styles-CdbHnvft.js";var n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494zM504 618H320c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM312 490v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H320c-4.4 0-8 3.6-8 8z"}}]},name:"file-text",theme:"outlined"},i=function(t,c){return e.createElement(a,r({},t,{ref:c,icon:n}))},v=e.forwardRef(i);export{v as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/PlayCircleOutlined-g8qloYTv.js b/shopops-admin/src/main/resources/static/admin/assets/PlayCircleOutlined-g8qloYTv.js new file mode 100644 index 0000000..c4b345b --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/PlayCircleOutlined-g8qloYTv.js @@ -0,0 +1 @@ +import{r as a,I as r,_ as l}from"./styles-CdbHnvft.js";var c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M719.4 499.1l-296.1-215A15.9 15.9 0 00398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 000-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z"}}]},name:"play-circle",theme:"outlined"},n=function(e,t){return a.createElement(r,l({},e,{ref:t,icon:c}))},o=a.forwardRef(n);export{o as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/SaveOutlined-DonLai3u.js b/shopops-admin/src/main/resources/static/admin/assets/SaveOutlined-DonLai3u.js new file mode 100644 index 0000000..ad1ae5b --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/SaveOutlined-DonLai3u.js @@ -0,0 +1 @@ +import{r as e,I as c,_ as r}from"./styles-CdbHnvft.js";var n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M893.3 293.3L730.7 130.7c-7.5-7.5-16.7-13-26.7-16V112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V338.5c0-17-6.7-33.2-18.7-45.2zM384 184h256v104H384V184zm456 656H184V184h136v136c0 17.7 14.3 32 32 32h320c17.7 0 32-14.3 32-32V205.8l136 136V840zM512 442c-79.5 0-144 64.5-144 144s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144zm0 224c-44.2 0-80-35.8-80-80s35.8-80 80-80 80 35.8 80 80-35.8 80-80 80z"}}]},name:"save",theme:"outlined"},s=function(a,t){return e.createElement(c,r({},a,{ref:t,icon:n}))},i=e.forwardRef(s);export{i as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/StopOutlined-BzANPQ2U.js b/shopops-admin/src/main/resources/static/admin/assets/StopOutlined-BzANPQ2U.js new file mode 100644 index 0000000..ee1fe9c --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/StopOutlined-BzANPQ2U.js @@ -0,0 +1 @@ +import{r as t,I as o,_ as r}from"./styles-CdbHnvft.js";var n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372 0-89 31.3-170.8 83.5-234.8l523.3 523.3C682.8 852.7 601 884 512 884zm288.5-137.2L277.2 223.5C341.2 171.3 423 140 512 140c205.4 0 372 166.6 372 372 0 89-31.3 170.8-83.5 234.8z"}}]},name:"stop",theme:"outlined"},s=function(e,a){return t.createElement(o,r({},e,{ref:a,icon:n}))},l=t.forwardRef(s);export{l as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/Table-sHSMbx0B.js b/shopops-admin/src/main/resources/static/admin/assets/Table-sHSMbx0B.js new file mode 100644 index 0000000..4d8d011 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/Table-sHSMbx0B.js @@ -0,0 +1,105 @@ +import{ap as ht,r as a,aq as bl,K as Ue,M as Y,ar as yl,as as qr,P as kn,at as Cl,ad as It,W as Mt,aa as xn,au as xl,av as Sl,aw as Xr,ax as $l,J as j,al as sn,ak as Gr,E as Lt,G as wt,ay as Sn,az as Ur,aA as no,H as nt,ac as Tt,aB as wl,aC as El,aD as Yr,aE as Il,ao as ct,Q as pt,aF as Nl,aG as Qr,aH as $n,aI as Ol,aJ as Rl,aK as kl,aL as Pl,aM as Tl,aN as Bl,aO as Yo,aP as Qo,aQ as Ml,aR as Dl,aS as cn,aT as bo,aU as Pn,aV as Kl,aW as Ll,aX as _l,aY as jl,aZ as Hl,a_ as zl,a8 as lt,a4 as Ie,ai as _,_ as Ce,a7 as U,a as he,a$ as yo,b0 as Dt,b1 as Tn,b2 as Zr,b3 as Jr,b4 as Fl,b5 as Bn,b6 as Al,Y as Co,am as on,a6 as gt,b7 as $t,N as de,b8 as Wl,S as Vl,B as wn,b9 as ea,ba as xo,bb as ta,bc as ql,X as Xl,bd as Gl,be as Ul,bf as Yl,bg as Ql,bh as na,bi as bt,bj as Zl,bk as Jl,bl as ei,bm as rn,bn as ti,bo as mt,g as oa,I as dt,bp as ni,bq as ra,O as aa,ae as oi,br as ri,ag as ai,bs as la,f as li,bt as ia,bu as ii,bv as si,bw as ci,bx as di,by as oo,bz as ui,bA as fi,bB as Zo,bC as an,bD as mi,bE as sa,bF as So,bG as Jo,a5 as pi,bH as er,bI as tr,bJ as gi,bK as ca,bL as vi,bM as hi,bN as bi,bO as yi,bP as ve,aj as xt,bQ as Ci,ab as xi,bR as Si,k as $i,Z as da,bS as nr,bT as wi,a0 as Ei,a2 as Ii,a3 as Ni,C as Oi,$ as Ri}from"./styles-CdbHnvft.js";const or=e=>typeof e=="object"&&e!=null&&e.nodeType===1,rr=(e,t)=>(!t||e!=="hidden")&&e!=="visible"&&e!=="clip",hn=(e,t)=>{if(e.clientHeight{const r=(l=>{if(!l.ownerDocument||!l.ownerDocument.defaultView)return null;try{return l.ownerDocument.defaultView.frameElement}catch{return null}})(n);return!!r&&(r.clientHeightlt||l>e&&s=t&&i>=o?l-e-n:s>t&&io?s-t+r:0,ki=e=>{const t=e.parentElement;return t??(e.getRootNode().host||null)},ar=(e,t)=>{var o,n,r,l;if(typeof document>"u")return[];const{scrollMode:s,block:i,inline:c,boundary:d,skipOverflowHiddenElements:m}=t,u=typeof d=="function"?d:R=>R!==d;if(!or(e))throw new TypeError("Invalid target");const p=document.scrollingElement||document.documentElement,f=[];let g=e;for(;or(g)&&u(g);){if(g=ki(g),g===p){f.push(g);break}g!=null&&g===document.body&&hn(g)&&!hn(document.documentElement)||g!=null&&hn(g,m)&&f.push(g)}const h=(n=(o=window.visualViewport)==null?void 0:o.width)!=null?n:innerWidth,v=(l=(r=window.visualViewport)==null?void 0:r.height)!=null?l:innerHeight,{scrollX:b,scrollY:$}=window,{height:C,width:x,top:S,right:k,bottom:I,left:E}=e.getBoundingClientRect(),{top:y,right:T,bottom:O,left:M}=(R=>{const P=window.getComputedStyle(R);return{top:parseFloat(P.scrollMarginTop)||0,right:parseFloat(P.scrollMarginRight)||0,bottom:parseFloat(P.scrollMarginBottom)||0,left:parseFloat(P.scrollMarginLeft)||0}})(e);let B=i==="start"||i==="nearest"?S-y:i==="end"?I+O:S+C/2-y+O,w=c==="center"?E+x/2-M+T:c==="end"?k+T:E-M;const N=[];for(let R=0;R=0&&E>=0&&I<=v&&k<=h&&(P===p&&!hn(P)||S>=F&&I<=q&&E>=L&&k<=A))return N;const se=getComputedStyle(P),ce=parseInt(se.borderLeftWidth,10),ie=parseInt(se.borderTopWidth,10),Q=parseInt(se.borderRightWidth,10),Z=parseInt(se.borderBottomWidth,10);let V=0,te=0;const ne="offsetWidth"in P?P.offsetWidth-P.clientWidth-ce-Q:0,X="offsetHeight"in P?P.offsetHeight-P.clientHeight-ie-Z:0,J="offsetWidth"in P?P.offsetWidth===0?0:D/P.offsetWidth:0,W="offsetHeight"in P?P.offsetHeight===0?0:K/P.offsetHeight:0;if(p===P)V=i==="start"?B:i==="end"?B-v:i==="nearest"?bn($,$+v,v,ie,Z,$+B,$+B+C,C):B-v/2,te=c==="start"?w:c==="center"?w-h/2:c==="end"?w-h:bn(b,b+h,h,ce,Q,b+w,b+w+x,x),V=Math.max(0,V+$),te=Math.max(0,te+b);else{V=i==="start"?B-F-ie:i==="end"?B-q+Z+X:i==="nearest"?bn(F,q,K,ie,Z+X,B,B+C,C):B-(F+K/2)+X/2,te=c==="start"?w-L-ce:c==="center"?w-(L+D/2)+ne/2:c==="end"?w-A+Q+ne:bn(L,A,D,ce,Q+ne,w,w+x,x);const{scrollLeft:H,scrollTop:ee}=P;V=W===0?0:Math.max(0,Math.min(ee+V/W,P.scrollHeight-K/W+X)),te=J===0?0:Math.max(0,Math.min(H+te/J,P.scrollWidth-D/J+ne)),B+=ee-V,w+=H-te}N.push({el:P,top:V,left:te})}return N},Pi=e=>e===!1?{block:"end",inline:"nearest"}:(t=>t===Object(t)&&Object.keys(t).length!==0)(e)?e:{block:"start",inline:"nearest"};function Ti(e,t){if(!e.isConnected||!(r=>{let l=r;for(;l&&l.parentNode;){if(l.parentNode===document)return!0;l=l.parentNode instanceof ShadowRoot?l.parentNode.host:l.parentNode}return!1})(e))return;const o=(r=>{const l=window.getComputedStyle(r);return{top:parseFloat(l.scrollMarginTop)||0,right:parseFloat(l.scrollMarginRight)||0,bottom:parseFloat(l.scrollMarginBottom)||0,left:parseFloat(l.scrollMarginLeft)||0}})(e);if((r=>typeof r=="object"&&typeof r.behavior=="function")(t))return t.behavior(ar(e,t));const n=typeof t=="boolean"||t==null?void 0:t.behavior;for(const{el:r,top:l,left:s}of ar(e,Pi(t))){const i=l-o.top+o.bottom,c=s-o.left+o.right;r.scroll({top:i,left:c,behavior:n})}}function ro(e){return e!=null&&e===e.window}const Bi=e=>{var t,o;if(typeof window>"u")return 0;let n=0;return ro(e)?n=e.pageYOffset:e instanceof Document?n=e.documentElement.scrollTop:(e instanceof HTMLElement||e)&&(n=e.scrollTop),e&&!ro(e)&&typeof n!="number"&&(n=(o=((t=e.ownerDocument)!==null&&t!==void 0?t:e).documentElement)===null||o===void 0?void 0:o.scrollTop),n};function Mi(e,t,o,n){const r=o-t;return e/=n/2,e<1?r/2*e*e*e+t:r/2*((e-=2)*e*e+2)+t}function Di(e,t={}){const{getContainer:o=()=>window,callback:n,duration:r=450}=t,l=o(),s=Bi(l),i=Date.now(),c=()=>{const m=Date.now()-i,u=Mi(m>r?r:m,s,e,r);ro(l)?l.scrollTo(window.pageXOffset,u):l instanceof Document||l.constructor.name==="HTMLDocument"?l.documentElement.scrollTop=u:l.scrollTop=u,m{const[t,o]=a.useState(null);return[a.useCallback((r,l,s)=>{const i=t??r,c=Math.min(i||0,r),d=Math.max(i||0,r),m=l.slice(c,d+1).map(e),u=m.some(f=>!s.has(f)),p=[];return m.forEach(f=>{u?(s.has(f)||p.push(f),s.add(f)):(s.delete(f),p.push(f))}),o(u?d:null),p},[t]),o]};function Li(e,t){return e._antProxy=e._antProxy||{},Object.keys(t).forEach(o=>{if(!(o in e._antProxy)){const n=e[o];e._antProxy[o]=n,e[o]=t[o]}}),e}const _i=(e,t)=>a.useImperativeHandle(e,()=>{const o=t(),{nativeElement:n}=o;return typeof Proxy<"u"?new Proxy(n,{get(r,l){return o[l]?o[l]:Reflect.get(r,l)}}):Li(n,o)}),ji=e=>{const t=a.useRef(e),[,o]=bl();return[()=>t.current,n=>{t.current=n,o()}]},$o=e=>({[e.componentCls]:{[`${e.antCls}-motion-collapse-legacy`]:{overflow:"hidden","&-active":{transition:`height ${e.motionDurationMid} ${e.motionEaseInOut}, + opacity ${e.motionDurationMid} ${e.motionEaseInOut} !important`}},[`${e.antCls}-motion-collapse`]:{overflow:"hidden",transition:`height ${e.motionDurationMid} ${e.motionEaseInOut}, + opacity ${e.motionDurationMid} ${e.motionEaseInOut} !important`}}}),Hi=e=>typeof e!="object"&&typeof e!="function"||e===null,En=a.createContext({prefixCls:"",firstLevel:!0,inlineCollapsed:!1});var zi=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const{prefixCls:t,className:o,dashed:n}=e,r=zi(e,["prefixCls","className","dashed"]),{getPrefixCls:l}=a.useContext(Ue),s=l("menu",t),i=Y({[`${s}-item-divider-dashed`]:!!n},o);return a.createElement(yl,Object.assign({className:i},r))},fa=e=>{var t;const{className:o,children:n,icon:r,title:l,danger:s,extra:i}=e,{prefixCls:c,firstLevel:d,direction:m,disableMenuItemTitleTooltip:u,inlineCollapsed:p}=a.useContext(En),f=C=>{const x=n==null?void 0:n[0],S=a.createElement("span",{className:Y(`${c}-title-content`,{[`${c}-title-content-with-extra`]:!!i||i===0})},n);return(!r||a.isValidElement(n)&&n.type==="span")&&n&&C&&d&&typeof x=="string"?a.createElement("div",{className:`${c}-inline-collapsed-noicon`},x.charAt(0)):S},{siderCollapsed:g}=a.useContext(qr);let h=l;typeof l>"u"?h=d?n:"":l===!1&&(h="");const v={title:h};!g&&!p&&(v.title=null,v.open=!1);const b=kn(n).length;let $=a.createElement(Cl,Object.assign({},It(e,["title","icon","danger"]),{className:Y({[`${c}-item-danger`]:s,[`${c}-item-only-child`]:(r?b+1:b)===1},o),title:typeof l=="string"?l:void 0}),Mt(r,{className:Y(a.isValidElement(r)?(t=r.props)===null||t===void 0?void 0:t.className:void 0,`${c}-item-icon`)}),f(p));return u||($=a.createElement(xn,Object.assign({},v,{placement:m==="rtl"?"left":"right",classNames:{root:`${c}-inline-collapsed-tooltip`}}),$)),$};var Fi=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const{children:o}=e,n=Fi(e,["children"]),r=a.useContext(In),l=a.useMemo(()=>Object.assign(Object.assign({},r),n),[r,n.prefixCls,n.mode,n.selectable,n.rootClassName]),s=xl(o),i=Sl(t,s?Xr(o):null);return a.createElement(In.Provider,{value:l},a.createElement($l,{space:!0},s?a.cloneElement(o,{ref:i}):o))}),Ai=e=>{const{componentCls:t,motionDurationSlow:o,horizontalLineHeight:n,colorSplit:r,lineWidth:l,lineType:s,itemPaddingInline:i}=e;return{[`${t}-horizontal`]:{lineHeight:n,border:0,borderBottom:`${j(l)} ${s} ${r}`,boxShadow:"none","&::after":{display:"block",clear:"both",height:0,content:'"\\20"'},[`${t}-item, ${t}-submenu`]:{position:"relative",display:"inline-block",verticalAlign:"bottom",paddingInline:i},[`> ${t}-item:hover, + > ${t}-item-active, + > ${t}-submenu ${t}-submenu-title:hover`]:{backgroundColor:"transparent"},[`${t}-item, ${t}-submenu-title`]:{transition:[`border-color ${o}`,`background ${o}`].join(",")},[`${t}-submenu-arrow`]:{display:"none"}}}},Wi=({componentCls:e,menuArrowOffset:t,calc:o})=>({[`${e}-rtl`]:{direction:"rtl"},[`${e}-submenu-rtl`]:{transformOrigin:"100% 0"},[`${e}-rtl${e}-vertical, + ${e}-submenu-rtl ${e}-vertical`]:{[`${e}-submenu-arrow`]:{"&::before":{transform:`rotate(-45deg) translateY(${j(o(t).mul(-1).equal())})`},"&::after":{transform:`rotate(45deg) translateY(${j(t)})`}}}}),lr=e=>sn(e),ir=(e,t)=>{const{componentCls:o,itemColor:n,itemSelectedColor:r,subMenuItemSelectedColor:l,groupTitleColor:s,itemBg:i,subMenuItemBg:c,itemSelectedBg:d,activeBarHeight:m,activeBarWidth:u,activeBarBorderWidth:p,motionDurationSlow:f,motionEaseInOut:g,motionEaseOut:h,itemPaddingInline:v,motionDurationMid:b,itemHoverColor:$,lineType:C,colorSplit:x,itemDisabledColor:S,dangerItemColor:k,dangerItemHoverColor:I,dangerItemSelectedColor:E,dangerItemActiveBg:y,dangerItemSelectedBg:T,popupBg:O,itemHoverBg:M,itemActiveBg:B,menuSubMenuBg:w,horizontalItemSelectedColor:N,horizontalItemSelectedBg:R,horizontalItemBorderRadius:P,horizontalItemHoverBg:K}=e;return{[`${o}-${t}, ${o}-${t} > ${o}`]:{color:n,background:i,[`&${o}-root:focus-visible`]:Object.assign({},lr(e)),[`${o}-item`]:{"&-group-title, &-extra":{color:s}},[`${o}-submenu-selected > ${o}-submenu-title`]:{color:l},[`${o}-item, ${o}-submenu-title`]:{color:n,[`&:not(${o}-item-disabled):focus-visible`]:Object.assign({},lr(e))},[`${o}-item-disabled, ${o}-submenu-disabled`]:{color:`${S} !important`},[`${o}-item:not(${o}-item-selected):not(${o}-submenu-selected)`]:{[`&:hover, > ${o}-submenu-title:hover`]:{color:$}},[`&:not(${o}-horizontal)`]:{[`${o}-item:not(${o}-item-selected)`]:{"&:hover":{backgroundColor:M},"&:active":{backgroundColor:B}},[`${o}-submenu-title`]:{"&:hover":{backgroundColor:M},"&:active":{backgroundColor:B}}},[`${o}-item-danger`]:{color:k,[`&${o}-item:hover`]:{[`&:not(${o}-item-selected):not(${o}-submenu-selected)`]:{color:I}},[`&${o}-item:active`]:{background:y}},[`${o}-item a`]:{"&, &:hover":{color:"inherit"}},[`${o}-item-selected`]:{color:r,[`&${o}-item-danger`]:{color:E},"a, a:hover":{color:"inherit"}},[`& ${o}-item-selected`]:{backgroundColor:d,[`&${o}-item-danger`]:{backgroundColor:T}},[`&${o}-submenu > ${o}`]:{backgroundColor:w},[`&${o}-popup > ${o}`]:{backgroundColor:O},[`&${o}-submenu-popup > ${o}`]:{backgroundColor:O},[`&${o}-horizontal`]:Object.assign(Object.assign({},t==="dark"?{borderBottom:0}:{}),{[`> ${o}-item, > ${o}-submenu`]:{top:p,marginTop:e.calc(p).mul(-1).equal(),marginBottom:0,borderRadius:P,"&::after":{position:"absolute",insetInline:v,bottom:0,borderBottom:`${j(m)} solid transparent`,transition:`border-color ${f} ${g}`,content:'""'},"&:hover, &-active, &-open":{background:K,"&::after":{borderBottomWidth:m,borderBottomColor:N}},"&-selected":{color:N,backgroundColor:R,"&:hover":{backgroundColor:R},"&::after":{borderBottomWidth:m,borderBottomColor:N}}}}),[`&${o}-root`]:{[`&${o}-inline, &${o}-vertical`]:{borderInlineEnd:`${j(p)} ${C} ${x}`}},[`&${o}-inline`]:{[`${o}-sub${o}-inline`]:{background:c},[`${o}-item`]:{position:"relative","&::after":{position:"absolute",insetBlock:0,insetInlineEnd:0,borderInlineEnd:`${j(u)} solid ${r}`,transform:"scaleY(0.0001)",opacity:0,transition:[`transform ${b} ${h}`,`opacity ${b} ${h}`].join(","),content:'""'},[`&${o}-item-danger`]:{"&::after":{borderInlineEndColor:E}}},[`${o}-selected, ${o}-item-selected`]:{"&::after":{transform:"scaleY(1)",opacity:1,transition:[`transform ${b} ${g}`,`opacity ${b} ${g}`].join(",")}}}}}},sr=e=>{const{componentCls:t,itemHeight:o,itemMarginInline:n,padding:r,menuArrowSize:l,marginXS:s,itemMarginBlock:i,itemWidth:c,itemPaddingInline:d}=e,m=e.calc(l).add(r).add(s).equal();return{[`${t}-item`]:{position:"relative",overflow:"hidden"},[`${t}-item, ${t}-submenu-title`]:{height:o,lineHeight:j(o),paddingInline:d,overflow:"hidden",textOverflow:"ellipsis",marginInline:n,marginBlock:i,width:c},[`> ${t}-item, + > ${t}-submenu > ${t}-submenu-title`]:{height:o,lineHeight:j(o)},[`${t}-item-group-list ${t}-submenu-title, + ${t}-submenu-title`]:{paddingInlineEnd:m}}},Vi=e=>{const{componentCls:t,iconCls:o,itemHeight:n,colorTextLightSolid:r,dropdownWidth:l,controlHeightLG:s,motionEaseOut:i,paddingXL:c,itemMarginInline:d,fontSizeLG:m,motionDurationFast:u,motionDurationSlow:p,paddingXS:f,boxShadowSecondary:g,collapsedWidth:h,collapsedIconSize:v}=e,b={height:n,lineHeight:j(n),listStylePosition:"inside",listStyleType:"disc"};return[{[t]:{"&-inline, &-vertical":Object.assign({[`&${t}-root`]:{boxShadow:"none"}},sr(e))},[`${t}-submenu-popup`]:{[`${t}-vertical`]:Object.assign(Object.assign({},sr(e)),{boxShadow:g})}},{[`${t}-submenu-popup ${t}-vertical${t}-sub`]:{minWidth:l,maxHeight:`calc(100vh - ${j(e.calc(s).mul(2.5).equal())})`,padding:"0",overflow:"hidden",borderInlineEnd:0,"&:not([class*='-active'])":{overflowX:"hidden",overflowY:"auto"}}},{[`${t}-inline`]:{width:"100%",[`&${t}-root`]:{[`${t}-item, ${t}-submenu-title`]:{display:"flex",alignItems:"center",transition:[`border-color ${p}`,`background ${p}`,`padding ${u} ${i}`].join(","),[`> ${t}-title-content`]:{flex:"auto",minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},"> *":{flex:"none"}}},[`${t}-sub${t}-inline`]:{padding:0,border:0,borderRadius:0,boxShadow:"none",[`& > ${t}-submenu > ${t}-submenu-title`]:b,[`& ${t}-item-group-title`]:{paddingInlineStart:c}},[`${t}-item`]:b}},{[`${t}-inline-collapsed`]:{width:h,[`&${t}-root`]:{[`${t}-item, ${t}-submenu ${t}-submenu-title`]:{[`> ${t}-inline-collapsed-noicon`]:{fontSize:m,textAlign:"center"}}},[`> ${t}-item, + > ${t}-item-group > ${t}-item-group-list > ${t}-item, + > ${t}-item-group > ${t}-item-group-list > ${t}-submenu > ${t}-submenu-title, + > ${t}-submenu > ${t}-submenu-title`]:{insetInlineStart:0,paddingInline:`calc(50% - ${j(e.calc(v).div(2).equal())} - ${j(d)})`,textOverflow:"clip",[` + ${t}-submenu-arrow, + ${t}-submenu-expand-icon + `]:{opacity:0},[`${t}-item-icon, ${o}`]:{margin:0,fontSize:v,lineHeight:j(n),"+ span":{display:"inline-block",opacity:0}}},[`${t}-item-icon, ${o}`]:{display:"inline-block"},"&-tooltip":{pointerEvents:"none",[`${t}-item-icon, ${o}`]:{display:"none"},"a, a:hover":{color:r}},[`${t}-item-group-title`]:Object.assign(Object.assign({},Gr),{paddingInline:f})}}]},cr=e=>{const{componentCls:t,motionDurationSlow:o,motionDurationMid:n,motionEaseInOut:r,motionEaseOut:l,iconCls:s,iconSize:i,iconMarginInlineEnd:c}=e;return{[`${t}-item, ${t}-submenu-title`]:{position:"relative",display:"block",margin:0,whiteSpace:"nowrap",cursor:"pointer",transition:[`border-color ${o}`,`background ${o}`,`padding calc(${o} + 0.1s) ${r}`].join(","),[`${t}-item-icon, ${s}`]:{minWidth:i,fontSize:i,transition:[`font-size ${n} ${l}`,`margin ${o} ${r}`,`color ${o}`].join(","),"+ span":{marginInlineStart:c,opacity:1,transition:[`opacity ${o} ${r}`,`margin ${o}`,`color ${o}`].join(",")}},[`${t}-item-icon`]:Object.assign({},wl()),[`&${t}-item-only-child`]:{[`> ${s}, > ${t}-item-icon`]:{marginInlineEnd:0}}},[`${t}-item-disabled, ${t}-submenu-disabled`]:{background:"none !important",cursor:"not-allowed","&::after":{borderColor:"transparent !important"},a:{color:"inherit !important",cursor:"not-allowed",pointerEvents:"none"},[`> ${t}-submenu-title`]:{color:"inherit !important",cursor:"not-allowed"}}}},dr=e=>{const{componentCls:t,motionDurationSlow:o,motionEaseInOut:n,borderRadius:r,menuArrowSize:l,menuArrowOffset:s}=e;return{[`${t}-submenu`]:{"&-expand-icon, &-arrow":{position:"absolute",top:"50%",insetInlineEnd:e.margin,width:l,color:"currentcolor",transform:"translateY(-50%)",transition:`transform ${o} ${n}, opacity ${o}`},"&-arrow":{"&::before, &::after":{position:"absolute",width:e.calc(l).mul(.6).equal(),height:e.calc(l).mul(.15).equal(),backgroundColor:"currentcolor",borderRadius:r,transition:[`background ${o} ${n}`,`transform ${o} ${n}`,`top ${o} ${n}`,`color ${o} ${n}`].join(","),content:'""'},"&::before":{transform:`rotate(45deg) translateY(${j(e.calc(s).mul(-1).equal())})`},"&::after":{transform:`rotate(-45deg) translateY(${j(s)})`}}}}},qi=e=>{const{antCls:t,componentCls:o,fontSize:n,motionDurationSlow:r,motionDurationMid:l,motionEaseInOut:s,paddingXS:i,padding:c,colorSplit:d,lineWidth:m,zIndexPopup:u,borderRadiusLG:p,subMenuItemBorderRadius:f,menuArrowSize:g,menuArrowOffset:h,lineType:v,groupTitleLineHeight:b,groupTitleFontSize:$}=e;return[{"":{[o]:Object.assign(Object.assign({},no()),{"&-hidden":{display:"none"}})},[`${o}-submenu-hidden`]:{display:"none"}},{[o]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},nt(e)),no()),{marginBottom:0,paddingInlineStart:0,fontSize:n,lineHeight:0,listStyle:"none",outline:"none",transition:`width ${r} cubic-bezier(0.2, 0, 0, 1) 0s`,"ul, ol":{margin:0,padding:0,listStyle:"none"},"&-overflow":{display:"flex",[`${o}-item`]:{flex:"none"}},[`${o}-item, ${o}-submenu, ${o}-submenu-title`]:{borderRadius:e.itemBorderRadius},[`${o}-item-group-title`]:{padding:`${j(i)} ${j(c)}`,fontSize:$,lineHeight:b,transition:`all ${r}`},[`&-horizontal ${o}-submenu`]:{transition:[`border-color ${r} ${s}`,`background ${r} ${s}`].join(",")},[`${o}-submenu, ${o}-submenu-inline`]:{transition:[`border-color ${r} ${s}`,`background ${r} ${s}`,`padding ${l} ${s}`].join(",")},[`${o}-submenu ${o}-sub`]:{cursor:"initial",transition:[`background ${r} ${s}`,`padding ${r} ${s}`].join(",")},[`${o}-title-content`]:{transition:`color ${r}`,"&-with-extra":{display:"inline-flex",alignItems:"center",width:"100%"},[`> ${t}-typography-ellipsis-single-line`]:{display:"inline",verticalAlign:"unset"},[`${o}-item-extra`]:{marginInlineStart:"auto",paddingInlineStart:e.padding}},[`${o}-item a`]:{"&::before":{position:"absolute",inset:0,backgroundColor:"transparent",content:'""'}},[`${o}-item-divider`]:{overflow:"hidden",lineHeight:0,borderColor:d,borderStyle:v,borderWidth:0,borderTopWidth:m,marginBlock:m,padding:0,"&-dashed":{borderStyle:"dashed"}}}),cr(e)),{[`${o}-item-group`]:{[`${o}-item-group-list`]:{margin:0,padding:0,[`${o}-item, ${o}-submenu-title`]:{paddingInline:`${j(e.calc(n).mul(2).equal())} ${j(c)}`}}},"&-submenu":{"&-popup":{position:"absolute",zIndex:u,borderRadius:p,boxShadow:"none",transformOrigin:"0 0",[`&${o}-submenu`]:{background:"transparent"},"&::before":{position:"absolute",inset:0,zIndex:-1,width:"100%",height:"100%",opacity:0,content:'""'},[`> ${o}`]:Object.assign(Object.assign(Object.assign({borderRadius:p},cr(e)),dr(e)),{[`${o}-item, ${o}-submenu > ${o}-submenu-title`]:{borderRadius:f},[`${o}-submenu-title::after`]:{transition:`transform ${r} ${s}`}})},"\n &-placement-leftTop,\n &-placement-bottomRight,\n ":{transformOrigin:"100% 0"},"\n &-placement-leftBottom,\n &-placement-topRight,\n ":{transformOrigin:"100% 100%"},"\n &-placement-rightBottom,\n &-placement-topLeft,\n ":{transformOrigin:"0 100%"},"\n &-placement-bottomLeft,\n &-placement-rightTop,\n ":{transformOrigin:"0 0"},"\n &-placement-leftTop,\n &-placement-leftBottom\n ":{paddingInlineEnd:e.paddingXS},"\n &-placement-rightTop,\n &-placement-rightBottom\n ":{paddingInlineStart:e.paddingXS},"\n &-placement-topRight,\n &-placement-topLeft\n ":{paddingBottom:e.paddingXS},"\n &-placement-bottomRight,\n &-placement-bottomLeft\n ":{paddingTop:e.paddingXS}}}),dr(e)),{[`&-inline-collapsed ${o}-submenu-arrow, + &-inline ${o}-submenu-arrow`]:{"&::before":{transform:`rotate(-45deg) translateX(${j(h)})`},"&::after":{transform:`rotate(45deg) translateX(${j(e.calc(h).mul(-1).equal())})`}},[`${o}-submenu-open${o}-submenu-inline > ${o}-submenu-title > ${o}-submenu-arrow`]:{transform:`translateY(${j(e.calc(g).mul(.2).mul(-1).equal())})`,"&::after":{transform:`rotate(-45deg) translateX(${j(e.calc(h).mul(-1).equal())})`},"&::before":{transform:`rotate(45deg) translateX(${j(h)})`}}})},{[`${t}-layout-header`]:{[o]:{lineHeight:"inherit"}}}]},Xi=e=>{var t,o,n;const{colorPrimary:r,colorError:l,colorTextDisabled:s,colorErrorBg:i,colorText:c,colorTextDescription:d,colorBgContainer:m,colorFillAlter:u,colorFillContent:p,lineWidth:f,lineWidthBold:g,controlItemBgActive:h,colorBgTextHover:v,controlHeightLG:b,lineHeight:$,colorBgElevated:C,marginXXS:x,padding:S,fontSize:k,controlHeightSM:I,fontSizeLG:E,colorTextLightSolid:y,colorErrorHover:T}=e,O=(t=e.activeBarWidth)!==null&&t!==void 0?t:0,M=(o=e.activeBarBorderWidth)!==null&&o!==void 0?o:f,B=(n=e.itemMarginInline)!==null&&n!==void 0?n:e.marginXXS,w=new Tt(y).setA(.65).toRgbString();return{dropdownWidth:160,zIndexPopup:e.zIndexPopupBase+50,radiusItem:e.borderRadiusLG,itemBorderRadius:e.borderRadiusLG,radiusSubMenuItem:e.borderRadiusSM,subMenuItemBorderRadius:e.borderRadiusSM,colorItemText:c,itemColor:c,colorItemTextHover:c,itemHoverColor:c,colorItemTextHoverHorizontal:r,horizontalItemHoverColor:r,colorGroupTitle:d,groupTitleColor:d,colorItemTextSelected:r,itemSelectedColor:r,subMenuItemSelectedColor:r,colorItemTextSelectedHorizontal:r,horizontalItemSelectedColor:r,colorItemBg:m,itemBg:m,colorItemBgHover:v,itemHoverBg:v,colorItemBgActive:p,itemActiveBg:h,colorSubItemBg:u,subMenuItemBg:u,colorItemBgSelected:h,itemSelectedBg:h,colorItemBgSelectedHorizontal:"transparent",horizontalItemSelectedBg:"transparent",colorActiveBarWidth:0,activeBarWidth:O,colorActiveBarHeight:g,activeBarHeight:g,colorActiveBarBorderSize:f,activeBarBorderWidth:M,colorItemTextDisabled:s,itemDisabledColor:s,colorDangerItemText:l,dangerItemColor:l,colorDangerItemTextHover:l,dangerItemHoverColor:l,colorDangerItemTextSelected:l,dangerItemSelectedColor:l,colorDangerItemBgActive:i,dangerItemActiveBg:i,colorDangerItemBgSelected:i,dangerItemSelectedBg:i,itemMarginInline:B,horizontalItemBorderRadius:0,horizontalItemHoverBg:"transparent",itemHeight:b,groupTitleLineHeight:$,collapsedWidth:b*2,popupBg:C,itemMarginBlock:x,itemPaddingInline:S,horizontalLineHeight:`${b*1.15}px`,iconSize:k,iconMarginInlineEnd:I-k,collapsedIconSize:E,groupTitleFontSize:k,darkItemDisabledColor:new Tt(y).setA(.25).toRgbString(),darkItemColor:w,darkDangerItemColor:l,darkItemBg:"#001529",darkPopupBg:"#001529",darkSubMenuItemBg:"#000c17",darkItemSelectedColor:y,darkItemSelectedBg:r,darkDangerItemSelectedBg:l,darkItemHoverBg:"transparent",darkGroupTitleColor:w,darkItemHoverColor:y,darkDangerItemHoverColor:T,darkDangerItemSelectedColor:y,darkDangerItemActiveBg:l,itemWidth:O?`calc(100% + ${M}px)`:`calc(100% - ${B*2}px)`}},Gi=(e,t=e,o=!0)=>Lt("Menu",r=>{const{colorBgElevated:l,controlHeightLG:s,fontSize:i,darkItemColor:c,darkDangerItemColor:d,darkItemBg:m,darkSubMenuItemBg:u,darkItemSelectedColor:p,darkItemSelectedBg:f,darkDangerItemSelectedBg:g,darkItemHoverBg:h,darkGroupTitleColor:v,darkItemHoverColor:b,darkItemDisabledColor:$,darkDangerItemHoverColor:C,darkDangerItemSelectedColor:x,darkDangerItemActiveBg:S,popupBg:k,darkPopupBg:I}=r,E=r.calc(i).div(7).mul(5).equal(),y=wt(r,{menuArrowSize:E,menuHorizontalHeight:r.calc(s).mul(1.15).equal(),menuArrowOffset:r.calc(E).mul(.25).equal(),menuSubMenuBg:l,calc:r.calc,popupBg:k}),T=wt(y,{itemColor:c,itemHoverColor:b,groupTitleColor:v,itemSelectedColor:p,subMenuItemSelectedColor:p,itemBg:m,popupBg:I,subMenuItemBg:u,itemActiveBg:"transparent",itemSelectedBg:f,activeBarHeight:0,activeBarBorderWidth:0,itemHoverBg:h,itemDisabledColor:$,dangerItemColor:d,dangerItemHoverColor:C,dangerItemSelectedColor:x,dangerItemActiveBg:S,dangerItemSelectedBg:g,menuSubMenuBg:u,horizontalItemSelectedColor:p,horizontalItemSelectedBg:f});return[qi(y),Ai(y),Vi(y),ir(y,"light"),ir(T,"dark"),Wi(y),$o(y),Sn(y,"slide-up"),Sn(y,"slide-down"),Ur(y,"zoom-big")]},Xi,{deprecatedTokens:[["colorGroupTitle","groupTitleColor"],["radiusItem","itemBorderRadius"],["radiusSubMenuItem","subMenuItemBorderRadius"],["colorItemText","itemColor"],["colorItemTextHover","itemHoverColor"],["colorItemTextHoverHorizontal","horizontalItemHoverColor"],["colorItemTextSelected","itemSelectedColor"],["colorItemTextSelectedHorizontal","horizontalItemSelectedColor"],["colorItemTextDisabled","itemDisabledColor"],["colorDangerItemText","dangerItemColor"],["colorDangerItemTextHover","dangerItemHoverColor"],["colorDangerItemTextSelected","dangerItemSelectedColor"],["colorDangerItemBgActive","dangerItemActiveBg"],["colorDangerItemBgSelected","dangerItemSelectedBg"],["colorItemBg","itemBg"],["colorItemBgHover","itemHoverBg"],["colorSubItemBg","subMenuItemBg"],["colorItemBgActive","itemActiveBg"],["colorItemBgSelectedHorizontal","horizontalItemSelectedBg"],["colorActiveBarWidth","activeBarWidth"],["colorActiveBarHeight","activeBarHeight"],["colorActiveBarBorderSize","activeBarBorderWidth"],["colorItemBgSelected","itemSelectedBg"]],injectStyle:o,unitless:{groupTitleLineHeight:!0}})(e,t),pa=e=>{var t;const{popupClassName:o,icon:n,title:r,theme:l}=e,s=a.useContext(En),{prefixCls:i,inlineCollapsed:c,theme:d}=s,m=El();let u;if(!n)u=c&&!m.length&&r&&typeof r=="string"?a.createElement("div",{className:`${i}-inline-collapsed-noicon`},r.charAt(0)):a.createElement("span",{className:`${i}-title-content`},r);else{const g=a.isValidElement(r)&&r.type==="span";u=a.createElement(a.Fragment,null,Mt(n,{className:Y(a.isValidElement(n)?(t=n.props)===null||t===void 0?void 0:t.className:void 0,`${i}-item-icon`)}),g?r:a.createElement("span",{className:`${i}-title-content`},r))}const p=a.useMemo(()=>Object.assign(Object.assign({},s),{firstLevel:!1}),[s]),[f]=Yr("Menu");return a.createElement(En.Provider,{value:p},a.createElement(Il,Object.assign({},It(e,["icon"]),{title:u,popupClassName:Y(i,o,`${i}-${l||d}`),popupStyle:Object.assign({zIndex:f},e.popupStyle)})))};var Ui=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{var o;const n=a.useContext(In),r=n||{},{getPrefixCls:l,getPopupContainer:s,direction:i,menu:c}=a.useContext(Ue),d=l(),{prefixCls:m,className:u,style:p,theme:f="light",expandIcon:g,_internalDisableMenuItemTitleTooltip:h,inlineCollapsed:v,siderCollapsed:b,rootClassName:$,mode:C,selectable:x,onClick:S,overflowedIndicatorPopupClassName:k}=e,I=Ui(e,["prefixCls","className","style","theme","expandIcon","_internalDisableMenuItemTitleTooltip","inlineCollapsed","siderCollapsed","rootClassName","mode","selectable","onClick","overflowedIndicatorPopupClassName"]),E=It(I,["collapsedWidth"]);(o=r.validator)===null||o===void 0||o.call(r,{mode:C});const y=ct((...q)=>{var L;S==null||S.apply(void 0,q),(L=r.onClick)===null||L===void 0||L.call(r)}),T=r.mode||C,O=x??r.selectable,M=v??b,B={horizontal:{motionName:`${d}-slide-up`},inline:$n(d),other:{motionName:`${d}-zoom-big`}},w=l("menu",m||r.prefixCls),N=pt(w),[R,P,K]=Gi(w,N,!n),D=Y(`${w}-${f}`,c==null?void 0:c.className,u),F=a.useMemo(()=>{var q,L;if(typeof g=="function"||Gn(g))return g||null;if(typeof r.expandIcon=="function"||Gn(r.expandIcon))return r.expandIcon||null;if(typeof(c==null?void 0:c.expandIcon)=="function"||Gn(c==null?void 0:c.expandIcon))return(c==null?void 0:c.expandIcon)||null;const se=(q=g??(r==null?void 0:r.expandIcon))!==null&&q!==void 0?q:c==null?void 0:c.expandIcon;return Mt(se,{className:Y(`${w}-submenu-expand-icon`,a.isValidElement(se)?(L=se.props)===null||L===void 0?void 0:L.className:void 0)})},[g,r==null?void 0:r.expandIcon,c==null?void 0:c.expandIcon,w]),A=a.useMemo(()=>({prefixCls:w,inlineCollapsed:M||!1,direction:i,firstLevel:!0,theme:f,mode:T,disableMenuItemTitleTooltip:h}),[w,M,i,h,f]);return R(a.createElement(In.Provider,{value:null},a.createElement(En.Provider,{value:A},a.createElement(Nl,Object.assign({getPopupContainer:s,overflowedIndicator:a.createElement(Qr,null),overflowedIndicatorPopupClassName:Y(w,`${w}-${f}`,k),mode:T,selectable:O,onClick:y},E,{inlineCollapsed:M,style:Object.assign(Object.assign({},c==null?void 0:c.style),p),className:D,prefixCls:w,direction:i,defaultMotions:B,expandIcon:F,ref:t,rootClassName:Y($,P,r.rootClassName,K,N),_internalComponents:Yi})))))}),Vt=a.forwardRef((e,t)=>{const o=a.useRef(null),n=a.useContext(qr);return a.useImperativeHandle(t,()=>({menu:o.current,focus:r=>{var l;(l=o.current)===null||l===void 0||l.focus(r)}})),a.createElement(Qi,Object.assign({ref:o},e,n))});Vt.Item=fa;Vt.SubMenu=pa;Vt.Divider=ua;Vt.ItemGroup=Ol;const Zi=e=>{const{componentCls:t,menuCls:o,colorError:n,colorTextLightSolid:r}=e,l=`${o}-item`;return{[`${t}, ${t}-menu-submenu`]:{[`${o} ${l}`]:{[`&${l}-danger:not(${l}-disabled)`]:{color:n,"&:hover":{color:r,backgroundColor:n}}}}}},Ji=e=>{const{componentCls:t,menuCls:o,zIndexPopup:n,dropdownArrowDistance:r,sizePopupArrow:l,antCls:s,iconCls:i,motionDurationMid:c,paddingBlock:d,fontSize:m,dropdownEdgeChildPadding:u,colorTextDisabled:p,fontSizeIcon:f,controlPaddingHorizontal:g,colorBgElevated:h}=e;return[{[t]:{position:"absolute",top:-9999,left:{_skip_check_:!0,value:-9999},zIndex:n,display:"block","&::before":{position:"absolute",insetBlock:e.calc(l).div(2).sub(r).equal(),zIndex:-9999,opacity:1e-4,content:'""'},"&-menu-vertical":{maxHeight:"100vh",overflowY:"auto"},[`&-trigger${s}-btn`]:{[`& > ${i}-down, & > ${s}-btn-icon > ${i}-down`]:{fontSize:f}},[`${t}-wrap`]:{position:"relative",[`${s}-btn > ${i}-down`]:{fontSize:f},[`${i}-down::before`]:{transition:`transform ${c}`}},[`${t}-wrap-open`]:{[`${i}-down::before`]:{transform:"rotate(180deg)"}},"\n &-hidden,\n &-menu-hidden,\n &-menu-submenu-hidden\n ":{display:"none"},[`&${s}-slide-down-enter${s}-slide-down-enter-active${t}-placement-bottomLeft, + &${s}-slide-down-appear${s}-slide-down-appear-active${t}-placement-bottomLeft, + &${s}-slide-down-enter${s}-slide-down-enter-active${t}-placement-bottom, + &${s}-slide-down-appear${s}-slide-down-appear-active${t}-placement-bottom, + &${s}-slide-down-enter${s}-slide-down-enter-active${t}-placement-bottomRight, + &${s}-slide-down-appear${s}-slide-down-appear-active${t}-placement-bottomRight`]:{animationName:Tl},[`&${s}-slide-up-enter${s}-slide-up-enter-active${t}-placement-topLeft, + &${s}-slide-up-appear${s}-slide-up-appear-active${t}-placement-topLeft, + &${s}-slide-up-enter${s}-slide-up-enter-active${t}-placement-top, + &${s}-slide-up-appear${s}-slide-up-appear-active${t}-placement-top, + &${s}-slide-up-enter${s}-slide-up-enter-active${t}-placement-topRight, + &${s}-slide-up-appear${s}-slide-up-appear-active${t}-placement-topRight`]:{animationName:Pl},[`&${s}-slide-down-leave${s}-slide-down-leave-active${t}-placement-bottomLeft, + &${s}-slide-down-leave${s}-slide-down-leave-active${t}-placement-bottom, + &${s}-slide-down-leave${s}-slide-down-leave-active${t}-placement-bottomRight`]:{animationName:kl},[`&${s}-slide-up-leave${s}-slide-up-leave-active${t}-placement-topLeft, + &${s}-slide-up-leave${s}-slide-up-leave-active${t}-placement-top, + &${s}-slide-up-leave${s}-slide-up-leave-active${t}-placement-topRight`]:{animationName:Rl}}},Bl(e,h,{arrowPlacement:{top:!0,bottom:!0}}),{[`${t} ${o}`]:{position:"relative",margin:0},[`${o}-submenu-popup`]:{position:"absolute",zIndex:n,background:"transparent",boxShadow:"none",transformOrigin:"0 0","ul, li":{listStyle:"none",margin:0}},[`${t}, ${t}-menu-submenu`]:Object.assign(Object.assign({},nt(e)),{[o]:Object.assign(Object.assign({padding:u,listStyleType:"none",backgroundColor:h,backgroundClip:"padding-box",borderRadius:e.borderRadiusLG,outline:"none",boxShadow:e.boxShadowSecondary},Yo(e)),{"&:empty":{padding:0,boxShadow:"none"},[`${o}-item-group-title`]:{padding:`${j(d)} ${j(g)}`,color:e.colorTextDescription,transition:`all ${c}`},[`${o}-item`]:{position:"relative",display:"flex",alignItems:"center"},[`${o}-item-icon`]:{minWidth:m,marginInlineEnd:e.marginXS,fontSize:e.fontSizeSM},[`${o}-title-content`]:{flex:"auto","&-with-extra":{display:"inline-flex",alignItems:"center",width:"100%"},"> a":{color:"inherit",transition:`all ${c}`,"&:hover":{color:"inherit"},"&::after":{position:"absolute",inset:0,content:'""'}},[`${o}-item-extra`]:{paddingInlineStart:e.padding,marginInlineStart:"auto",fontSize:e.fontSizeSM,color:e.colorTextDescription}},[`${o}-item, ${o}-submenu-title`]:Object.assign(Object.assign({display:"flex",margin:0,padding:`${j(d)} ${j(g)}`,color:e.colorText,fontWeight:"normal",fontSize:m,lineHeight:e.lineHeight,cursor:"pointer",transition:`all ${c}`,borderRadius:e.borderRadiusSM,"&:hover, &-active":{backgroundColor:e.controlItemBgHover}},Yo(e)),{"&-selected":{color:e.colorPrimary,backgroundColor:e.controlItemBgActive,"&:hover, &-active":{backgroundColor:e.controlItemBgActiveHover}},"&-disabled":{color:p,cursor:"not-allowed","&:hover":{color:p,backgroundColor:h,cursor:"not-allowed"},a:{pointerEvents:"none"}},"&-divider":{height:1,margin:`${j(e.marginXXS)} 0`,overflow:"hidden",lineHeight:0,backgroundColor:e.colorSplit},[`${t}-menu-submenu-expand-icon`]:{position:"absolute",insetInlineEnd:e.paddingXS,[`${t}-menu-submenu-arrow-icon`]:{marginInlineEnd:"0 !important",color:e.colorIcon,fontSize:f,fontStyle:"normal"}}}),[`${o}-item-group-list`]:{margin:`0 ${j(e.marginXS)}`,padding:0,listStyle:"none"},[`${o}-submenu-title`]:{paddingInlineEnd:e.calc(g).add(e.fontSizeSM).equal()},[`${o}-submenu-vertical`]:{position:"relative"},[`${o}-submenu${o}-submenu-disabled ${t}-menu-submenu-title`]:{[`&, ${t}-menu-submenu-arrow-icon`]:{color:p,backgroundColor:h,cursor:"not-allowed"}},[`${o}-submenu-selected ${t}-menu-submenu-title`]:{color:e.colorPrimary}})})},[Sn(e,"slide-up"),Sn(e,"slide-down"),Qo(e,"move-up"),Qo(e,"move-down"),Ur(e,"zoom-big")]]},es=e=>Object.assign(Object.assign({zIndexPopup:e.zIndexPopupBase+50,paddingBlock:(e.controlHeight-e.fontSize*e.lineHeight)/2},Ml({contentRadius:e.borderRadiusLG,limitVerticalRadius:!0})),Dl(e)),ts=Lt("Dropdown",e=>{const{marginXXS:t,sizePopupArrow:o,paddingXXS:n,componentCls:r}=e,l=wt(e,{menuCls:`${r}-menu`,dropdownArrowDistance:e.calc(o).div(2).add(t).equal(),dropdownEdgeChildPadding:n});return[Ji(l),Zi(l)]},es,{resetStyle:!1}),Mn=e=>{var t;const{menu:o,arrow:n,prefixCls:r,children:l,trigger:s,disabled:i,dropdownRender:c,popupRender:d,getPopupContainer:m,overlayClassName:u,rootClassName:p,overlayStyle:f,open:g,onOpenChange:h,visible:v,onVisibleChange:b,mouseEnterDelay:$=.15,mouseLeaveDelay:C=.1,autoAdjustOverflow:x=!0,placement:S="",overlay:k,transitionName:I,destroyOnHidden:E,destroyPopupOnHide:y}=e,{getPopupContainer:T,getPrefixCls:O,direction:M,dropdown:B}=a.useContext(Ue),w=d||c;cn();const N=a.useMemo(()=>{const le=O();return I!==void 0?I:S.includes("top")?`${le}-slide-down`:`${le}-slide-up`},[O,S,I]),R=a.useMemo(()=>S?S.includes("Center")?S.slice(0,S.indexOf("Center")):S:M==="rtl"?"bottomRight":"bottomLeft",[S,M]),P=O("dropdown",r),K=pt(P),[D,F,A]=ts(P,K),[,q]=bo(),L=a.Children.only(Hi(l)?a.createElement("span",null,l):l),se=Mt(L,{className:Y(`${P}-trigger`,{[`${P}-rtl`]:M==="rtl"},L.props.className),disabled:(t=L.props.disabled)!==null&&t!==void 0?t:i}),ce=i?[]:s,ie=!!(ce!=null&&ce.includes("contextMenu")),[Q,Z]=Pn(!1,{value:g??v}),V=ct(le=>{h==null||h(le,{source:"trigger"}),b==null||b(le),Z(le)}),te=Y(u,p,F,A,K,B==null?void 0:B.className,{[`${P}-rtl`]:M==="rtl"}),ne=Kl({arrowPointAtCenter:typeof n=="object"&&n.pointAtCenter,autoAdjustOverflow:x,offset:q.marginXXS,arrowWidth:n?q.sizePopupArrow:0,borderRadius:q.borderRadius}),X=ct(()=>{o!=null&&o.selectable&&(o!=null&&o.multiple)||(h==null||h(!1,{source:"menu"}),Z(!1))}),J=()=>{let le;return o!=null&&o.items?le=a.createElement(Vt,Object.assign({},o)):typeof k=="function"?le=k():le=k,w&&(le=w(le)),le=a.Children.only(typeof le=="string"?a.createElement("span",null,le):le),a.createElement(ma,{prefixCls:`${P}-menu`,rootClassName:Y(A,K),expandIcon:a.createElement("span",{className:`${P}-menu-submenu-arrow`},M==="rtl"?a.createElement(jl,{className:`${P}-menu-submenu-arrow-icon`}):a.createElement(Hl,{className:`${P}-menu-submenu-arrow-icon`})),mode:"vertical",selectable:!1,onClick:X,validator:({mode:ue})=>{}},le)},[W,H]=Yr("Dropdown",f==null?void 0:f.zIndex);let ee=a.createElement(Ll,Object.assign({alignPoint:ie},It(e,["rootClassName"]),{mouseEnterDelay:$,mouseLeaveDelay:C,visible:Q,builtinPlacements:ne,arrow:!!n,overlayClassName:te,prefixCls:P,getPopupContainer:m||T,transitionName:N,trigger:ce,overlay:J,placement:R,onVisibleChange:V,overlayStyle:Object.assign(Object.assign(Object.assign({},B==null?void 0:B.style),f),{zIndex:W}),autoDestroy:E??y}),se);return W&&(ee=a.createElement(_l.Provider,{value:H},ee)),D(ee)},ns=zl(Mn,"align",void 0,"dropdown",e=>e),os=e=>a.createElement(ns,Object.assign({},e),a.createElement("span",null));Mn._InternalPanelDoNotUseOrYouWillBeFired=os;const ga=a.createContext(null),rs=ga.Provider,va=a.createContext(null),as=va.Provider;var ls=["prefixCls","className","style","checked","disabled","defaultChecked","type","title","onChange"],ha=a.forwardRef(function(e,t){var o=e.prefixCls,n=o===void 0?"rc-checkbox":o,r=e.className,l=e.style,s=e.checked,i=e.disabled,c=e.defaultChecked,d=c===void 0?!1:c,m=e.type,u=m===void 0?"checkbox":m,p=e.title,f=e.onChange,g=lt(e,ls),h=a.useRef(null),v=a.useRef(null),b=Pn(d,{value:s}),$=Ie(b,2),C=$[0],x=$[1];a.useImperativeHandle(t,function(){return{focus:function(E){var y;(y=h.current)===null||y===void 0||y.focus(E)},blur:function(){var E;(E=h.current)===null||E===void 0||E.blur()},input:h.current,nativeElement:v.current}});var S=Y(n,r,_(_({},"".concat(n,"-checked"),C),"".concat(n,"-disabled"),i)),k=function(E){i||("checked"in e||x(E.target.checked),f==null||f({target:U(U({},e),{},{type:u,checked:E.target.checked}),stopPropagation:function(){E.stopPropagation()},preventDefault:function(){E.preventDefault()},nativeEvent:E.nativeEvent}))};return a.createElement("span",{className:S,title:p,style:l,ref:v},a.createElement("input",Ce({},g,{className:"".concat(n,"-input"),ref:h,onChange:k,disabled:i,checked:!!C,type:u})),a.createElement("span",{className:"".concat(n,"-inner")}))});function ba(e){const t=he.useRef(null),o=()=>{ht.cancel(t.current),t.current=null};return[()=>{o(),t.current=ht(()=>{t.current=null})},l=>{t.current&&(l.stopPropagation(),o()),e==null||e(l)}]}const is=e=>{const{componentCls:t,antCls:o}=e,n=`${t}-group`;return{[n]:Object.assign(Object.assign({},nt(e)),{display:"inline-block",fontSize:0,[`&${n}-rtl`]:{direction:"rtl"},[`&${n}-block`]:{display:"flex"},[`${o}-badge ${o}-badge-count`]:{zIndex:1},[`> ${o}-badge:not(:first-child) > ${o}-button-wrapper`]:{borderInlineStart:"none"}})}},ss=e=>{const{componentCls:t,wrapperMarginInlineEnd:o,colorPrimary:n,radioSize:r,motionDurationSlow:l,motionDurationMid:s,motionEaseInOutCirc:i,colorBgContainer:c,colorBorder:d,lineWidth:m,colorBgContainerDisabled:u,colorTextDisabled:p,paddingXS:f,dotColorDisabled:g,lineType:h,radioColor:v,radioBgColor:b,calc:$}=e,C=`${t}-inner`,S=$(r).sub($(4).mul(2)),k=$(1).mul(r).equal({unit:!0});return{[`${t}-wrapper`]:Object.assign(Object.assign({},nt(e)),{display:"inline-flex",alignItems:"baseline",marginInlineStart:0,marginInlineEnd:o,cursor:"pointer","&:last-child":{marginInlineEnd:0},[`&${t}-wrapper-rtl`]:{direction:"rtl"},"&-disabled":{cursor:"not-allowed",color:e.colorTextDisabled},"&::after":{display:"inline-block",width:0,overflow:"hidden",content:'"\\a0"'},"&-block":{flex:1,justifyContent:"center"},[`${t}-checked::after`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,width:"100%",height:"100%",border:`${j(m)} ${h} ${n}`,borderRadius:"50%",visibility:"hidden",opacity:0,content:'""'},[t]:Object.assign(Object.assign({},nt(e)),{position:"relative",display:"inline-block",outline:"none",cursor:"pointer",alignSelf:"center",borderRadius:"50%"}),[`${t}-wrapper:hover &, + &:hover ${C}`]:{borderColor:n},[`${t}-input:focus-visible + ${C}`]:sn(e),[`${t}:hover::after, ${t}-wrapper:hover &::after`]:{visibility:"visible"},[`${t}-inner`]:{"&::after":{boxSizing:"border-box",position:"absolute",insetBlockStart:"50%",insetInlineStart:"50%",display:"block",width:k,height:k,marginBlockStart:$(1).mul(r).div(-2).equal({unit:!0}),marginInlineStart:$(1).mul(r).div(-2).equal({unit:!0}),backgroundColor:v,borderBlockStart:0,borderInlineStart:0,borderRadius:k,transform:"scale(0)",opacity:0,transition:`all ${l} ${i}`,content:'""'},boxSizing:"border-box",position:"relative",insetBlockStart:0,insetInlineStart:0,display:"block",width:k,height:k,backgroundColor:c,borderColor:d,borderStyle:"solid",borderWidth:m,borderRadius:"50%",transition:`all ${s}`},[`${t}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0},[`${t}-checked`]:{[C]:{borderColor:n,backgroundColor:b,"&::after":{transform:`scale(${e.calc(e.dotSize).div(r).equal()})`,opacity:1,transition:`all ${l} ${i}`}}},[`${t}-disabled`]:{cursor:"not-allowed",[C]:{backgroundColor:u,borderColor:d,cursor:"not-allowed","&::after":{backgroundColor:g}},[`${t}-input`]:{cursor:"not-allowed"},[`${t}-disabled + span`]:{color:p,cursor:"not-allowed"},[`&${t}-checked`]:{[C]:{"&::after":{transform:`scale(${$(S).div(r).equal()})`}}}},[`span${t} + *`]:{paddingInlineStart:f,paddingInlineEnd:f}})}},cs=e=>{const{buttonColor:t,controlHeight:o,componentCls:n,lineWidth:r,lineType:l,colorBorder:s,motionDurationMid:i,buttonPaddingInline:c,fontSize:d,buttonBg:m,fontSizeLG:u,controlHeightLG:p,controlHeightSM:f,paddingXS:g,borderRadius:h,borderRadiusSM:v,borderRadiusLG:b,buttonCheckedBg:$,buttonSolidCheckedColor:C,colorTextDisabled:x,colorBgContainerDisabled:S,buttonCheckedBgDisabled:k,buttonCheckedColorDisabled:I,colorPrimary:E,colorPrimaryHover:y,colorPrimaryActive:T,buttonSolidCheckedBg:O,buttonSolidCheckedHoverBg:M,buttonSolidCheckedActiveBg:B,calc:w}=e;return{[`${n}-button-wrapper`]:{position:"relative",display:"inline-block",height:o,margin:0,paddingInline:c,paddingBlock:0,color:t,fontSize:d,lineHeight:j(w(o).sub(w(r).mul(2)).equal()),background:m,border:`${j(r)} ${l} ${s}`,borderBlockStartWidth:w(r).add(.02).equal(),borderInlineEndWidth:r,cursor:"pointer",transition:[`color ${i}`,`background ${i}`,`box-shadow ${i}`].join(","),a:{color:t},[`> ${n}-button`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,zIndex:-1,width:"100%",height:"100%"},"&:not(:last-child)":{marginInlineEnd:w(r).mul(-1).equal()},"&:first-child":{borderInlineStart:`${j(r)} ${l} ${s}`,borderStartStartRadius:h,borderEndStartRadius:h},"&:last-child":{borderStartEndRadius:h,borderEndEndRadius:h},"&:first-child:last-child":{borderRadius:h},[`${n}-group-large &`]:{height:p,fontSize:u,lineHeight:j(w(p).sub(w(r).mul(2)).equal()),"&:first-child":{borderStartStartRadius:b,borderEndStartRadius:b},"&:last-child":{borderStartEndRadius:b,borderEndEndRadius:b}},[`${n}-group-small &`]:{height:f,paddingInline:w(g).sub(r).equal(),paddingBlock:0,lineHeight:j(w(f).sub(w(r).mul(2)).equal()),"&:first-child":{borderStartStartRadius:v,borderEndStartRadius:v},"&:last-child":{borderStartEndRadius:v,borderEndEndRadius:v}},"&:hover":{position:"relative",color:E},"&:has(:focus-visible)":sn(e),[`${n}-inner, input[type='checkbox'], input[type='radio']`]:{width:0,height:0,opacity:0,pointerEvents:"none"},[`&-checked:not(${n}-button-wrapper-disabled)`]:{zIndex:1,color:E,background:$,borderColor:E,"&::before":{backgroundColor:E},"&:first-child":{borderColor:E},"&:hover":{color:y,borderColor:y,"&::before":{backgroundColor:y}},"&:active":{color:T,borderColor:T,"&::before":{backgroundColor:T}}},[`${n}-group-solid &-checked:not(${n}-button-wrapper-disabled)`]:{color:C,background:O,borderColor:O,"&:hover":{color:C,background:M,borderColor:M},"&:active":{color:C,background:B,borderColor:B}},"&-disabled":{color:x,backgroundColor:S,borderColor:s,cursor:"not-allowed","&:first-child, &:hover":{color:x,backgroundColor:S,borderColor:s}},[`&-disabled${n}-button-wrapper-checked`]:{color:I,backgroundColor:k,borderColor:s,boxShadow:"none"},"&-block":{flex:1,textAlign:"center"}}}},ds=e=>{const{wireframe:t,padding:o,marginXS:n,lineWidth:r,fontSizeLG:l,colorText:s,colorBgContainer:i,colorTextDisabled:c,controlItemBgActiveDisabled:d,colorTextLightSolid:m,colorPrimary:u,colorPrimaryHover:p,colorPrimaryActive:f,colorWhite:g}=e,h=4,v=l,b=t?v-h*2:v-(h+r)*2;return{radioSize:v,dotSize:b,dotColorDisabled:c,buttonSolidCheckedColor:m,buttonSolidCheckedBg:u,buttonSolidCheckedHoverBg:p,buttonSolidCheckedActiveBg:f,buttonBg:i,buttonCheckedBg:i,buttonColor:s,buttonCheckedBgDisabled:d,buttonCheckedColorDisabled:c,buttonPaddingInline:o-r,wrapperMarginInlineEnd:n,radioColor:t?u:g,radioBgColor:t?i:u}},ya=Lt("Radio",e=>{const{controlOutline:t,controlOutlineWidth:o}=e,n=`0 0 0 ${j(o)} ${t}`,l=wt(e,{radioFocusShadow:n,radioButtonFocusShadow:n});return[is(l),ss(l),cs(l)]},ds,{unitless:{radioSize:!0,dotSize:!0}});var us=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{var o,n;const r=a.useContext(ga),l=a.useContext(va),{getPrefixCls:s,direction:i,radio:c}=a.useContext(Ue),d=a.useRef(null),m=yo(t,d),{isFormItemInput:u}=a.useContext(Dt),p=R=>{var P,K;(P=e.onChange)===null||P===void 0||P.call(e,R),(K=r==null?void 0:r.onChange)===null||K===void 0||K.call(r,R)},{prefixCls:f,className:g,rootClassName:h,children:v,style:b,title:$}=e,C=us(e,["prefixCls","className","rootClassName","children","style","title"]),x=s("radio",f),S=((r==null?void 0:r.optionType)||l)==="button",k=S?`${x}-button`:x,I=pt(x),[E,y,T]=ya(x,I),O=Object.assign({},C),M=a.useContext(Tn);r&&(O.name=r.name,O.onChange=p,O.checked=e.value===r.value,O.disabled=(o=O.disabled)!==null&&o!==void 0?o:r.disabled),O.disabled=(n=O.disabled)!==null&&n!==void 0?n:M;const B=Y(`${k}-wrapper`,{[`${k}-wrapper-checked`]:O.checked,[`${k}-wrapper-disabled`]:O.disabled,[`${k}-wrapper-rtl`]:i==="rtl",[`${k}-wrapper-in-form-item`]:u,[`${k}-wrapper-block`]:!!(r!=null&&r.block)},c==null?void 0:c.className,g,h,y,T,I),[w,N]=ba(O.onClick);return E(a.createElement(Zr,{component:"Radio",disabled:O.disabled},a.createElement("label",{className:B,style:Object.assign(Object.assign({},c==null?void 0:c.style),b),onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,title:$,onClick:w},a.createElement(ha,Object.assign({},O,{className:Y(O.className,{[Jr]:!S}),type:"radio",prefixCls:k,ref:m,onClick:N})),v!==void 0?a.createElement("span",{className:`${k}-label`},v):null)))},Nn=a.forwardRef(fs),ms=["parentNode"],ps="form_item";function en(e){return e===void 0||e===!1?[]:Array.isArray(e)?e:[e]}function Ca(e,t){if(!e.length)return;const o=e.join("_");return t?`${t}_${o}`:ms.includes(o)?`${ps}_${o}`:o}function xa(e,t,o,n,r,l){let s=n;return l!==void 0?s=l:o.validating?s="validating":e.length?s="error":t.length?s="warning":(o.touched||r&&o.validated)&&(s="success"),s}var gs=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);re??Object.assign(Object.assign({},t),{__INTERNAL__:{itemRef:r=>l=>{const s=ao(r);l?o.current[s]=l:delete o.current[s]}},scrollToField:(r,l={})=>{const{focus:s}=l,i=gs(l,["focus"]),c=ur(r,n);c&&(Ti(c,Object.assign({scrollMode:"if-needed",block:"nearest"},i)),s&&n.focusField(r))},focusField:r=>{var l,s;const i=n.getFieldInstance(r);typeof(i==null?void 0:i.focus)=="function"?i.focus():(s=(l=ur(r,n))===null||l===void 0?void 0:l.focus)===null||s===void 0||s.call(l)},getFieldInstance:r=>{const l=ao(r);return o.current[l]}}),[e,t]);return[n]}const vs=a.forwardRef((e,t)=>{const{getPrefixCls:o,direction:n}=a.useContext(Ue),{name:r}=a.useContext(Dt),l=Al(ao(r)),{prefixCls:s,className:i,rootClassName:c,options:d,buttonStyle:m="outline",disabled:u,children:p,size:f,style:g,id:h,optionType:v,name:b=l,defaultValue:$,value:C,block:x=!1,onChange:S,onMouseEnter:k,onMouseLeave:I,onFocus:E,onBlur:y}=e,[T,O]=Pn($,{value:C}),M=a.useCallback(L=>{const se=T,ce=L.target.value;"value"in e||O(ce),ce!==se&&(S==null||S(L))},[T,O,S]),B=o("radio",s),w=`${B}-group`,N=pt(B),[R,P,K]=ya(B,N);let D=p;d&&d.length>0&&(D=d.map(L=>typeof L=="string"||typeof L=="number"?a.createElement(Nn,{key:L.toString(),prefixCls:B,disabled:u,value:L,checked:T===L},L):a.createElement(Nn,{key:`radio-group-value-options-${L.value}`,prefixCls:B,disabled:L.disabled||u,value:L.value,checked:T===L.value,title:L.title,style:L.style,className:L.className,id:L.id,required:L.required},L.label)));const F=Co(f),A=Y(w,`${w}-${m}`,{[`${w}-${F}`]:F,[`${w}-rtl`]:n==="rtl",[`${w}-block`]:x},i,c,P,K,N),q=a.useMemo(()=>({onChange:M,value:T,disabled:u,name:b,optionType:v,block:x}),[M,T,u,b,v,x]);return R(a.createElement("div",Object.assign({},on(e,{aria:!0,data:!0}),{className:A,style:g,onMouseEnter:k,onMouseLeave:I,onFocus:E,onBlur:y,id:h,ref:t}),a.createElement(rs,{value:q},D)))}),hs=a.memo(vs);var bs=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const{getPrefixCls:o}=a.useContext(Ue),{prefixCls:n}=e,r=bs(e,["prefixCls"]),l=o("radio",n);return a.createElement(as,{value:"button"},a.createElement(Nn,Object.assign({prefixCls:l},r,{type:"radio",ref:t})))},Cs=a.forwardRef(ys),dn=Nn;dn.Button=Cs;dn.Group=hs;dn.__ANT_RADIO=!0;function Qe(e,t){return e[t]}var xs=["children"];function $a(e,t){return"".concat(e,"-").concat(t)}function Ss(e){return e&&e.type&&e.type.isTreeNode}function un(e,t){return e??t}function At(e){var t=e||{},o=t.title,n=t._title,r=t.key,l=t.children,s=o||"title";return{title:s,_title:n||[s],key:r||"key",children:l||"children"}}function wa(e){function t(o){var n=kn(o);return n.map(function(r){if(!Ss(r))return $t(!r,"Tree/TreeNode can only accept TreeNode as children."),null;var l=r.key,s=r.props,i=s.children,c=lt(s,xs),d=U({key:l},c),m=t(i);return m.length&&(d.children=m),d}).filter(function(r){return r})}return t(e)}function Un(e,t,o){var n=At(o),r=n._title,l=n.key,s=n.children,i=new Set(t===!0?[]:t),c=[];function d(m){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return m.map(function(p,f){for(var g=$a(u?u.pos:"0",f),h=un(p[l],g),v,b=0;b1&&arguments[1]!==void 0?arguments[1]:{},o=t.initWrapper,n=t.processEntity,r=t.onProcessFinished,l=t.externalGetKey,s=t.childrenPropName,i=t.fieldNames,c=arguments.length>2?arguments[2]:void 0,d=l||c,m={},u={},p={posEntities:m,keyEntities:u};return o&&(p=o(p)||p),$s(e,function(f){var g=f.node,h=f.index,v=f.pos,b=f.key,$=f.parentPos,C=f.level,x=f.nodes,S={node:g,nodes:x,index:h,key:b,pos:v,level:C},k=un(b,v);m[v]=S,u[k]=S,S.parent=m[$],S.parent&&(S.parent.children=S.parent.children||[],S.parent.children.push(S)),n&&n(S,p)},{externalGetKey:d,childrenPropName:s,fieldNames:i}),r&&r(p),p}function tn(e,t){var o=t.expandedKeys,n=t.selectedKeys,r=t.loadedKeys,l=t.loadingKeys,s=t.checkedKeys,i=t.halfCheckedKeys,c=t.dragOverNodeKey,d=t.dropPosition,m=t.keyEntities,u=Qe(m,e),p={eventKey:e,expanded:o.indexOf(e)!==-1,selected:n.indexOf(e)!==-1,loaded:r.indexOf(e)!==-1,loading:l.indexOf(e)!==-1,checked:s.indexOf(e)!==-1,halfChecked:i.indexOf(e)!==-1,pos:String(u?u.pos:""),dragOver:c===e&&d===0,dragOverGapTop:c===e&&d===-1,dragOverGapBottom:c===e&&d===1};return p}function _e(e){var t=e.data,o=e.expanded,n=e.selected,r=e.checked,l=e.loaded,s=e.loading,i=e.halfChecked,c=e.dragOver,d=e.dragOverGapTop,m=e.dragOverGapBottom,u=e.pos,p=e.active,f=e.eventKey,g=U(U({},t),{},{expanded:o,selected:n,checked:r,loaded:l,loading:s,halfChecked:i,dragOver:c,dragOverGapTop:d,dragOverGapBottom:m,pos:u,active:p,key:f});return"props"in g||Object.defineProperty(g,"props",{get:function(){return $t(!1,"Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`."),e}}),g}function Ea(e,t){var o=new Set;return e.forEach(function(n){t.has(n)||o.add(n)}),o}function ws(e){var t=e||{},o=t.disabled,n=t.disableCheckbox,r=t.checkable;return!!(o||n)||r===!1}function Es(e,t,o,n){for(var r=new Set(e),l=new Set,s=0;s<=o;s+=1){var i=t.get(s)||new Set;i.forEach(function(u){var p=u.key,f=u.node,g=u.children,h=g===void 0?[]:g;r.has(p)&&!n(f)&&h.filter(function(v){return!n(v.node)}).forEach(function(v){r.add(v.key)})})}for(var c=new Set,d=o;d>=0;d-=1){var m=t.get(d)||new Set;m.forEach(function(u){var p=u.parent,f=u.node;if(!(n(f)||!u.parent||c.has(u.parent.key))){if(n(u.parent.node)){c.add(p.key);return}var g=!0,h=!1;(p.children||[]).filter(function(v){return!n(v.node)}).forEach(function(v){var b=v.key,$=r.has(b);g&&!$&&(g=!1),!h&&($||l.has(b))&&(h=!0)}),g&&r.add(p.key),h&&l.add(p.key),c.add(p.key)}})}return{checkedKeys:Array.from(r),halfCheckedKeys:Array.from(Ea(l,r))}}function Is(e,t,o,n,r){for(var l=new Set(e),s=new Set(t),i=0;i<=n;i+=1){var c=o.get(i)||new Set;c.forEach(function(p){var f=p.key,g=p.node,h=p.children,v=h===void 0?[]:h;!l.has(f)&&!s.has(f)&&!r(g)&&v.filter(function(b){return!r(b.node)}).forEach(function(b){l.delete(b.key)})})}s=new Set;for(var d=new Set,m=n;m>=0;m-=1){var u=o.get(m)||new Set;u.forEach(function(p){var f=p.parent,g=p.node;if(!(r(g)||!p.parent||d.has(p.parent.key))){if(r(p.parent.node)){d.add(f.key);return}var h=!0,v=!1;(f.children||[]).filter(function(b){return!r(b.node)}).forEach(function(b){var $=b.key,C=l.has($);h&&!C&&(h=!1),!v&&(C||s.has($))&&(v=!0)}),h||l.delete(f.key),v&&s.add(f.key),d.add(f.key)}})}return{checkedKeys:Array.from(l),halfCheckedKeys:Array.from(Ea(s,l))}}function zt(e,t,o,n){var r=[],l;n?l=n:l=ws;var s=new Set(e.filter(function(m){var u=!!Qe(o,m);return u||r.push(m),u})),i=new Map,c=0;Object.keys(o).forEach(function(m){var u=o[m],p=u.level,f=i.get(p);f||(f=new Set,i.set(p,f)),f.add(u),c=Math.max(c,p)}),$t(!r.length,"Tree missing follow keys: ".concat(r.slice(0,100).map(function(m){return"'".concat(m,"'")}).join(", ")));var d;return t===!0?d=Es(s,i,c,l):d=Is(s,t.halfCheckedKeys,i,c,l),d}const Ns=e=>{const{checkboxCls:t}=e,o=`${t}-wrapper`;return[{[`${t}-group`]:Object.assign(Object.assign({},nt(e)),{display:"inline-flex",flexWrap:"wrap",columnGap:e.marginXS,[`> ${e.antCls}-row`]:{flex:1}}),[o]:Object.assign(Object.assign({},nt(e)),{display:"inline-flex",alignItems:"baseline",cursor:"pointer","&:after":{display:"inline-block",width:0,overflow:"hidden",content:"'\\a0'"},[`& + ${o}`]:{marginInlineStart:0},[`&${o}-in-form-item`]:{'input[type="checkbox"]':{width:14,height:14}}}),[t]:Object.assign(Object.assign({},nt(e)),{position:"relative",whiteSpace:"nowrap",lineHeight:1,cursor:"pointer",borderRadius:e.borderRadiusSM,alignSelf:"center",[`${t}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0,margin:0,[`&:focus-visible + ${t}-inner`]:sn(e)},[`${t}-inner`]:{boxSizing:"border-box",display:"block",width:e.checkboxSize,height:e.checkboxSize,direction:"ltr",backgroundColor:e.colorBgContainer,border:`${j(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,borderCollapse:"separate",transition:`all ${e.motionDurationSlow}`,"&:after":{boxSizing:"border-box",position:"absolute",top:"50%",insetInlineStart:"25%",display:"table",width:e.calc(e.checkboxSize).div(14).mul(5).equal(),height:e.calc(e.checkboxSize).div(14).mul(8).equal(),border:`${j(e.lineWidthBold)} solid ${e.colorWhite}`,borderTop:0,borderInlineStart:0,transform:"rotate(45deg) scale(0) translate(-50%,-50%)",opacity:0,content:'""',transition:`all ${e.motionDurationFast} ${e.motionEaseInBack}, opacity ${e.motionDurationFast}`}},"& + span":{paddingInlineStart:e.paddingXS,paddingInlineEnd:e.paddingXS}})},{[` + ${o}:not(${o}-disabled), + ${t}:not(${t}-disabled) + `]:{[`&:hover ${t}-inner`]:{borderColor:e.colorPrimary}},[`${o}:not(${o}-disabled)`]:{[`&:hover ${t}-checked:not(${t}-disabled) ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:"transparent"},[`&:hover ${t}-checked:not(${t}-disabled):after`]:{borderColor:e.colorPrimaryHover}}},{[`${t}-checked`]:{[`${t}-inner`]:{backgroundColor:e.colorPrimary,borderColor:e.colorPrimary,"&:after":{opacity:1,transform:"rotate(45deg) scale(1) translate(-50%,-50%)",transition:`all ${e.motionDurationMid} ${e.motionEaseOutBack} ${e.motionDurationFast}`}}},[` + ${o}-checked:not(${o}-disabled), + ${t}-checked:not(${t}-disabled) + `]:{[`&:hover ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:"transparent"}}},{[t]:{"&-indeterminate":{"&":{[`${t}-inner`]:{backgroundColor:`${e.colorBgContainer}`,borderColor:`${e.colorBorder}`,"&:after":{top:"50%",insetInlineStart:"50%",width:e.calc(e.fontSizeLG).div(2).equal(),height:e.calc(e.fontSizeLG).div(2).equal(),backgroundColor:e.colorPrimary,border:0,transform:"translate(-50%, -50%) scale(1)",opacity:1,content:'""'}},[`&:hover ${t}-inner`]:{backgroundColor:`${e.colorBgContainer}`,borderColor:`${e.colorPrimary}`}}}}},{[`${o}-disabled`]:{cursor:"not-allowed"},[`${t}-disabled`]:{[`&, ${t}-input`]:{cursor:"not-allowed",pointerEvents:"none"},[`${t}-inner`]:{background:e.colorBgContainerDisabled,borderColor:e.colorBorder,"&:after":{borderColor:e.colorTextDisabled}},"&:after":{display:"none"},"& + span":{color:e.colorTextDisabled},[`&${t}-indeterminate ${t}-inner::after`]:{background:e.colorTextDisabled}}}]};function Ia(e,t){const o=wt(t,{checkboxCls:`.${e}`,checkboxSize:t.controlInteractiveSize});return Ns(o)}const Na=Lt("Checkbox",(e,{prefixCls:t})=>[Ia(t,e)]),Oa=he.createContext(null);var Os=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{var o;const{prefixCls:n,className:r,rootClassName:l,children:s,indeterminate:i=!1,style:c,onMouseEnter:d,onMouseLeave:m,skipGroup:u=!1,disabled:p}=e,f=Os(e,["prefixCls","className","rootClassName","children","indeterminate","style","onMouseEnter","onMouseLeave","skipGroup","disabled"]),{getPrefixCls:g,direction:h,checkbox:v}=a.useContext(Ue),b=a.useContext(Oa),{isFormItemInput:$}=a.useContext(Dt),C=a.useContext(Tn),x=(o=(b==null?void 0:b.disabled)||p)!==null&&o!==void 0?o:C,S=a.useRef(f.value),k=a.useRef(null),I=yo(t,k);a.useEffect(()=>{b==null||b.registerValue(f.value)},[]),a.useEffect(()=>{if(!u)return f.value!==S.current&&(b==null||b.cancelValue(S.current),b==null||b.registerValue(f.value),S.current=f.value),()=>b==null?void 0:b.cancelValue(f.value)},[f.value]),a.useEffect(()=>{var K;!((K=k.current)===null||K===void 0)&&K.input&&(k.current.input.indeterminate=i)},[i]);const E=g("checkbox",n),y=pt(E),[T,O,M]=Na(E,y),B=Object.assign({},f);b&&!u&&(B.onChange=(...K)=>{f.onChange&&f.onChange.apply(f,K),b.toggleOption&&b.toggleOption({label:s,value:f.value})},B.name=b.name,B.checked=b.value.includes(f.value));const w=Y(`${E}-wrapper`,{[`${E}-rtl`]:h==="rtl",[`${E}-wrapper-checked`]:B.checked,[`${E}-wrapper-disabled`]:x,[`${E}-wrapper-in-form-item`]:$},v==null?void 0:v.className,r,l,M,y,O),N=Y({[`${E}-indeterminate`]:i},Jr,O),[R,P]=ba(B.onClick);return T(a.createElement(Zr,{component:"Checkbox",disabled:x},a.createElement("label",{className:w,style:Object.assign(Object.assign({},v==null?void 0:v.style),c),onMouseEnter:d,onMouseLeave:m,onClick:R},a.createElement(ha,Object.assign({},B,{onClick:P,prefixCls:E,className:N,disabled:x,ref:I})),s!=null&&a.createElement("span",{className:`${E}-label`},s))))},Ra=a.forwardRef(Rs);var ks=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const{defaultValue:o,children:n,options:r=[],prefixCls:l,className:s,rootClassName:i,style:c,onChange:d}=e,m=ks(e,["defaultValue","children","options","prefixCls","className","rootClassName","style","onChange"]),{getPrefixCls:u,direction:p}=a.useContext(Ue),[f,g]=a.useState(m.value||o||[]),[h,v]=a.useState([]);a.useEffect(()=>{"value"in m&&g(m.value||[])},[m.value]);const b=a.useMemo(()=>r.map(N=>typeof N=="string"||typeof N=="number"?{label:N,value:N}:N),[r]),$=N=>{v(R=>R.filter(P=>P!==N))},C=N=>{v(R=>[].concat(de(R),[N]))},x=N=>{const R=f.indexOf(N.value),P=de(f);R===-1?P.push(N.value):P.splice(R,1),"value"in m||g(P),d==null||d(P.filter(K=>h.includes(K)).sort((K,D)=>{const F=b.findIndex(q=>q.value===K),A=b.findIndex(q=>q.value===D);return F-A}))},S=u("checkbox",l),k=`${S}-group`,I=pt(S),[E,y,T]=Na(S,I),O=It(m,["value","disabled"]),M=r.length?b.map(N=>a.createElement(Ra,{prefixCls:S,key:N.value.toString(),disabled:"disabled"in N?N.disabled:m.disabled,value:N.value,checked:f.includes(N.value),onChange:N.onChange,className:Y(`${k}-item`,N.className),style:N.style,title:N.title,id:N.id,required:N.required},N.label)):n,B=a.useMemo(()=>({toggleOption:x,value:f,disabled:m.disabled,name:m.name,registerValue:C,cancelValue:$}),[x,f,m.disabled,m.name,C,$]),w=Y(k,{[`${k}-rtl`]:p==="rtl"},s,i,T,I,y);return E(a.createElement("div",Object.assign({className:w,style:c},O,{ref:t}),a.createElement(Oa.Provider,{value:B},M)))}),Wt=Ra;Wt.Group=Ps;Wt.__ANT_CHECKBOX=!0;var Ts=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const{getPopupContainer:t,getPrefixCls:o,direction:n}=a.useContext(Ue),{prefixCls:r,type:l="default",danger:s,disabled:i,loading:c,onClick:d,htmlType:m,children:u,className:p,menu:f,arrow:g,autoFocus:h,overlay:v,trigger:b,align:$,open:C,onOpenChange:x,placement:S,getPopupContainer:k,href:I,icon:E=a.createElement(Qr,null),title:y,buttonsRender:T=ne=>ne,mouseEnterDelay:O,mouseLeaveDelay:M,overlayClassName:B,overlayStyle:w,destroyOnHidden:N,destroyPopupOnHide:R,dropdownRender:P,popupRender:K}=e,D=Ts(e,["prefixCls","type","danger","disabled","loading","onClick","htmlType","children","className","menu","arrow","autoFocus","overlay","trigger","align","open","onOpenChange","placement","getPopupContainer","href","icon","title","buttonsRender","mouseEnterDelay","mouseLeaveDelay","overlayClassName","overlayStyle","destroyOnHidden","destroyPopupOnHide","dropdownRender","popupRender"]),F=o("dropdown",r),A=`${F}-button`,L={menu:f,arrow:g,autoFocus:h,align:$,disabled:i,trigger:i?[]:b,onOpenChange:x,getPopupContainer:k||t,mouseEnterDelay:O,mouseLeaveDelay:M,overlayClassName:B,overlayStyle:w,destroyOnHidden:N,popupRender:K||P},{compactSize:se,compactItemClassnames:ce}=Wl(F,n),ie=Y(A,ce,p);"destroyPopupOnHide"in e&&(L.destroyPopupOnHide=R),"overlay"in e&&(L.overlay=v),"open"in e&&(L.open=C),"placement"in e?L.placement=S:L.placement=n==="rtl"?"bottomLeft":"bottomRight";const Q=a.createElement(wn,{type:l,danger:s,disabled:i,loading:c,onClick:d,htmlType:m,href:I,title:y},u),Z=a.createElement(wn,{type:l,danger:s,icon:E}),[V,te]=T([Q,Z]);return a.createElement(Vl.Compact,Object.assign({className:ie,size:se,block:!0},D),V,a.createElement(Mn,Object.assign({},L),te))};ka.__ANT_BUTTON=!0;const Eo=Mn;Eo.Button=ka;function Bs(e){return e==null?null:typeof e=="object"&&!a.isValidElement(e)?e:{title:e}}function On(e){const[t,o]=a.useState(e);return a.useEffect(()=>{const n=setTimeout(()=>{o(e)},e.length?0:10);return()=>{clearTimeout(n)}},[e]),t}const Ms=e=>{const{componentCls:t}=e,o=`${t}-show-help`,n=`${t}-show-help-item`;return{[o]:{transition:`opacity ${e.motionDurationFast} ${e.motionEaseInOut}`,"&-appear, &-enter":{opacity:0,"&-active":{opacity:1}},"&-leave":{opacity:1,"&-active":{opacity:0}},[n]:{overflow:"hidden",transition:`height ${e.motionDurationFast} ${e.motionEaseInOut}, + opacity ${e.motionDurationFast} ${e.motionEaseInOut}, + transform ${e.motionDurationFast} ${e.motionEaseInOut} !important`,[`&${n}-appear, &${n}-enter`]:{transform:"translateY(-5px)",opacity:0,"&-active":{transform:"translateY(0)",opacity:1}},[`&${n}-leave-active`]:{transform:"translateY(-5px)"}}}}},Ds=e=>({legend:{display:"block",width:"100%",marginBottom:e.marginLG,padding:0,color:e.colorTextDescription,fontSize:e.fontSizeLG,lineHeight:"inherit",border:0,borderBottom:`${j(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},'input[type="search"]':{boxSizing:"border-box"},'input[type="radio"], input[type="checkbox"]':{lineHeight:"normal"},'input[type="file"]':{display:"block"},'input[type="range"]':{display:"block",width:"100%"},"select[multiple], select[size]":{height:"auto"},"input[type='file']:focus,\n input[type='radio']:focus,\n input[type='checkbox']:focus":{outline:0,boxShadow:`0 0 0 ${j(e.controlOutlineWidth)} ${e.controlOutline}`},output:{display:"block",paddingTop:15,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight}}),fr=(e,t)=>{const{formItemCls:o}=e;return{[o]:{[`${o}-label > label`]:{height:t},[`${o}-control-input`]:{minHeight:t}}}},Ks=e=>{const{componentCls:t}=e;return{[e.componentCls]:Object.assign(Object.assign(Object.assign({},nt(e)),Ds(e)),{[`${t}-text`]:{display:"inline-block",paddingInlineEnd:e.paddingSM},"&-small":Object.assign({},fr(e,e.controlHeightSM)),"&-large":Object.assign({},fr(e,e.controlHeightLG))})}},Ls=e=>{const{formItemCls:t,iconCls:o,rootPrefixCls:n,antCls:r,labelRequiredMarkColor:l,labelColor:s,labelFontSize:i,labelHeight:c,labelColonMarginInlineStart:d,labelColonMarginInlineEnd:m,itemMarginBottom:u}=e;return{[t]:Object.assign(Object.assign({},nt(e)),{marginBottom:u,verticalAlign:"top","&-with-help":{transition:"none"},[`&-hidden, + &-hidden${r}-row`]:{display:"none"},"&-has-warning":{[`${t}-split`]:{color:e.colorError}},"&-has-error":{[`${t}-split`]:{color:e.colorWarning}},[`${t}-label`]:{flexGrow:0,overflow:"hidden",whiteSpace:"nowrap",textAlign:"end",verticalAlign:"middle","&-left":{textAlign:"start"},"&-wrap":{overflow:"unset",lineHeight:e.lineHeight,whiteSpace:"unset","> label":{verticalAlign:"middle",textWrap:"balance"}},"> label":{position:"relative",display:"inline-flex",alignItems:"center",maxWidth:"100%",height:c,color:s,fontSize:i,[`> ${o}`]:{fontSize:e.fontSize,verticalAlign:"top"},[`&${t}-required`]:{"&::before":{display:"inline-block",marginInlineEnd:e.marginXXS,color:l,fontSize:e.fontSize,fontFamily:"SimSun, sans-serif",lineHeight:1,content:'"*"'},[`&${t}-required-mark-hidden, &${t}-required-mark-optional`]:{"&::before":{display:"none"}}},[`${t}-optional`]:{display:"inline-block",marginInlineStart:e.marginXXS,color:e.colorTextDescription,[`&${t}-required-mark-hidden`]:{display:"none"}},[`${t}-tooltip`]:{color:e.colorTextDescription,cursor:"help",writingMode:"horizontal-tb",marginInlineStart:e.marginXXS},"&::after":{content:'":"',position:"relative",marginBlock:0,marginInlineStart:d,marginInlineEnd:m},[`&${t}-no-colon::after`]:{content:'"\\a0"'}}},[`${t}-control`]:{"--ant-display":"flex",flexDirection:"column",flexGrow:1,[`&:first-child:not([class^="'${n}-col-'"]):not([class*="' ${n}-col-'"])`]:{width:"100%"},"&-input":{position:"relative",display:"flex",alignItems:"center",minHeight:e.controlHeight,"&-content":{flex:"auto",maxWidth:"100%",[`&:has(> ${r}-switch:only-child, > ${r}-rate:only-child)`]:{display:"flex",alignItems:"center"}}}},[t]:{"&-additional":{display:"flex",flexDirection:"column"},"&-explain, &-extra":{clear:"both",color:e.colorTextDescription,fontSize:e.fontSize,lineHeight:e.lineHeight},"&-explain-connected":{width:"100%"},"&-extra":{minHeight:e.controlHeightSM,transition:`color ${e.motionDurationMid} ${e.motionEaseOut}`},"&-explain":{"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning}}},[`&-with-help ${t}-explain`]:{height:"auto",opacity:1},[`${t}-feedback-icon`]:{fontSize:e.fontSize,textAlign:"center",visibility:"visible",animationName:ea,animationDuration:e.motionDurationMid,animationTimingFunction:e.motionEaseOutBack,pointerEvents:"none","&-success":{color:e.colorSuccess},"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning},"&-validating":{color:e.colorPrimary}}})}},Bt=e=>({padding:e.verticalLabelPadding,margin:e.verticalLabelMargin,whiteSpace:"initial",textAlign:"start","> label":{margin:0,"&::after":{visibility:"hidden"}}}),_s=e=>{const{antCls:t,formItemCls:o}=e;return{[`${o}-horizontal`]:{[`${o}-label`]:{flexGrow:0},[`${o}-control`]:{flex:"1 1 0",minWidth:0},[`${o}-label[class$='-24'], ${o}-label[class*='-24 ']`]:{[`& + ${o}-control`]:{minWidth:"unset"}},[`${t}-col-24${o}-label, + ${t}-col-xl-24${o}-label`]:Bt(e)}}},js=e=>{const{componentCls:t,formItemCls:o,inlineItemMarginBottom:n}=e;return{[`${t}-inline`]:{display:"flex",flexWrap:"wrap",[`${o}-inline`]:{flex:"none",marginInlineEnd:e.margin,marginBottom:n,"&-row":{flexWrap:"nowrap"},[`> ${o}-label, + > ${o}-control`]:{display:"inline-block",verticalAlign:"top"},[`> ${o}-label`]:{flex:"none"},[`${t}-text`]:{display:"inline-block"},[`${o}-has-feedback`]:{display:"inline-block"}}}}},Hs=e=>{const{componentCls:t,formItemCls:o,rootPrefixCls:n}=e;return{[`${o} ${o}-label`]:Bt(e),[`${t}:not(${t}-inline)`]:{[o]:{flexWrap:"wrap",[`${o}-label, ${o}-control`]:{[`&:not([class*=" ${n}-col-xs"])`]:{flex:"0 0 100%",maxWidth:"100%"}}}}}},zs=e=>{const{componentCls:t,formItemCls:o,antCls:n}=e;return{[`${o}-vertical`]:{[`${o}-row`]:{flexDirection:"column"},[`${o}-label > label`]:{height:"auto"},[`${o}-control`]:{width:"100%"},[`${o}-label, + ${n}-col-24${o}-label, + ${n}-col-xl-24${o}-label`]:Bt(e)},[`@media (max-width: ${j(e.screenXSMax)})`]:[Hs(e),{[t]:{[`${o}:not(${o}-horizontal)`]:{[`${n}-col-xs-24${o}-label`]:Bt(e)}}}],[`@media (max-width: ${j(e.screenSMMax)})`]:{[t]:{[`${o}:not(${o}-horizontal)`]:{[`${n}-col-sm-24${o}-label`]:Bt(e)}}},[`@media (max-width: ${j(e.screenMDMax)})`]:{[t]:{[`${o}:not(${o}-horizontal)`]:{[`${n}-col-md-24${o}-label`]:Bt(e)}}},[`@media (max-width: ${j(e.screenLGMax)})`]:{[t]:{[`${o}:not(${o}-horizontal)`]:{[`${n}-col-lg-24${o}-label`]:Bt(e)}}}}},Fs=e=>({labelRequiredMarkColor:e.colorError,labelColor:e.colorTextHeading,labelFontSize:e.fontSize,labelHeight:e.controlHeight,labelColonMarginInlineStart:e.marginXXS/2,labelColonMarginInlineEnd:e.marginXS,itemMarginBottom:e.marginLG,verticalLabelPadding:`0 0 ${e.paddingXS}px`,verticalLabelMargin:0,inlineItemMarginBottom:0}),Pa=(e,t)=>wt(e,{formItemCls:`${e.componentCls}-item`,rootPrefixCls:t}),Io=Lt("Form",(e,{rootPrefixCls:t})=>{const o=Pa(e,t);return[Ks(o),Ls(o),Ms(o),_s(o),js(o),zs(o),$o(o),ea]},Fs,{order:-1e3}),mr=[];function Yn(e,t,o,n=0){return{key:typeof e=="string"?e:`${t}-${n}`,error:e,errorStatus:o}}const Ta=({help:e,helpStatus:t,errors:o=mr,warnings:n=mr,className:r,fieldId:l,onVisibleChanged:s})=>{const{prefixCls:i}=a.useContext(xo),c=`${i}-item-explain`,d=pt(i),[m,u,p]=Io(i,d),f=a.useMemo(()=>$n(i),[i]),g=On(o),h=On(n),v=a.useMemo(()=>e!=null?[Yn(e,"help",t)]:[].concat(de(g.map((C,x)=>Yn(C,"error","error",x))),de(h.map((C,x)=>Yn(C,"warning","warning",x)))),[e,t,g,h]),b=a.useMemo(()=>{const C={};return v.forEach(({key:x})=>{C[x]=(C[x]||0)+1}),v.map((x,S)=>Object.assign(Object.assign({},x),{key:C[x.key]>1?`${x.key}-fallback-${S}`:x.key}))},[v]),$={};return l&&($.id=`${l}_help`),m(a.createElement(ta,{motionDeadline:f.motionDeadline,motionName:`${i}-show-help`,visible:!!b.length,onVisibleChanged:s},C=>{const{className:x,style:S}=C;return a.createElement("div",Object.assign({},$,{className:Y(c,x,p,d,r,u),style:S}),a.createElement(ql,Object.assign({keys:b},$n(i),{motionName:`${i}-show-help-item`,component:!1}),k=>{const{key:I,error:E,errorStatus:y,className:T,style:O}=k;return a.createElement("div",{key:I,className:Y(T,{[`${c}-${y}`]:y}),style:O},E)}))}))};var As=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const o=a.useContext(Tn),{getPrefixCls:n,direction:r,requiredMark:l,colon:s,scrollToFirstError:i,className:c,style:d}=Xl("form"),{prefixCls:m,className:u,rootClassName:p,size:f,disabled:g=o,form:h,colon:v,labelAlign:b,labelWrap:$,labelCol:C,wrapperCol:x,hideRequiredMark:S,layout:k="horizontal",scrollToFirstError:I,requiredMark:E,onFinishFailed:y,name:T,style:O,feedbackIcons:M,variant:B}=e,w=As(e,["prefixCls","className","rootClassName","size","disabled","form","colon","labelAlign","labelWrap","labelCol","wrapperCol","hideRequiredMark","layout","scrollToFirstError","requiredMark","onFinishFailed","name","style","feedbackIcons","variant"]),N=Co(f),R=a.useContext(Gl),P=a.useMemo(()=>E!==void 0?E:S?!1:l!==void 0?l:!0,[S,E,l]),K=v??s,D=n("form",m),F=pt(D),[A,q,L]=Io(D,F),se=Y(D,`${D}-${k}`,{[`${D}-hide-required-mark`]:P===!1,[`${D}-rtl`]:r==="rtl",[`${D}-${N}`]:N},L,F,q,c,u,p),[ce]=Sa(h),{__INTERNAL__:ie}=ce;ie.name=T;const Q=a.useMemo(()=>({name:T,labelAlign:b,labelCol:C,labelWrap:$,wrapperCol:x,layout:k,colon:K,requiredMark:P,itemRef:ie.itemRef,form:ce,feedbackIcons:M}),[T,b,C,x,k,K,P,ce,M]),Z=a.useRef(null);a.useImperativeHandle(t,()=>{var ne;return Object.assign(Object.assign({},ce),{nativeElement:(ne=Z.current)===null||ne===void 0?void 0:ne.nativeElement})});const V=(ne,X)=>{if(ne){let J={block:"nearest"};typeof ne=="object"&&(J=Object.assign(Object.assign({},J),ne)),ce.scrollToField(X,J)}},te=ne=>{if(y==null||y(ne),ne.errorFields.length){const X=ne.errorFields[0].name;if(I!==void 0){V(I,X);return}i!==void 0&&V(i,X)}};return A(a.createElement(Ul.Provider,{value:B},a.createElement(Yl,{disabled:g},a.createElement(Ql.Provider,{value:N},a.createElement(na,{validateMessages:R},a.createElement(bt.Provider,{value:Q},a.createElement(Zl,{status:!0},a.createElement(Jl,Object.assign({id:T},w,{name:T,onFinishFailed:te,form:ce,ref:Z,style:Object.assign(Object.assign({},d),O),className:se})))))))))},Vs=a.forwardRef(Ws);function qs(e){if(typeof e=="function")return e;const t=kn(e);return t.length<=1?t[0]:t}const Ba=()=>{const{status:e,errors:t=[],warnings:o=[]}=a.useContext(Dt);return{status:e,errors:t,warnings:o}};Ba.Context=Dt;function Xs(e){const[t,o]=a.useState(e),n=a.useRef(null),r=a.useRef([]),l=a.useRef(!1);a.useEffect(()=>(l.current=!1,()=>{l.current=!0,ht.cancel(n.current),n.current=null}),[]);function s(i){l.current||(n.current===null&&(r.current=[],n.current=ht(()=>{n.current=null,o(c=>{let d=c;return r.current.forEach(m=>{d=m(d)}),d})})),r.current.push(i))}return[t,s]}function Gs(){const{itemRef:e}=a.useContext(bt),t=a.useRef({});function o(n,r){const l=r&&typeof r=="object"&&Xr(r),s=n.join("_");return(t.current.name!==s||t.current.originRef!==l)&&(t.current.name=s,t.current.originRef=l,t.current.ref=yo(e(n),l)),t.current.ref}return o}const Us=e=>{const{formItemCls:t}=e;return{"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)":{[`${t}-control`]:{display:"flex"}}}},Ys=ei(["Form","item-item"],(e,{rootPrefixCls:t})=>{const o=Pa(e,t);return Us(o)});var Qs=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const{prefixCls:t,status:o,labelCol:n,wrapperCol:r,children:l,errors:s,warnings:i,_internalItemRender:c,extra:d,help:m,fieldId:u,marginBottom:p,onErrorVisibleChanged:f,label:g}=e,h=`${t}-item`,v=a.useContext(bt),b=a.useMemo(()=>{let w=Object.assign({},r||v.wrapperCol||{});return g===null&&!n&&!r&&v.labelCol&&[void 0,"xs","sm","md","lg","xl","xxl"].forEach(R=>{const P=R?[R]:[],K=rn(v.labelCol,P),D=typeof K=="object"?K:{},F=rn(w,P),A=typeof F=="object"?F:{};"span"in D&&!("offset"in A)&&D.span{const{labelCol:w,wrapperCol:N}=v;return Qs(v,["labelCol","wrapperCol"])},[v]),x=a.useRef(null),[S,k]=a.useState(0);mt(()=>{d&&x.current?k(x.current.clientHeight):k(0)},[d]);const I=a.createElement("div",{className:`${h}-control-input`},a.createElement("div",{className:`${h}-control-input-content`},l)),E=a.useMemo(()=>({prefixCls:t,status:o}),[t,o]),y=p!==null||s.length||i.length?a.createElement(xo.Provider,{value:E},a.createElement(Ta,{fieldId:u,errors:s,warnings:i,help:m,helpStatus:o,className:`${h}-explain-connected`,onVisibleChanged:f})):null,T={};u&&(T.id=`${u}_extra`);const O=d?a.createElement("div",Object.assign({},T,{className:`${h}-extra`,ref:x}),d):null,M=y||O?a.createElement("div",{className:`${h}-additional`,style:p?{minHeight:p+S}:{}},y,O):null,B=c&&c.mark==="pro_table_render"&&c.render?c.render(e,{input:I,errorList:y,extra:O}):a.createElement(a.Fragment,null,I,M);return a.createElement(bt.Provider,{value:C},a.createElement(oa,Object.assign({},b,{className:$}),B),a.createElement(Ys,{prefixCls:t}))};var ec={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"question-circle",theme:"outlined"},tc=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:ec}))},nc=a.forwardRef(tc),oc=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{var m;const[u]=ni("Form"),{labelAlign:p,labelCol:f,labelWrap:g,colon:h}=a.useContext(bt);if(!t)return null;const v=n||f||{},b=r||p,$=`${e}-item-label`,C=Y($,b==="left"&&`${$}-left`,v.className,{[`${$}-wrap`]:!!g});let x=t;const S=l===!0||h!==!1&&l!==!1;S&&!d&&typeof t=="string"&&t.trim()&&(x=t.replace(/[:|:]\s*$/,""));const I=Bs(c);if(I){const{icon:B=a.createElement(nc,null)}=I,w=oc(I,["icon"]),N=a.createElement(xn,Object.assign({},w),a.cloneElement(B,{className:`${e}-item-tooltip`,title:"",onClick:R=>{R.preventDefault()},tabIndex:null}));x=a.createElement(a.Fragment,null,x,N)}const E=i==="optional",y=typeof i=="function",T=i===!1;y?x=i(x,{required:!!s}):E&&!s&&(x=a.createElement(a.Fragment,null,x,a.createElement("span",{className:`${e}-item-optional`,title:""},(u==null?void 0:u.optional)||((m=ra.Form)===null||m===void 0?void 0:m.optional))));let O;T?O="hidden":(E||y)&&(O="optional");const M=Y({[`${e}-item-required`]:s,[`${e}-item-required-mark-${O}`]:O,[`${e}-item-no-colon`]:!S});return a.createElement(oa,Object.assign({},v,{className:C}),a.createElement("label",{htmlFor:o,className:M,title:typeof t=="string"?t:""},x))},ac={success:ai,warning:ri,error:oi,validating:aa};function Ma({children:e,errors:t,warnings:o,hasFeedback:n,validateStatus:r,prefixCls:l,meta:s,noStyle:i,name:c}){const d=`${l}-item`,{feedbackIcons:m}=a.useContext(bt),u=xa(t,o,s,null,!!n,r),{isFormItemInput:p,status:f,hasFeedback:g,feedbackIcon:h,name:v}=a.useContext(Dt),b=a.useMemo(()=>{var $;let C;if(n){const S=n!==!0&&n.icons||m,k=u&&(($=S==null?void 0:S({status:u,errors:t,warnings:o}))===null||$===void 0?void 0:$[u]),I=u?ac[u]:null;C=k!==!1&&I?a.createElement("span",{className:Y(`${d}-feedback-icon`,`${d}-feedback-icon-${u}`)},k||a.createElement(I,null)):null}const x={status:u||"",errors:t,warnings:o,hasFeedback:!!n,feedbackIcon:C,isFormItemInput:!0,name:c};return i&&(x.status=(u??f)||"",x.isFormItemInput=p,x.hasFeedback=!!(n??g),x.feedbackIcon=n!==void 0?x.feedbackIcon:h,x.name=c??v),x},[u,n,i,p,f]);return a.createElement(Dt.Provider,{value:b},e)}var lc=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{if(B&&y.current){const A=getComputedStyle(y.current);R(Number.parseInt(A.marginBottom,10))}},[B,w]);const P=A=>{A||R(null)},D=((A=!1)=>{const q=A?T:d.errors,L=A?O:d.warnings;return xa(q,L,d,"",!!m,c)})(),F=Y(x,o,n,{[`${x}-with-help`]:M||T.length||O.length,[`${x}-has-feedback`]:D&&m,[`${x}-has-success`]:D==="success",[`${x}-has-warning`]:D==="warning",[`${x}-has-error`]:D==="error",[`${x}-is-validating`]:D==="validating",[`${x}-hidden`]:u,[`${x}-${I}`]:I});return a.createElement("div",{className:F,style:r,ref:y},a.createElement(li,Object.assign({className:`${x}-row`},It(C,["_internalItemRender","colon","dependencies","extra","fieldKey","getValueFromEvent","getValueProps","htmlFor","id","initialValue","isListField","label","labelAlign","labelCol","labelWrap","messageVariables","name","normalize","noStyle","preserve","requiredMark","rules","shouldUpdate","trigger","tooltip","validateFirst","validateTrigger","valuePropName","wrapperCol","validateDebounce"])),a.createElement(rc,Object.assign({htmlFor:f},e,{requiredMark:S,required:g??h,prefixCls:t,vertical:E})),a.createElement(Js,Object.assign({},e,d,{errors:T,warnings:O,prefixCls:t,status:D,help:l,marginBottom:N,onErrorVisibleChanged:P}),a.createElement(ia.Provider,{value:v},a.createElement(Ma,{prefixCls:t,meta:d,errors:d.errors,warnings:d.warnings,hasFeedback:m,validateStatus:D,name:$},p)))),!!N&&a.createElement("div",{className:`${x}-margin-offset`,style:{marginBottom:-N}}))}const sc="__SPLIT__";function cc(e,t){const o=Object.keys(e),n=Object.keys(t);return o.length===n.length&&o.every(r=>{const l=e[r],s=t[r];return l===s||typeof l=="function"||typeof s=="function"})}const dc=a.memo(({children:e})=>e,(e,t)=>cc(e.control,t.control)&&e.update===t.update&&e.childProps.length===t.childProps.length&&e.childProps.every((o,n)=>o===t.childProps[n]));function pr(){return{errors:[],warnings:[],touched:!1,validating:!1,name:[],validated:!1}}function uc(e){const{name:t,noStyle:o,className:n,dependencies:r,prefixCls:l,shouldUpdate:s,rules:i,children:c,required:d,label:m,messageVariables:u,trigger:p="onChange",validateTrigger:f,hidden:g,help:h,layout:v}=e,{getPrefixCls:b}=a.useContext(Ue),{name:$}=a.useContext(bt),C=qs(c),x=typeof C=="function",S=a.useContext(ia),{validateTrigger:k}=a.useContext(ii),I=f!==void 0?f:k,E=t!=null,y=b("form",l),T=pt(y),[O,M,B]=Io(y,T);cn();const w=a.useContext(si),N=a.useRef(null),[R,P]=Xs({}),[K,D]=ci(()=>pr()),F=Q=>{const Z=w==null?void 0:w.getKey(Q.name);if(D(Q.destroy?pr():Q,!0),o&&h!==!1&&S){let V=Q.name;if(Q.destroy)V=N.current||V;else if(Z!==void 0){const[te,ne]=Z;V=[te].concat(de(ne)),N.current=V}S(Q,V)}},A=(Q,Z)=>{P(V=>{const te=Object.assign({},V),X=[].concat(de(Q.name.slice(0,-1)),de(Z)).join(sc);return Q.destroy?delete te[X]:te[X]=Q,te})},[q,L]=a.useMemo(()=>{const Q=de(K.errors),Z=de(K.warnings);return Object.values(R).forEach(V=>{Q.push.apply(Q,de(V.errors||[])),Z.push.apply(Z,de(V.warnings||[]))}),[Q,Z]},[R,K.errors,K.warnings]),se=Gs();function ce(Q,Z,V){return o&&!g?a.createElement(Ma,{prefixCls:y,hasFeedback:e.hasFeedback,validateStatus:e.validateStatus,meta:K,errors:q,warnings:L,noStyle:!0,name:t},Q):a.createElement(ic,Object.assign({key:"row"},e,{className:Y(n,B,T,M),prefixCls:y,fieldId:Z,isRequired:V,errors:q,warnings:L,meta:K,onSubItemMetaChange:A,layout:v,name:t}),Q)}if(!E&&!x&&!r)return O(ce(C));let ie={};return typeof m=="string"?ie.label=m:t&&(ie.label=String(t)),u&&(ie=Object.assign(Object.assign({},ie),u)),O(a.createElement(di,Object.assign({},e,{messageVariables:ie,trigger:p,validateTrigger:I,onMetaChange:F}),(Q,Z,V)=>{const te=en(t).length&&Z?Z.name:[],ne=Ca(te,$),X=d!==void 0?d:!!(i!=null&&i.some(H=>{if(H&&typeof H=="object"&&H.required&&!H.warningOnly)return!0;if(typeof H=="function"){const ee=H(V);return(ee==null?void 0:ee.required)&&!(ee!=null&&ee.warningOnly)}return!1})),J=Object.assign({},Q);let W=null;if(Array.isArray(C)&&E)W=C;else if(!(x&&(!(s||r)||E))){if(!(r&&!x&&!E))if(a.isValidElement(C)){const H=Object.assign(Object.assign({},C.props),J);if(H.id||(H.id=ne),h||q.length>0||L.length>0||e.extra){const ue=[];(h||q.length>0)&&ue.push(`${ne}_help`),e.extra&&ue.push(`${ne}_extra`),H["aria-describedby"]=ue.join(" ")}q.length>0&&(H["aria-invalid"]="true"),X&&(H["aria-required"]="true"),oo(C)&&(H.ref=se(te,C)),new Set([].concat(de(en(p)),de(en(I)))).forEach(ue=>{H[ue]=(...Be)=>{var Re,z,re,ae,xe;(re=J[ue])===null||re===void 0||(Re=re).call.apply(Re,[J].concat(Be)),(xe=(ae=C.props)[ue])===null||xe===void 0||(z=xe).call.apply(z,[ae].concat(Be))}});const le=[H["aria-required"],H["aria-invalid"],H["aria-describedby"]];W=a.createElement(dc,{control:J,update:C,childProps:le},Mt(C,H))}else x&&(s||r)&&!E?W=C(V):W=C}return ce(W,ne,X)}))}const Da=uc;Da.useStatus=Ba;var fc=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{var{prefixCls:t,children:o}=e,n=fc(e,["prefixCls","children"]);const{getPrefixCls:r}=a.useContext(Ue),l=r("form",t),s=a.useMemo(()=>({prefixCls:l,status:"error"}),[l]);return a.createElement(ui,Object.assign({},n),(i,c,d)=>a.createElement(xo.Provider,{value:s},o(i.map(m=>Object.assign(Object.assign({},m),{fieldKey:m.key})),c,{errors:d.errors,warnings:d.warnings})))};function pc(){const{form:e}=a.useContext(bt);return e}const Nt=Vs;Nt.Item=Da;Nt.List=mc;Nt.ErrorList=Ta;Nt.useForm=Sa;Nt.useFormInstance=pc;Nt.useWatch=fi;Nt.Provider=na;Nt.create=()=>{};function gr(e,t,o,n){var r=Zo.unstable_batchedUpdates?function(s){Zo.unstable_batchedUpdates(o,s)}:o;return e!=null&&e.addEventListener&&e.addEventListener(t,r,n),{remove:function(){e!=null&&e.removeEventListener&&e.removeEventListener(t,r,n)}}}var St={},fn="rc-table-internal-hook";function No(e){var t=a.createContext(void 0),o=function(r){var l=r.value,s=r.children,i=a.useRef(l);i.current=l;var c=a.useState(function(){return{getValue:function(){return i.current},listeners:new Set}}),d=Ie(c,1),m=d[0];return mt(function(){mi.unstable_batchedUpdates(function(){m.listeners.forEach(function(u){u(l)})})},[l]),a.createElement(t.Provider,{value:m},s)};return{Context:t,Provider:o,defaultValue:e}}function Fe(e,t){var o=ct(typeof t=="function"?t:function(u){if(t===void 0)return u;if(!Array.isArray(t))return u[t];var p={};return t.forEach(function(f){p[f]=u[f]}),p}),n=a.useContext(e==null?void 0:e.Context),r=n||{},l=r.listeners,s=r.getValue,i=a.useRef();i.current=o(n?s():e==null?void 0:e.defaultValue);var c=a.useState({}),d=Ie(c,2),m=d[1];return mt(function(){if(!n)return;function u(p){var f=o(p);an(i.current,f,!0)||m({})}return l.add(u),function(){l.delete(u)}},[n]),i.current}function gc(){var e=a.createContext(null);function t(){return a.useContext(e)}function o(r,l){var s=oo(r),i=function(d,m){var u=s?{ref:m}:{},p=a.useRef(0),f=a.useRef(d),g=t();return g!==null?a.createElement(r,Ce({},d,u)):((!l||l(f.current,d))&&(p.current+=1),f.current=d,a.createElement(e.Provider,{value:p.current},a.createElement(r,Ce({},d,u))))};return s?a.forwardRef(i):i}function n(r,l){var s=oo(r),i=function(d,m){var u=s?{ref:m}:{};return t(),a.createElement(r,Ce({},d,u))};return s?a.memo(a.forwardRef(i),l):a.memo(i,l)}return{makeImmutable:o,responseImmutable:n,useImmutableMark:t}}var Oo=gc(),Ka=Oo.makeImmutable,qt=Oo.responseImmutable,vc=Oo.useImmutableMark,Xe=No(),La=a.createContext({renderWithProps:!1}),hc="RC_TABLE_KEY";function bc(e){return e==null?[]:Array.isArray(e)?e:[e]}function Dn(e){var t=[],o={};return e.forEach(function(n){for(var r=n||{},l=r.key,s=r.dataIndex,i=l||bc(s).join("-")||hc;o[i];)i="".concat(i,"_next");o[i]=!0,t.push(i)}),t}function lo(e){return e!=null}function yc(e){return typeof e=="number"&&!Number.isNaN(e)}function Cc(e){return e&>(e)==="object"&&!Array.isArray(e)&&!a.isValidElement(e)}function xc(e,t,o,n,r,l){var s=a.useContext(La),i=vc(),c=sa(function(){if(lo(n))return[n];var d=t==null||t===""?[]:Array.isArray(t)?t:[t],m=rn(e,d),u=m,p=void 0;if(r){var f=r(m,e,o);Cc(f)?(u=f.children,p=f.props,s.renderWithProps=!0):u=f}return[u,p]},[i,e,n,t,r,o],function(d,m){if(l){var u=Ie(d,2),p=u[1],f=Ie(m,2),g=f[1];return l(g,p)}return s.renderWithProps?!0:!an(d,m,!0)});return c}function Sc(e,t,o,n){var r=e+t-1;return e<=n&&r>=o}function $c(e,t){return Fe(Xe,function(o){var n=Sc(e,t||1,o.hoverStartRow,o.hoverEndRow);return[n,o.onHover]})}var wc=function(t){var o=t.ellipsis,n=t.rowType,r=t.children,l,s=o===!0?{showTitle:!0}:o;return s&&(s.showTitle||n==="header")&&(typeof r=="string"||typeof r=="number"?l=r.toString():a.isValidElement(r)&&typeof r.props.children=="string"&&(l=r.props.children)),l};function Ec(e){var t,o,n,r,l,s,i,c,d=e.component,m=e.children,u=e.ellipsis,p=e.scope,f=e.prefixCls,g=e.className,h=e.align,v=e.record,b=e.render,$=e.dataIndex,C=e.renderIndex,x=e.shouldCellUpdate,S=e.index,k=e.rowType,I=e.colSpan,E=e.rowSpan,y=e.fixLeft,T=e.fixRight,O=e.firstFixLeft,M=e.lastFixLeft,B=e.firstFixRight,w=e.lastFixRight,N=e.appendNode,R=e.additionalProps,P=R===void 0?{}:R,K=e.isSticky,D="".concat(f,"-cell"),F=Fe(Xe,["supportSticky","allColumnsFixedLeft","rowHoverable"]),A=F.supportSticky,q=F.allColumnsFixedLeft,L=F.rowHoverable,se=xc(v,$,C,m,b,x),ce=Ie(se,2),ie=ce[0],Q=ce[1],Z={},V=typeof y=="number"&&A,te=typeof T=="number"&&A;V&&(Z.position="sticky",Z.left=y),te&&(Z.position="sticky",Z.right=T);var ne=(t=(o=(n=Q==null?void 0:Q.colSpan)!==null&&n!==void 0?n:P.colSpan)!==null&&o!==void 0?o:I)!==null&&t!==void 0?t:1,X=(r=(l=(s=Q==null?void 0:Q.rowSpan)!==null&&s!==void 0?s:P.rowSpan)!==null&&l!==void 0?l:E)!==null&&r!==void 0?r:1,J=$c(S,X),W=Ie(J,2),H=W[0],ee=W[1],le=ct(function(xe){var Se;v&&ee(S,S+X-1),P==null||(Se=P.onMouseEnter)===null||Se===void 0||Se.call(P,xe)}),ue=ct(function(xe){var Se;v&&ee(-1,-1),P==null||(Se=P.onMouseLeave)===null||Se===void 0||Se.call(P,xe)});if(ne===0||X===0)return null;var Be=(i=P.title)!==null&&i!==void 0?i:wc({rowType:k,ellipsis:u,children:ie}),Re=Y(D,g,(c={},_(_(_(_(_(_(_(_(_(_(c,"".concat(D,"-fix-left"),V&&A),"".concat(D,"-fix-left-first"),O&&A),"".concat(D,"-fix-left-last"),M&&A),"".concat(D,"-fix-left-all"),M&&q&&A),"".concat(D,"-fix-right"),te&&A),"".concat(D,"-fix-right-first"),B&&A),"".concat(D,"-fix-right-last"),w&&A),"".concat(D,"-ellipsis"),u),"".concat(D,"-with-append"),N),"".concat(D,"-fix-sticky"),(V||te)&&K&&A),_(c,"".concat(D,"-row-hover"),!Q&&H)),P.className,Q==null?void 0:Q.className),z={};h&&(z.textAlign=h);var re=U(U(U(U({},Q==null?void 0:Q.style),Z),z),P.style),ae=ie;return gt(ae)==="object"&&!Array.isArray(ae)&&!a.isValidElement(ae)&&(ae=null),u&&(M||B)&&(ae=a.createElement("span",{className:"".concat(D,"-content")},ae)),a.createElement(d,Ce({},Q,P,{className:Re,style:re,title:Be,scope:p,onMouseEnter:L?le:void 0,onMouseLeave:L?ue:void 0,colSpan:ne!==1?ne:null,rowSpan:X!==1?X:null}),N,ae)}const Xt=a.memo(Ec);function Ro(e,t,o,n,r){var l=o[e]||{},s=o[t]||{},i,c;l.fixed==="left"?i=n.left[r==="rtl"?t:e]:s.fixed==="right"&&(c=n.right[r==="rtl"?e:t]);var d=!1,m=!1,u=!1,p=!1,f=o[t+1],g=o[e-1],h=f&&!f.fixed||g&&!g.fixed||o.every(function(x){return x.fixed==="left"});if(r==="rtl"){if(i!==void 0){var v=g&&g.fixed==="left";p=!v&&h}else if(c!==void 0){var b=f&&f.fixed==="right";u=!b&&h}}else if(i!==void 0){var $=f&&f.fixed==="left";d=!$&&h}else if(c!==void 0){var C=g&&g.fixed==="right";m=!C&&h}return{fixLeft:i,fixRight:c,lastFixLeft:d,firstFixRight:m,lastFixRight:u,firstFixLeft:p,isSticky:n.isSticky}}var _a=a.createContext({});function Ic(e){var t=e.className,o=e.index,n=e.children,r=e.colSpan,l=r===void 0?1:r,s=e.rowSpan,i=e.align,c=Fe(Xe,["prefixCls","direction"]),d=c.prefixCls,m=c.direction,u=a.useContext(_a),p=u.scrollColumnIndex,f=u.stickyOffsets,g=u.flattenColumns,h=o+l-1,v=h+1===p?l+1:l,b=Ro(o,o+v-1,g,f,m);return a.createElement(Xt,Ce({className:t,index:o,component:"td",prefixCls:d,record:null,dataIndex:null,align:i,colSpan:v,rowSpan:s,render:function(){return n}},b))}var Nc=["children"];function Oc(e){var t=e.children,o=lt(e,Nc);return a.createElement("tr",o,t)}function Kn(e){var t=e.children;return t}Kn.Row=Oc;Kn.Cell=Ic;function Rc(e){var t=e.children,o=e.stickyOffsets,n=e.flattenColumns,r=Fe(Xe,"prefixCls"),l=n.length-1,s=n[l],i=a.useMemo(function(){return{stickyOffsets:o,flattenColumns:n,scrollColumnIndex:s!=null&&s.scrollbar?l:null}},[s,n,l,o]);return a.createElement(_a.Provider,{value:i},a.createElement("tfoot",{className:"".concat(r,"-summary")},t))}const yn=qt(Rc);var ja=Kn;function kc(e){return null}function Pc(e){return null}function Ha(e,t,o,n,r,l,s){var i=l(t,s);e.push({record:t,indent:o,index:s,rowKey:i});var c=r==null?void 0:r.has(i);if(t&&Array.isArray(t[n])&&c)for(var d=0;d1?O-1:0),B=1;B5&&arguments[5]!==void 0?arguments[5]:[],i=arguments.length>6&&arguments[6]!==void 0?arguments[6]:0,c=e.record,d=e.prefixCls,m=e.columnsKey,u=e.fixedInfoList,p=e.expandIconColumnIndex,f=e.nestExpandable,g=e.indentSize,h=e.expandIcon,v=e.expanded,b=e.hasNestChildren,$=e.onTriggerExpand,C=e.expandable,x=e.expandedKeys,S=m[o],k=u[o],I;o===(p||0)&&f&&(I=a.createElement(a.Fragment,null,a.createElement("span",{style:{paddingLeft:"".concat(g*n,"px")},className:"".concat(d,"-row-indent indent-level-").concat(n)}),h({prefixCls:d,expanded:v,expandable:b,record:c,onExpand:$})));var E=((l=t.onCell)===null||l===void 0?void 0:l.call(t,c,r))||{};if(i){var y=E.rowSpan,T=y===void 0?1:y;if(C&&T&&o=1)),style:U(U({},o),C==null?void 0:C.style)}),v.map(function(O,M){var B=O.render,w=O.dataIndex,N=O.className,R=Va(g,O,M,d,r,i,f==null?void 0:f.offset),P=R.key,K=R.fixedInfo,D=R.appendCellNode,F=R.additionalCellProps;return a.createElement(Xt,Ce({className:N,ellipsis:O.ellipsis,align:O.align,scope:O.rowScope,component:O.rowScope?p:u,prefixCls:h,key:P,record:n,index:r,renderIndex:l,dataIndex:w,render:B,shouldCellUpdate:O.shouldCellUpdate},K,{appendNode:D,additionalProps:F}))})),y;if(S&&(k.current||x)){var T=$(n,r,d+1,x);y=a.createElement(Aa,{expanded:x,className:Y("".concat(h,"-expanded-row"),"".concat(h,"-expanded-row-level-").concat(d+1),I),prefixCls:h,component:m,cellComponent:u,colSpan:f?f.colSpan:v.length,stickyOffset:f==null?void 0:f.sticky,isEmpty:!1},T)}return a.createElement(a.Fragment,null,E,y)}const Dc=qt(Mc);function Kc(e){var t=e.columnKey,o=e.onColumnResize,n=e.prefixCls,r=e.title,l=a.useRef();return mt(function(){l.current&&o(t,l.current.offsetWidth)},[]),a.createElement(So,{data:t},a.createElement("th",{ref:l,className:"".concat(n,"-measure-cell")},a.createElement("div",{className:"".concat(n,"-measure-cell-content")},r||" ")))}function Lc(e){var t=e.prefixCls,o=e.columnsKey,n=e.onColumnResize,r=e.columns,l=a.useRef(null),s=Fe(Xe,["measureRowRender"]),i=s.measureRowRender,c=a.createElement("tr",{"aria-hidden":"true",className:"".concat(t,"-measure-row"),ref:l,tabIndex:-1},a.createElement(So.Collection,{onBatchResize:function(m){la(l.current)&&m.forEach(function(u){var p=u.data,f=u.size;n(p,f.offsetWidth)})}},o.map(function(d){var m=r.find(function(f){return f.key===d}),u=m==null?void 0:m.title,p=a.isValidElement(u)?a.cloneElement(u,{ref:null}):u;return a.createElement(Kc,{prefixCls:t,key:d,columnKey:d,onColumnResize:n,title:p})})));return i?i(c):c}function _c(e){var t=e.data,o=e.measureColumnWidth,n=Fe(Xe,["prefixCls","getComponent","onColumnResize","flattenColumns","getRowKey","expandedKeys","childrenColumnName","emptyNode","expandedRowOffset","fixedInfoList","colWidths"]),r=n.prefixCls,l=n.getComponent,s=n.onColumnResize,i=n.flattenColumns,c=n.getRowKey,d=n.expandedKeys,m=n.childrenColumnName,u=n.emptyNode,p=n.expandedRowOffset,f=p===void 0?0:p,g=n.colWidths,h=za(t,m,d,c),v=a.useMemo(function(){return h.map(function(y){return y.rowKey})},[h]),b=a.useRef({renderWithProps:!1}),$=a.useMemo(function(){for(var y=i.length-f,T=0,O=0;O=0;d-=1){var m=t[d],u=o&&o[d],p=void 0,f=void 0;if(u&&(p=u[nn],l==="auto"&&(f=u.minWidth)),m||f||p||c){var g=p||{};g.columnType;var h=lt(g,Fc);s.unshift(a.createElement("col",Ce({key:d,style:{width:m,minWidth:f}},h))),c=!0}}return s.length>0?a.createElement("colgroup",null,s):null}var Ac=["className","noData","columns","flattenColumns","colWidths","colGroup","columCount","stickyOffsets","direction","fixHeader","stickyTopOffset","stickyBottomOffset","stickyClassName","scrollX","tableLayout","onScroll","children"];function Wc(e,t){return a.useMemo(function(){for(var o=[],n=0;n1?"colgroup":"col":null,ellipsis:v.ellipsis,align:v.align,component:s,prefixCls:m,key:f[h]},b,{additionalProps:$,rowType:"header"}))}))};function Xc(e){var t=[];function o(s,i){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;t[c]=t[c]||[];var d=i,m=s.filter(Boolean).map(function(u){var p={key:u.key,className:u.className||"",children:u.title,column:u,colStart:d},f=1,g=u.children;return g&&g.length>0&&(f=o(g,d,c+1).reduce(function(h,v){return h+v},0),p.hasSubColumns=!0),"colSpan"in u&&(f=u.colSpan),"rowSpan"in u&&(p.rowSpan=u.rowSpan),p.colSpan=f,p.colEnd=p.colStart+f-1,t[c].push(p),d+=f,f});return m}o(e,0);for(var n=t.length,r=function(i){t[i].forEach(function(c){!("rowSpan"in c)&&!c.hasSubColumns&&(c.rowSpan=n-i)})},l=0;l1&&arguments[1]!==void 0?arguments[1]:"";return typeof t=="number"?t:t.endsWith("%")?e*parseFloat(t)/100:null}function Uc(e,t,o){return a.useMemo(function(){if(t&&t>0){var n=0,r=0;e.forEach(function(p){var f=br(t,p.width);f?n+=f:r+=1});var l=Math.max(t,o),s=Math.max(l-n,r),i=r,c=s/r,d=0,m=e.map(function(p){var f=U({},p),g=br(t,f.width);if(g)f.width=g;else{var h=Math.floor(c);f.width=i===1?s:h,s-=h,i-=1}return d+=f.width,f});if(d0?U(U({},t),{},{children:Xa(o)}):t})}function io(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"key";return e.filter(function(o){return o&>(o)==="object"}).reduce(function(o,n,r){var l=n.fixed,s=l===!0?"left":l,i="".concat(t,"-").concat(r),c=n.children;return c&&c.length>0?[].concat(de(o),de(io(c,i).map(function(d){var m;return U(U({},d),{},{fixed:(m=d.fixed)!==null&&m!==void 0?m:s})}))):[].concat(de(o),[U(U({key:i},n),{},{fixed:s})])},[])}function Zc(e){return e.map(function(t){var o=t.fixed,n=lt(t,Qc),r=o;return o==="left"?r="right":o==="right"&&(r="left"),U({fixed:r},n)})}function Jc(e,t){var o=e.prefixCls,n=e.columns,r=e.children,l=e.expandable,s=e.expandedKeys,i=e.columnTitle,c=e.getRowKey,d=e.onTriggerExpand,m=e.expandIcon,u=e.rowExpandable,p=e.expandIconColumnIndex,f=e.expandedRowOffset,g=f===void 0?0:f,h=e.direction,v=e.expandRowByClick,b=e.columnWidth,$=e.fixed,C=e.scrollWidth,x=e.clientWidth,S=a.useMemo(function(){var w=n||ko(r)||[];return Xa(w.slice())},[n,r]),k=a.useMemo(function(){if(l){var w=S.slice();if(!w.includes(St)){var N=p||0,R=N===0&&$==="right"?S.length:N;R>=0&&w.splice(R,0,St)}var P=w.indexOf(St);w=w.filter(function(A,q){return A!==St||q===P});var K=S[P],D;$?D=$:D=K?K.fixed:null;var F=_(_(_(_(_(_({},nn,{className:"".concat(o,"-expand-icon-col"),columnType:"EXPAND_COLUMN"}),"title",i),"fixed",D),"className","".concat(o,"-row-expand-icon-cell")),"width",b),"render",function(q,L,se){var ce=c(L,se),ie=s.has(ce),Q=u?u(L):!0,Z=m({prefixCls:o,expanded:ie,expandable:Q,record:L,onExpand:d});return v?a.createElement("span",{onClick:function(te){return te.stopPropagation()}},Z):Z});return w.map(function(A,q){var L=A===St?F:A;return q=0;N-=1){var R=E[N].fixed;if(R==="left"||R===!0){w=N;break}}if(w>=0)for(var P=0;P<=w;P+=1){var K=E[P].fixed;if(K!=="left"&&K!==!0)return!0}var D=E.findIndex(function(q){var L=q.fixed;return L==="right"});if(D>=0)for(var F=D;F=P-i})})}})},B=function(N){$(function(R){return U(U({},R),{},{scrollLeft:u?N/u*p:0})})};return a.useImperativeHandle(o,function(){return{setScrollLeft:B,checkScrollBarVisible:M}}),a.useEffect(function(){var w=gr(document.body,"mouseup",y,!1),N=gr(document.body,"mousemove",O,!1);return M(),function(){w.remove(),N.remove()}},[f,k]),a.useEffect(function(){if(l.current){for(var w=[],N=Bn(l.current);N;)w.push(N),N=N.parentElement;return w.forEach(function(R){return R.addEventListener("scroll",M,!1)}),window.addEventListener("resize",M,!1),window.addEventListener("scroll",M,!1),c.addEventListener("scroll",M,!1),function(){w.forEach(function(R){return R.removeEventListener("scroll",M)}),window.removeEventListener("resize",M),window.removeEventListener("scroll",M),c.removeEventListener("scroll",M)}}},[c]),a.useEffect(function(){b.isHiddenScrollBar||$(function(w){var N=l.current;return N?U(U({},w),{},{scrollLeft:N.scrollLeft/N.scrollWidth*N.clientWidth}):w})},[b.isHiddenScrollBar]),u<=p||!f||b.isHiddenScrollBar?null:a.createElement("div",{style:{height:er(),width:p,bottom:i},className:"".concat(m,"-sticky-scroll")},a.createElement("div",{onMouseDown:T,ref:g,className:Y("".concat(m,"-sticky-scroll-bar"),_({},"".concat(m,"-sticky-scroll-bar-active"),k)),style:{width:"".concat(f,"px"),transform:"translate3d(".concat(b.scrollLeft,"px, 0, 0)")}}))};const sd=a.forwardRef(id);var Ga="rc-table",cd=[],dd={};function ud(){return"No Data"}function fd(e,t){var o=U({rowKey:"key",prefixCls:Ga,emptyText:ud},e),n=o.prefixCls,r=o.className,l=o.rowClassName,s=o.style,i=o.data,c=o.rowKey,d=o.scroll,m=o.tableLayout,u=o.direction,p=o.title,f=o.footer,g=o.summary,h=o.caption,v=o.id,b=o.showHeader,$=o.components,C=o.emptyText,x=o.onRow,S=o.onHeaderRow,k=o.measureRowRender,I=o.onScroll,E=o.internalHooks,y=o.transformColumns,T=o.internalRefs,O=o.tailor,M=o.getContainerWidth,B=o.sticky,w=o.rowHoverable,N=w===void 0?!0:w,R=i||cd,P=!!R.length,K=E===fn,D=a.useCallback(function(pe,ye){return rn($,pe)||ye},[$]),F=a.useMemo(function(){return typeof c=="function"?c:function(pe){var ye=pe&&pe[c];return ye}},[c]),A=D(["body"]),q=rd(),L=Ie(q,3),se=L[0],ce=L[1],ie=L[2],Q=ed(o,R,F),Z=Ie(Q,6),V=Z[0],te=Z[1],ne=Z[2],X=Z[3],J=Z[4],W=Z[5],H=d==null?void 0:d.x,ee=a.useState(0),le=Ie(ee,2),ue=le[0],Be=le[1],Re=Jc(U(U(U({},o),V),{},{expandable:!!V.expandedRowRender,columnTitle:V.columnTitle,expandedKeys:ne,getRowKey:F,onTriggerExpand:W,expandIcon:X,expandIconColumnIndex:V.expandIconColumnIndex,direction:u,scrollWidth:K&&O&&typeof H=="number"?H:null,clientWidth:ue}),K?y:null),z=Ie(Re,4),re=z[0],ae=z[1],xe=z[2],Se=z[3],$e=xe??H,Te=a.useMemo(function(){return{columns:re,flattenColumns:ae}},[re,ae]),Me=a.useRef(),De=a.useRef(),Ne=a.useRef(),oe=a.useRef();a.useImperativeHandle(t,function(){return{nativeElement:Me.current,scrollTo:function(ye){var Ae;if(Ne.current instanceof HTMLElement){var at=ye.index,We=ye.top,Ht=ye.key;if(yc(We)){var kt;(kt=Ne.current)===null||kt===void 0||kt.scrollTo({top:We})}else{var Pt,Jt=Ht??F(R[at]);(Pt=Ne.current.querySelector('[data-row-key="'.concat(Jt,'"]')))===null||Pt===void 0||Pt.scrollIntoView()}}else(Ae=Ne.current)!==null&&Ae!==void 0&&Ae.scrollTo&&Ne.current.scrollTo(ye)}}});var G=a.useRef(),ge=a.useState(!1),ke=Ie(ge,2),Oe=ke[0],we=ke[1],Ke=a.useState(!1),be=Ie(Ke,2),je=be[0],Ve=be[1],qe=a.useState(new Map),Ee=Ie(qe,2),Rt=Ee[0],it=Ee[1],_t=Dn(ae),ot=_t.map(function(pe){return Rt.get(pe)}),Ze=a.useMemo(function(){return ot},[ot.join("_")]),Je=ld(Ze,ae,u),Ge=d&&lo(d.y),Le=d&&lo($e)||!!V.fixed,st=Le&&ae.some(function(pe){var ye=pe.fixed;return ye}),Yt=a.useRef(),yt=ad(B,n),ut=yt.isSticky,mn=yt.offsetHeader,_n=yt.offsetSummary,jn=yt.offsetScroll,Hn=yt.stickyClassName,me=yt.container,fe=a.useMemo(function(){return g==null?void 0:g(R)},[g,R]),Pe=(Ge||ut)&&a.isValidElement(fe)&&fe.type===Kn&&fe.props.fixed,He,Ye,et;Ge&&(Ye={overflowY:P?"scroll":"auto",maxHeight:d.y}),Le&&(He={overflowX:"auto"},Ge||(Ye={overflowY:"hidden"}),et={width:$e===!0?"auto":$e,minWidth:"100%"});var rt=a.useCallback(function(pe,ye){it(function(Ae){if(Ae.get(pe)!==ye){var at=new Map(Ae);return at.set(pe,ye),at}return Ae})},[]),tt=od(),Qt=Ie(tt,2),zn=Qt[0],pn=Qt[1];function jt(pe,ye){ye&&(typeof ye=="function"?ye(pe):ye.scrollLeft!==pe&&(ye.scrollLeft=pe,ye.scrollLeft!==pe&&setTimeout(function(){ye.scrollLeft=pe},0)))}var ze=ct(function(pe){var ye=pe.currentTarget,Ae=pe.scrollLeft,at=u==="rtl",We=typeof Ae=="number"?Ae:ye.scrollLeft,Ht=ye||dd;if(!pn()||pn()===Ht){var kt;zn(Ht),jt(We,De.current),jt(We,Ne.current),jt(We,G.current),jt(We,(kt=Yt.current)===null||kt===void 0?void 0:kt.setScrollLeft)}var Pt=ye||De.current;if(Pt){var Jt=K&&O&&typeof $e=="number"?$e:Pt.scrollWidth,Xn=Pt.clientWidth;if(Jt===Xn){we(!1),Ve(!1);return}at?(we(-We0)):(we(We>0),Ve(We1?v-w:0,R=U(U(U({},E),d),{},{flex:"0 0 ".concat(w,"px"),width:"".concat(w,"px"),marginRight:N,pointerEvents:"auto"}),P=a.useMemo(function(){return u?M<=1:T===0||M===0||M>1},[M,T,u]);P?R.visibility="hidden":u&&(R.height=p==null?void 0:p(M));var K=P?function(){return null}:f,D={};return(M===0||T===0)&&(D.rowSpan=1,D.colSpan=1),a.createElement(Xt,Ce({className:Y(h,m),ellipsis:o.ellipsis,align:o.align,scope:o.rowScope,component:s,prefixCls:t.prefixCls,key:x,record:c,index:l,renderIndex:i,dataIndex:g,render:K,shouldCellUpdate:o.shouldCellUpdate},S,{appendNode:k,additionalProps:U(U({},I),{},{style:R},D)}))}var vd=["data","index","className","rowKey","style","extra","getHeight"],hd=a.forwardRef(function(e,t){var o=e.data,n=e.index,r=e.className,l=e.rowKey,s=e.style,i=e.extra,c=e.getHeight,d=lt(e,vd),m=o.record,u=o.indent,p=o.index,f=Fe(Xe,["prefixCls","flattenColumns","fixColumn","componentWidth","scrollX"]),g=f.scrollX,h=f.flattenColumns,v=f.prefixCls,b=f.fixColumn,$=f.componentWidth,C=Fe(Po,["getComponent"]),x=C.getComponent,S=Fa(m,l,n,u),k=x(["body","row"],"div"),I=x(["body","cell"],"div"),E=S.rowSupportExpand,y=S.expanded,T=S.rowProps,O=S.expandedRowRender,M=S.expandedRowClassName,B;if(E&&y){var w=O(m,n,u+1,y),N=Wa(M,m,n,u),R={};b&&(R={style:_({},"--virtual-width","".concat($,"px"))});var P="".concat(v,"-expanded-row-cell");B=a.createElement(k,{className:Y("".concat(v,"-expanded-row"),"".concat(v,"-expanded-row-level-").concat(u+1),N)},a.createElement(Xt,{component:I,prefixCls:v,className:Y(P,_({},"".concat(P,"-fixed"),b)),additionalProps:R},w))}var K=U(U({},s),{},{width:g});i&&(K.position="absolute",K.pointerEvents="none");var D=a.createElement(k,Ce({},T,d,{"data-row-key":l,ref:E?null:t,className:Y(r,"".concat(v,"-row"),T==null?void 0:T.className,_({},"".concat(v,"-row-extra"),i)),style:U(U({},K),T==null?void 0:T.style)}),h.map(function(F,A){return a.createElement(gd,{key:A,component:I,rowInfo:S,column:F,colIndex:A,indent:u,index:n,renderIndex:p,record:m,inverse:i,getHeight:c})}));return E?a.createElement("div",{ref:t},D,B):D}),Sr=qt(hd),bd=a.forwardRef(function(e,t){var o=e.data,n=e.onScroll,r=Fe(Xe,["flattenColumns","onColumnResize","getRowKey","prefixCls","expandedKeys","childrenColumnName","scrollX","direction"]),l=r.flattenColumns,s=r.onColumnResize,i=r.getRowKey,c=r.expandedKeys,d=r.prefixCls,m=r.childrenColumnName,u=r.scrollX,p=r.direction,f=Fe(Po),g=f.sticky,h=f.scrollY,v=f.listItemHeight,b=f.getComponent,$=f.onScroll,C=a.useRef(),x=za(o,m,c,i),S=a.useMemo(function(){var B=0;return l.map(function(w){var N=w.width,R=w.minWidth,P=w.key,K=Math.max(N||0,R||0);return B+=K,[P,K,B]})},[l]),k=a.useMemo(function(){return S.map(function(B){return B[2]})},[S]);a.useEffect(function(){S.forEach(function(B){var w=Ie(B,2),N=w[0],R=w[1];s(N,R)})},[S]),a.useImperativeHandle(t,function(){var B,w={scrollTo:function(R){var P;(P=C.current)===null||P===void 0||P.scrollTo(R)},nativeElement:(B=C.current)===null||B===void 0?void 0:B.nativeElement};return Object.defineProperty(w,"scrollLeft",{get:function(){var R;return((R=C.current)===null||R===void 0?void 0:R.getScrollInfo().x)||0},set:function(R){var P;(P=C.current)===null||P===void 0||P.scrollTo({left:R})}}),Object.defineProperty(w,"scrollTop",{get:function(){var R;return((R=C.current)===null||R===void 0?void 0:R.getScrollInfo().y)||0},set:function(R){var P;(P=C.current)===null||P===void 0||P.scrollTo({top:R})}}),w});var I=function(w,N){var R,P=(R=x[N])===null||R===void 0?void 0:R.record,K=w.onCell;if(K){var D,F=K(P,N);return(D=F==null?void 0:F.rowSpan)!==null&&D!==void 0?D:1}return 1},E=function(w){var N=w.start,R=w.end,P=w.getSize,K=w.offsetY;if(R<0)return null;for(var D=l.filter(function(ne){return I(ne,N)===0}),F=N,A=function(X){if(D=D.filter(function(J){return I(J,X)===0}),!D.length)return F=X,1},q=N;q>=0&&!A(q);q-=1);for(var L=l.filter(function(ne){return I(ne,R)!==1}),se=R,ce=function(X){if(L=L.filter(function(J){return I(J,X)!==1}),!L.length)return se=Math.max(X-1,R),1},ie=R;ie1})&&Q.push(X)},V=F;V<=se;V+=1)Z(V);var te=Q.map(function(ne){var X=x[ne],J=i(X.record,ne),W=function(le){var ue=ne+le-1,Be=i(x[ue].record,ue),Re=P(J,Be);return Re.bottom-Re.top},H=P(J);return a.createElement(Sr,{key:ne,data:X,rowKey:J,index:ne,style:{top:-K+H.top},extra:!0,getHeight:W})});return te},y=a.useMemo(function(){return{columnsOffset:k}},[k]),T="".concat(d,"-tbody"),O=b(["body","wrapper"]),M={};return g&&(M.position="sticky",M.bottom=0,gt(g)==="object"&&g.offsetScroll&&(M.bottom=g.offsetScroll)),a.createElement(Ya.Provider,{value:y},a.createElement(ca,{fullHeight:!1,ref:C,prefixCls:"".concat(T,"-virtual"),styles:{horizontalScrollBar:M},className:T,height:h,itemHeight:v||24,data:x,itemKey:function(w){return i(w.record)},component:O,scrollWidth:u,direction:p,onVirtualScroll:function(w){var N,R=w.x;n({currentTarget:(N=C.current)===null||N===void 0?void 0:N.nativeElement,scrollLeft:R})},onScroll:$,extraRender:E},function(B,w,N){var R=i(B.record,w);return a.createElement(Sr,{data:B,rowKey:R,index:w,style:N.style})}))}),yd=qt(bd),Cd=function(t,o){var n=o.ref,r=o.onScroll;return a.createElement(yd,{ref:n,data:t,onScroll:r})};function xd(e,t){var o=e.data,n=e.columns,r=e.scroll,l=e.sticky,s=e.prefixCls,i=s===void 0?Ga:s,c=e.className,d=e.listItemHeight,m=e.components,u=e.onScroll,p=r||{},f=p.x,g=p.y;typeof f!="number"&&(f=1),typeof g!="number"&&(g=500);var h=ct(function($,C){return rn(m,$)||C}),v=ct(u),b=a.useMemo(function(){return{sticky:l,scrollY:g,listItemHeight:d,getComponent:h,onScroll:v}},[l,g,d,h,v]);return a.createElement(Po.Provider,{value:b},a.createElement(Gt,Ce({},e,{className:Y(c,"".concat(i,"-virtual")),scroll:U(U({},r),{},{x:f}),components:U(U({},m),{},{body:o!=null&&o.length?Cd:void 0}),columns:n,internalHooks:fn,tailor:!0,ref:t})))}var Sd=a.forwardRef(xd);function Qa(e){return Ka(Sd,e)}Qa();const $d=e=>null,wd=e=>null;var To=a.createContext(null),Ed=a.createContext({}),Id=function(t){for(var o=t.prefixCls,n=t.level,r=t.isStart,l=t.isEnd,s="".concat(o,"-indent-unit"),i=[],c=0;c=0&&o.splice(n,1),o}function vt(e,t){var o=(e||[]).slice();return o.indexOf(t)===-1&&o.push(t),o}function Bo(e){return e.split("-")}function kd(e,t){var o=[],n=Qe(t,e);function r(){var l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];l.forEach(function(s){var i=s.key,c=s.children;o.push(i),r(c)})}return r(n.children),o}function Pd(e){if(e.parent){var t=Bo(e.pos);return Number(t[t.length-1])===e.parent.children.length-1}return!1}function Td(e){var t=Bo(e.pos);return Number(t[t.length-1])===0}function Er(e,t,o,n,r,l,s,i,c,d){var m,u=e.clientX,p=e.clientY,f=e.target.getBoundingClientRect(),g=f.top,h=f.height,v=(d==="rtl"?-1:1)*(((r==null?void 0:r.x)||0)-u),b=(v-12)/n,$=c.filter(function(R){var P;return(P=i[R])===null||P===void 0||(P=P.children)===null||P===void 0?void 0:P.length}),C=Qe(i,o.eventKey);if(p-1.5?l({dragNode:B,dropNode:w,dropPosition:1})?T=1:N=!1:l({dragNode:B,dropNode:w,dropPosition:0})?T=0:l({dragNode:B,dropNode:w,dropPosition:1})?T=1:N=!1:l({dragNode:B,dropNode:w,dropPosition:1})?T=1:N=!1,{dropPosition:T,dropLevelOffset:O,dropTargetKey:C.key,dropTargetPos:C.pos,dragOverNodeKey:y,dropContainerKey:T===0?null:((m=C.parent)===null||m===void 0?void 0:m.key)||null,dropAllowed:N}}function Ir(e,t){if(e){var o=t.multiple;return o?e.slice():e.length?[e[0]]:e}}function Qn(e){if(!e)return null;var t;if(Array.isArray(e))t={checkedKeys:e,halfCheckedKeys:void 0};else if(gt(e)==="object")t={checkedKeys:e.checked||void 0,halfCheckedKeys:e.halfChecked||void 0};else return $t(!1,"`checkedKeys` is not an array or an object"),null;return t}function so(e,t){var o=new Set;function n(r){if(!o.has(r)){var l=Qe(t,r);if(l){o.add(r);var s=l.parent,i=l.node;i.disabled||s&&n(s.key)}}}return(e||[]).forEach(function(r){n(r)}),de(o)}const Ct={},co="SELECT_ALL",uo="SELECT_INVERT",fo="SELECT_NONE",Nr=[],Za=(e,t,o=[])=>((t||[]).forEach(n=>{o.push(n),n&&typeof n=="object"&&e in n&&Za(e,n[e],o)}),o),Bd=(e,t)=>{const{preserveSelectedRowKeys:o,selectedRowKeys:n,defaultSelectedRowKeys:r,getCheckboxProps:l,getTitleCheckboxProps:s,onChange:i,onSelect:c,onSelectAll:d,onSelectInvert:m,onSelectNone:u,onSelectMultiple:p,columnWidth:f,type:g,selections:h,fixed:v,renderCell:b,hideSelectAll:$,checkStrictly:C=!0}=t||{},{prefixCls:x,data:S,pageData:k,getRecordByKey:I,getRowKey:E,expandType:y,childrenColumnName:T,locale:O,getPopupContainer:M}=e,B=cn(),[w,N]=Ki(X=>X),[R,P]=Pn(n||r||Nr,{value:n}),K=a.useRef(new Map),D=a.useCallback(X=>{if(o){const J=new Map;X.forEach(W=>{let H=I(W);!H&&K.current.has(W)&&(H=K.current.get(W)),J.set(W,H)}),K.current=J}},[I,o]);a.useEffect(()=>{D(R)},[R]);const F=a.useMemo(()=>Za(T,k),[T,k]),{keyEntities:A}=a.useMemo(()=>{if(C)return{keyEntities:null};let X=S;if(o){const J=new Set(F.map((H,ee)=>E(H,ee))),W=Array.from(K.current).reduce((H,[ee,le])=>J.has(ee)?H:H.concat(le),[]);X=[].concat(de(X),de(W))}return wo(X,{externalGetKey:E,childrenPropName:T})},[S,E,C,T,o,F]),q=a.useMemo(()=>{const X=new Map;return F.forEach((J,W)=>{const H=E(J,W),ee=(l?l(J):null)||{};X.set(H,ee)}),X},[F,E,l]),L=a.useCallback(X=>{const J=E(X);let W;return q.has(J)?W=q.get(E(X)):W=l?l(X):void 0,!!(W!=null&&W.disabled)},[q,E]),[se,ce]=a.useMemo(()=>{if(C)return[R||[],[]];const{checkedKeys:X,halfCheckedKeys:J}=zt(R,!0,A,L);return[X||[],J]},[R,C,A,L]),ie=a.useMemo(()=>{const X=g==="radio"?se.slice(0,1):se;return new Set(X)},[se,g]),Q=a.useMemo(()=>g==="radio"?new Set:new Set(ce),[ce,g]);a.useEffect(()=>{t||P(Nr)},[!!t]);const Z=a.useCallback((X,J)=>{let W,H;D(X),o?(W=X,H=X.map(ee=>K.current.get(ee))):(W=[],H=[],X.forEach(ee=>{const le=I(ee);le!==void 0&&(W.push(ee),H.push(le))})),P(W),i==null||i(W,H,{type:J})},[P,I,i,o]),V=a.useCallback((X,J,W,H)=>{if(c){const ee=W.map(le=>I(le));c(I(X),J,ee,H)}Z(W,"single")},[c,I,Z]),te=a.useMemo(()=>!h||$?null:(h===!0?[co,uo,fo]:h).map(J=>J===co?{key:"all",text:O.selectionAll,onSelect(){Z(S.map((W,H)=>E(W,H)).filter(W=>{const H=q.get(W);return!(H!=null&&H.disabled)||ie.has(W)}),"all")}}:J===uo?{key:"invert",text:O.selectInvert,onSelect(){const W=new Set(ie);k.forEach((ee,le)=>{const ue=E(ee,le),Be=q.get(ue);Be!=null&&Be.disabled||(W.has(ue)?W.delete(ue):W.add(ue))});const H=Array.from(W);m&&(B.deprecated(!1,"onSelectInvert","onChange"),m(H)),Z(H,"invert")}}:J===fo?{key:"none",text:O.selectNone,onSelect(){u==null||u(),Z(Array.from(ie).filter(W=>{const H=q.get(W);return H==null?void 0:H.disabled}),"none")}}:J).map(J=>Object.assign(Object.assign({},J),{onSelect:(...W)=>{var H,ee;(ee=J.onSelect)===null||ee===void 0||(H=ee).call.apply(H,[J].concat(W)),N(null)}})),[h,ie,k,E,m,Z]);return[a.useCallback(X=>{var J;if(!t)return X.filter(oe=>oe!==Ct);let W=de(X);const H=new Set(ie),ee=F.map(E).filter(oe=>!q.get(oe).disabled),le=ee.every(oe=>H.has(oe)),ue=ee.some(oe=>H.has(oe)),Be=()=>{const oe=[];le?ee.forEach(ge=>{H.delete(ge),oe.push(ge)}):ee.forEach(ge=>{H.has(ge)||(H.add(ge),oe.push(ge))});const G=Array.from(H);d==null||d(!le,G.map(ge=>I(ge)),oe.map(ge=>I(ge))),Z(G,"all"),N(null)};let Re,z;if(g!=="radio"){let oe;if(te){const je={getPopupContainer:M,items:te.map((Ve,qe)=>{const{key:Ee,text:Rt,onSelect:it}=Ve;return{key:Ee??qe,onClick:()=>{it==null||it(ee)},label:Rt}})};oe=a.createElement("div",{className:`${x}-selection-extra`},a.createElement(Eo,{menu:je,getPopupContainer:M},a.createElement("span",null,a.createElement(vi,null))))}const G=F.map((je,Ve)=>{const qe=E(je,Ve),Ee=q.get(qe)||{};return Object.assign({checked:H.has(qe)},Ee)}).filter(({disabled:je})=>je),ge=!!G.length&&G.length===F.length,ke=ge&&G.every(({checked:je})=>je),Oe=ge&&G.some(({checked:je})=>je),we=(s==null?void 0:s())||{},{onChange:Ke,disabled:be}=we;z=a.createElement(Wt,Object.assign({"aria-label":oe?"Custom selection":"Select all"},we,{checked:ge?ke:!!F.length&&le,indeterminate:ge?!ke&&Oe:!le&&ue,onChange:je=>{Be(),Ke==null||Ke(je)},disabled:be??(F.length===0||ge),skipGroup:!0})),Re=!$&&a.createElement("div",{className:`${x}-selection`},z,oe)}let re;g==="radio"?re=(oe,G,ge)=>{const ke=E(G,ge),Oe=H.has(ke),we=q.get(ke);return{node:a.createElement(dn,Object.assign({},we,{checked:Oe,onClick:Ke=>{var be;Ke.stopPropagation(),(be=we==null?void 0:we.onClick)===null||be===void 0||be.call(we,Ke)},onChange:Ke=>{var be;H.has(ke)||V(ke,!0,[ke],Ke.nativeEvent),(be=we==null?void 0:we.onChange)===null||be===void 0||be.call(we,Ke)}})),checked:Oe}}:re=(oe,G,ge)=>{var ke;const Oe=E(G,ge),we=H.has(Oe),Ke=Q.has(Oe),be=q.get(Oe);let je;return y==="nest"?je=Ke:je=(ke=be==null?void 0:be.indeterminate)!==null&&ke!==void 0?ke:Ke,{node:a.createElement(Wt,Object.assign({},be,{indeterminate:je,checked:we,skipGroup:!0,onClick:Ve=>{var qe;Ve.stopPropagation(),(qe=be==null?void 0:be.onClick)===null||qe===void 0||qe.call(be,Ve)},onChange:Ve=>{var qe;const{nativeEvent:Ee}=Ve,{shiftKey:Rt}=Ee,it=ee.indexOf(Oe),_t=se.some(ot=>ee.includes(ot));if(Rt&&C&&_t){const ot=w(it,ee,H),Ze=Array.from(H);p==null||p(!we,Ze.map(Je=>I(Je)),ot.map(Je=>I(Je))),Z(Ze,"multiple")}else{const ot=se;if(C){const Ze=we?ft(ot,Oe):vt(ot,Oe);V(Oe,!we,Ze,Ee)}else{const Ze=zt([].concat(de(ot),[Oe]),!0,A,L),{checkedKeys:Je,halfCheckedKeys:Ge}=Ze;let Le=Je;if(we){const st=new Set(Je);st.delete(Oe),Le=zt(Array.from(st),{halfCheckedKeys:Ge},A,L).checkedKeys}V(Oe,!we,Le,Ee)}}N(we?null:it),(qe=be==null?void 0:be.onChange)===null||qe===void 0||qe.call(be,Ve)}})),checked:we}};const ae=(oe,G,ge)=>{const{node:ke,checked:Oe}=re(oe,G,ge);return b?b(Oe,G,ge,ke):ke};if(!W.includes(Ct))if(W.findIndex(oe=>{var G;return((G=oe[nn])===null||G===void 0?void 0:G.columnType)==="EXPAND_COLUMN"})===0){const[oe,...G]=W;W=[oe,Ct].concat(de(G))}else W=[Ct].concat(de(W));const xe=W.indexOf(Ct);W=W.filter((oe,G)=>oe!==Ct||G===xe);const Se=W[xe-1],$e=W[xe+1];let Te=v;Te===void 0&&(($e==null?void 0:$e.fixed)!==void 0?Te=$e.fixed:(Se==null?void 0:Se.fixed)!==void 0&&(Te=Se.fixed)),Te&&Se&&((J=Se[nn])===null||J===void 0?void 0:J.columnType)==="EXPAND_COLUMN"&&Se.fixed===void 0&&(Se.fixed=Te);const Me=Y(`${x}-selection-col`,{[`${x}-selection-col-with-dropdown`]:h&&g==="checkbox"}),De=()=>t!=null&&t.columnTitle?typeof t.columnTitle=="function"?t.columnTitle(z):t.columnTitle:Re,Ne={fixed:Te,width:f,className:`${x}-selection-column`,title:De(),render:ae,onCell:t.onCell,align:t.align,[nn]:{className:Me}};return W.map(oe=>oe===Ct?Ne:oe)},[E,F,t,se,ie,Q,f,te,y,q,p,V,L]),ie]};function Md(e){return t=>{const{prefixCls:o,onExpand:n,record:r,expanded:l,expandable:s}=t,i=`${o}-row-expand-icon`;return a.createElement("button",{type:"button",onClick:c=>{n(r,c),c.stopPropagation()},className:Y(i,{[`${i}-spaced`]:!s,[`${i}-expanded`]:s&&l,[`${i}-collapsed`]:s&&!l}),"aria-label":l?e.collapse:e.expand,"aria-expanded":l})}}function Dd(e){return(o,n)=>{const r=o.querySelector(`.${e}-container`);let l=n;if(r){const s=getComputedStyle(r),i=Number.parseInt(s.borderLeftWidth,10),c=Number.parseInt(s.borderRightWidth,10);l=n-i-c}return l}}const Et=(e,t)=>"key"in e&&e.key!==void 0&&e.key!==null?e.key:e.dataIndex?Array.isArray(e.dataIndex)?e.dataIndex.join("."):e.dataIndex:t;function Ut(e,t){return t?`${t}-${e}`:`${e}`}const Ln=(e,t)=>typeof e=="function"?e(t):e,Kd=(e,t)=>{const o=Ln(e,t);return Object.prototype.toString.call(o)==="[object Object]"?"":o};var Ld={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V642H349v196zm531.1-684H143.9c-24.5 0-39.8 26.7-27.5 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"}}]},name:"filter",theme:"filled"},_d=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:Ld}))},jd=a.forwardRef(_d),Hd=function(t){var o=t.dropPosition,n=t.dropLevelOffset,r=t.indent,l={pointerEvents:"none",position:"absolute",right:0,backgroundColor:"red",height:2};switch(o){case-1:l.top=0,l.left=-n*r;break;case 1:l.bottom=0,l.left=-n*r;break;case 0:l.bottom=0,l.left=r;break}return he.createElement("div",{style:l})};function Ja(e){if(e==null)throw new TypeError("Cannot destructure "+e)}function zd(e,t){var o=a.useState(!1),n=Ie(o,2),r=n[0],l=n[1];mt(function(){if(r)return e(),function(){t()}},[r]),mt(function(){return l(!0),function(){l(!1)}},[])}var Fd=["className","style","motion","motionNodes","motionType","onMotionStart","onMotionEnd","active","treeNodeRequiredProps"],Ad=a.forwardRef(function(e,t){var o=e.className,n=e.style,r=e.motion,l=e.motionNodes,s=e.motionType,i=e.onMotionStart,c=e.onMotionEnd,d=e.active,m=e.treeNodeRequiredProps,u=lt(e,Fd),p=a.useState(!0),f=Ie(p,2),g=f[0],h=f[1],v=a.useContext(To),b=v.prefixCls,$=l&&s!=="hide";mt(function(){l&&$!==g&&h($)},[l]);var C=function(){l&&i()},x=a.useRef(!1),S=function(){l&&!x.current&&(x.current=!0,c())};zd(C,S);var k=function(E){$===E&&S()};return l?a.createElement(ta,Ce({ref:t,visible:g},r,{motionAppear:s==="show",onVisibleChanged:k}),function(I,E){var y=I.className,T=I.style;return a.createElement("div",{ref:E,className:Y("".concat(b,"-treenode-motion"),y),style:T},l.map(function(O){var M=Object.assign({},(Ja(O.data),O.data)),B=O.title,w=O.key,N=O.isStart,R=O.isEnd;delete M.children;var P=tn(w,m);return a.createElement(ln,Ce({},M,P,{title:B,active:d,data:O.data,key:w,isStart:N,isEnd:R}))}))}):a.createElement(ln,Ce({domRef:t,className:o,style:n},u,{active:d}))});function Wd(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],o=e.length,n=t.length;if(Math.abs(o-n)!==1)return{add:!1,key:null};function r(l,s){var i=new Map;l.forEach(function(d){i.set(d,!0)});var c=s.filter(function(d){return!i.has(d)});return c.length===1?c[0]:null}return o ").concat(t);return t}var Gd=a.forwardRef(function(e,t){var o=e.prefixCls,n=e.data;e.selectable,e.checkable;var r=e.expandedKeys,l=e.selectedKeys,s=e.checkedKeys,i=e.loadedKeys,c=e.loadingKeys,d=e.halfCheckedKeys,m=e.keyEntities,u=e.disabled,p=e.dragging,f=e.dragOverNodeKey,g=e.dropPosition,h=e.motion,v=e.height,b=e.itemHeight,$=e.virtual,C=e.scrollWidth,x=e.focusable,S=e.activeItem,k=e.focused,I=e.tabIndex,E=e.onKeyDown,y=e.onFocus,T=e.onBlur,O=e.onActiveChange,M=e.onListChangeStart,B=e.onListChangeEnd,w=lt(e,Vd),N=a.useRef(null),R=a.useRef(null);a.useImperativeHandle(t,function(){return{scrollTo:function(re){N.current.scrollTo(re)},getIndentWidth:function(){return R.current.offsetWidth}}});var P=a.useState(r),K=Ie(P,2),D=K[0],F=K[1],A=a.useState(n),q=Ie(A,2),L=q[0],se=q[1],ce=a.useState(n),ie=Ie(ce,2),Q=ie[0],Z=ie[1],V=a.useState([]),te=Ie(V,2),ne=te[0],X=te[1],J=a.useState(null),W=Ie(J,2),H=W[0],ee=W[1],le=a.useRef(n);le.current=n;function ue(){var z=le.current;se(z),Z(z),X([]),ee(null),B()}mt(function(){F(r);var z=Wd(D,r);if(z.key!==null)if(z.add){var re=L.findIndex(function(Me){var De=Me.key;return De===z.key}),ae=Pr(Or(L,n,z.key),$,v,b),xe=L.slice();xe.splice(re+1,0,kr),Z(xe),X(ae),ee("show")}else{var Se=n.findIndex(function(Me){var De=Me.key;return De===z.key}),$e=Pr(Or(n,L,z.key),$,v,b),Te=n.slice();Te.splice(Se+1,0,kr),Z(Te),X($e),ee("hide")}else L!==n&&(se(n),Z(n))},[r,n]),a.useEffect(function(){p||ue()},[p]);var Be=h?Q:n,Re={expandedKeys:r,selectedKeys:l,loadedKeys:i,loadingKeys:c,checkedKeys:s,halfCheckedKeys:d,dragOverNodeKey:f,dropPosition:g,keyEntities:m};return a.createElement(a.Fragment,null,k&&S&&a.createElement("span",{style:Rr,"aria-live":"assertive"},Xd(S)),a.createElement("div",null,a.createElement("input",{style:Rr,disabled:x===!1||u,tabIndex:x!==!1?I:null,onKeyDown:E,onFocus:y,onBlur:T,value:"",onChange:qd,"aria-label":"for screen reader"})),a.createElement("div",{className:"".concat(o,"-treenode"),"aria-hidden":!0,style:{position:"absolute",pointerEvents:"none",visibility:"hidden",height:0,overflow:"hidden",border:0,padding:0}},a.createElement("div",{className:"".concat(o,"-indent")},a.createElement("div",{ref:R,className:"".concat(o,"-indent-unit")}))),a.createElement(ca,Ce({},w,{data:Be,itemKey:Tr,height:v,fullHeight:!1,virtual:$,itemHeight:b,scrollWidth:C,prefixCls:"".concat(o,"-list"),ref:N,role:"tree",onVisibleChange:function(re){re.every(function(ae){return Tr(ae)!==Kt})&&ue()}}),function(z){var re=z.pos,ae=Object.assign({},(Ja(z.data),z.data)),xe=z.title,Se=z.key,$e=z.isStart,Te=z.isEnd,Me=un(Se,re);delete ae.key,delete ae.children;var De=tn(Me,Re);return a.createElement(Ad,Ce({},ae,De,{title:xe,active:!!S&&Se===S.key,pos:re,data:z.data,isStart:$e,isEnd:Te,motion:h,motionNodes:Se===Kt?ne:null,motionType:H,onMotionStart:M,onMotionEnd:ue,treeNodeRequiredProps:Re,onMouseMove:function(){O(null)}}))}))}),Ud=10,Mo=(function(e){hi(o,e);var t=bi(o);function o(){var n;yi(this,o);for(var r=arguments.length,l=new Array(r),s=0;s2&&arguments[2]!==void 0?arguments[2]:!1,u=n.state,p=u.dragChildrenKeys,f=u.dropPosition,g=u.dropTargetKey,h=u.dropTargetPos,v=u.dropAllowed;if(v){var b=n.props.onDrop;if(n.setState({dragOverNodeKey:null}),n.cleanDragState(),g!==null){var $=U(U({},tn(g,n.getTreeNodeRequiredProps())),{},{active:((d=n.getActiveItem())===null||d===void 0?void 0:d.key)===g,data:Qe(n.state.keyEntities,g).node}),C=p.includes(g);$t(!C,"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");var x=Bo(h),S={event:i,node:_e($),dragNode:n.dragNodeProps?_e(n.dragNodeProps):null,dragNodesKeys:[n.dragNodeProps.eventKey].concat(p),dropToGap:f!==0,dropPosition:f+Number(x[x.length-1])};m||b==null||b(S),n.dragNodeProps=null}}}),_(ve(n),"cleanDragState",function(){var i=n.state.draggingNodeKey;i!==null&&n.setState({draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),n.dragStartMousePosition=null,n.currentMouseOverDroppableNodeKey=null}),_(ve(n),"triggerExpandActionExpand",function(i,c){var d=n.state,m=d.expandedKeys,u=d.flattenNodes,p=c.expanded,f=c.key,g=c.isLeaf;if(!(g||i.shiftKey||i.metaKey||i.ctrlKey)){var h=u.filter(function(b){return b.key===f})[0],v=_e(U(U({},tn(f,n.getTreeNodeRequiredProps())),{},{data:h.data}));n.setExpandedKeys(p?ft(m,f):vt(m,f)),n.onNodeExpand(i,v)}}),_(ve(n),"onNodeClick",function(i,c){var d=n.props,m=d.onClick,u=d.expandAction;u==="click"&&n.triggerExpandActionExpand(i,c),m==null||m(i,c)}),_(ve(n),"onNodeDoubleClick",function(i,c){var d=n.props,m=d.onDoubleClick,u=d.expandAction;u==="doubleClick"&&n.triggerExpandActionExpand(i,c),m==null||m(i,c)}),_(ve(n),"onNodeSelect",function(i,c){var d=n.state.selectedKeys,m=n.state,u=m.keyEntities,p=m.fieldNames,f=n.props,g=f.onSelect,h=f.multiple,v=c.selected,b=c[p.key],$=!v;$?h?d=vt(d,b):d=[b]:d=ft(d,b);var C=d.map(function(x){var S=Qe(u,x);return S?S.node:null}).filter(Boolean);n.setUncontrolledState({selectedKeys:d}),g==null||g(d,{event:"select",selected:$,node:c,selectedNodes:C,nativeEvent:i.nativeEvent})}),_(ve(n),"onNodeCheck",function(i,c,d){var m=n.state,u=m.keyEntities,p=m.checkedKeys,f=m.halfCheckedKeys,g=n.props,h=g.checkStrictly,v=g.onCheck,b=c.key,$,C={event:"check",node:c,checked:d,nativeEvent:i.nativeEvent};if(h){var x=d?vt(p,b):ft(p,b),S=ft(f,b);$={checked:x,halfChecked:S},C.checkedNodes=x.map(function(O){return Qe(u,O)}).filter(Boolean).map(function(O){return O.node}),n.setUncontrolledState({checkedKeys:x})}else{var k=zt([].concat(de(p),[b]),!0,u),I=k.checkedKeys,E=k.halfCheckedKeys;if(!d){var y=new Set(I);y.delete(b);var T=zt(Array.from(y),{halfCheckedKeys:E},u);I=T.checkedKeys,E=T.halfCheckedKeys}$=I,C.checkedNodes=[],C.checkedNodesPositions=[],C.halfCheckedKeys=E,I.forEach(function(O){var M=Qe(u,O);if(M){var B=M.node,w=M.pos;C.checkedNodes.push(B),C.checkedNodesPositions.push({node:B,pos:w})}}),n.setUncontrolledState({checkedKeys:I},!1,{halfCheckedKeys:E})}v==null||v($,C)}),_(ve(n),"onNodeLoad",function(i){var c,d=i.key,m=n.state.keyEntities,u=Qe(m,d);if(!(u!=null&&(c=u.children)!==null&&c!==void 0&&c.length)){var p=new Promise(function(f,g){n.setState(function(h){var v=h.loadedKeys,b=v===void 0?[]:v,$=h.loadingKeys,C=$===void 0?[]:$,x=n.props,S=x.loadData,k=x.onLoad;if(!S||b.includes(d)||C.includes(d))return null;var I=S(i);return I.then(function(){var E=n.state.loadedKeys,y=vt(E,d);k==null||k(y,{event:"load",node:i}),n.setUncontrolledState({loadedKeys:y}),n.setState(function(T){return{loadingKeys:ft(T.loadingKeys,d)}}),f()}).catch(function(E){if(n.setState(function(T){return{loadingKeys:ft(T.loadingKeys,d)}}),n.loadingRetryTimes[d]=(n.loadingRetryTimes[d]||0)+1,n.loadingRetryTimes[d]>=Ud){var y=n.state.loadedKeys;$t(!1,"Retry for `loadData` many times but still failed. No more retry."),n.setUncontrolledState({loadedKeys:vt(y,d)}),f()}g(E)}),{loadingKeys:vt(C,d)}})});return p.catch(function(){}),p}}),_(ve(n),"onNodeMouseEnter",function(i,c){var d=n.props.onMouseEnter;d==null||d({event:i,node:c})}),_(ve(n),"onNodeMouseLeave",function(i,c){var d=n.props.onMouseLeave;d==null||d({event:i,node:c})}),_(ve(n),"onNodeContextMenu",function(i,c){var d=n.props.onRightClick;d&&(i.preventDefault(),d({event:i,node:c}))}),_(ve(n),"onFocus",function(){var i=n.props.onFocus;n.setState({focused:!0});for(var c=arguments.length,d=new Array(c),m=0;m1&&arguments[1]!==void 0?arguments[1]:!1,d=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;if(!n.destroyed){var m=!1,u=!0,p={};Object.keys(i).forEach(function(f){if(n.props.hasOwnProperty(f)){u=!1;return}m=!0,p[f]=i[f]}),m&&(!c||u)&&n.setState(U(U({},p),d))}}),_(ve(n),"scrollTo",function(i){n.listRef.current.scrollTo(i)}),n}return Ci(o,[{key:"componentDidMount",value:function(){this.destroyed=!1,this.onUpdated()}},{key:"componentDidUpdate",value:function(){this.onUpdated()}},{key:"onUpdated",value:function(){var r=this.props,l=r.activeKey,s=r.itemScrollOffset,i=s===void 0?0:s;l!==void 0&&l!==this.state.activeKey&&(this.setState({activeKey:l}),l!==null&&this.scrollTo({key:l,offset:i}))}},{key:"componentWillUnmount",value:function(){window.removeEventListener("dragend",this.onWindowDragEnd),this.destroyed=!0}},{key:"resetDragState",value:function(){this.setState({dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})}},{key:"render",value:function(){var r=this.state,l=r.focused,s=r.flattenNodes,i=r.keyEntities,c=r.draggingNodeKey,d=r.activeKey,m=r.dropLevelOffset,u=r.dropContainerKey,p=r.dropTargetKey,f=r.dropPosition,g=r.dragOverNodeKey,h=r.indent,v=this.props,b=v.prefixCls,$=v.className,C=v.style,x=v.showLine,S=v.focusable,k=v.tabIndex,I=k===void 0?0:k,E=v.selectable,y=v.showIcon,T=v.icon,O=v.switcherIcon,M=v.draggable,B=v.checkable,w=v.checkStrictly,N=v.disabled,R=v.motion,P=v.loadData,K=v.filterTreeNode,D=v.height,F=v.itemHeight,A=v.scrollWidth,q=v.virtual,L=v.titleRender,se=v.dropIndicatorRender,ce=v.onContextMenu,ie=v.onScroll,Q=v.direction,Z=v.rootClassName,V=v.rootStyle,te=on(this.props,{aria:!0,data:!0}),ne;M&&(gt(M)==="object"?ne=M:typeof M=="function"?ne={nodeDraggable:M}:ne={});var X={prefixCls:b,selectable:E,showIcon:y,icon:T,switcherIcon:O,draggable:ne,draggingNodeKey:c,checkable:B,checkStrictly:w,disabled:N,keyEntities:i,dropLevelOffset:m,dropContainerKey:u,dropTargetKey:p,dropPosition:f,dragOverNodeKey:g,indent:h,direction:Q,dropIndicatorRender:se,loadData:P,filterTreeNode:K,titleRender:L,onNodeClick:this.onNodeClick,onNodeDoubleClick:this.onNodeDoubleClick,onNodeExpand:this.onNodeExpand,onNodeSelect:this.onNodeSelect,onNodeCheck:this.onNodeCheck,onNodeLoad:this.onNodeLoad,onNodeMouseEnter:this.onNodeMouseEnter,onNodeMouseLeave:this.onNodeMouseLeave,onNodeContextMenu:this.onNodeContextMenu,onNodeDragStart:this.onNodeDragStart,onNodeDragEnter:this.onNodeDragEnter,onNodeDragOver:this.onNodeDragOver,onNodeDragLeave:this.onNodeDragLeave,onNodeDragEnd:this.onNodeDragEnd,onNodeDrop:this.onNodeDrop};return a.createElement(To.Provider,{value:X},a.createElement("div",{className:Y(b,$,Z,_(_(_({},"".concat(b,"-show-line"),x),"".concat(b,"-focused"),l),"".concat(b,"-active-focused"),d!==null)),style:V},a.createElement(Gd,Ce({ref:this.listRef,prefixCls:b,style:C,data:s,disabled:N,selectable:E,checkable:!!B,motion:R,dragging:c!==null,height:D,itemHeight:F,virtual:q,focusable:S,focused:l,tabIndex:I,activeItem:this.getActiveItem(),onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,onActiveChange:this.onActiveChange,onListChangeStart:this.onListChangeStart,onListChangeEnd:this.onListChangeEnd,onContextMenu:ce,onScroll:ie,scrollWidth:A},this.getTreeNodeRequiredProps(),te))))}}],[{key:"getDerivedStateFromProps",value:function(r,l){var s=l.prevProps,i={prevProps:r};function c(I){return!s&&r.hasOwnProperty(I)||s&&s[I]!==r[I]}var d,m=l.fieldNames;if(c("fieldNames")&&(m=At(r.fieldNames),i.fieldNames=m),c("treeData")?d=r.treeData:c("children")&&($t(!1,"`children` of Tree is deprecated. Please use `treeData` instead."),d=wa(r.children)),d){i.treeData=d;var u=wo(d,{fieldNames:m});i.keyEntities=U(_({},Kt,el),u.keyEntities)}var p=i.keyEntities||l.keyEntities;if(c("expandedKeys")||s&&c("autoExpandParent"))i.expandedKeys=r.autoExpandParent||!s&&r.defaultExpandParent?so(r.expandedKeys,p):r.expandedKeys;else if(!s&&r.defaultExpandAll){var f=U({},p);delete f[Kt];var g=[];Object.keys(f).forEach(function(I){var E=f[I];E.children&&E.children.length&&g.push(E.key)}),i.expandedKeys=g}else!s&&r.defaultExpandedKeys&&(i.expandedKeys=r.autoExpandParent||r.defaultExpandParent?so(r.defaultExpandedKeys,p):r.defaultExpandedKeys);if(i.expandedKeys||delete i.expandedKeys,d||i.expandedKeys){var h=Un(d||l.treeData,i.expandedKeys||l.expandedKeys,m);i.flattenNodes=h}if(r.selectable&&(c("selectedKeys")?i.selectedKeys=Ir(r.selectedKeys,r):!s&&r.defaultSelectedKeys&&(i.selectedKeys=Ir(r.defaultSelectedKeys,r))),r.checkable){var v;if(c("checkedKeys")?v=Qn(r.checkedKeys)||{}:!s&&r.defaultCheckedKeys?v=Qn(r.defaultCheckedKeys)||{}:d&&(v=Qn(r.checkedKeys)||{checkedKeys:l.checkedKeys,halfCheckedKeys:l.halfCheckedKeys}),v){var b=v,$=b.checkedKeys,C=$===void 0?[]:$,x=b.halfCheckedKeys,S=x===void 0?[]:x;if(!r.checkStrictly){var k=zt(C,!0,p);C=k.checkedKeys,S=k.halfCheckedKeys}i.checkedKeys=C,i.halfCheckedKeys=S}}return c("loadedKeys")&&(i.loadedKeys=r.loadedKeys),i}}]),o})(a.Component);_(Mo,"defaultProps",{prefixCls:"rc-tree",showLine:!1,showIcon:!0,selectable:!0,multiple:!1,checkable:!1,disabled:!1,checkStrictly:!1,draggable:!1,defaultExpandParent:!0,autoExpandParent:!1,defaultExpandAll:!1,defaultExpandedKeys:[],defaultCheckedKeys:[],defaultSelectedKeys:[],dropIndicatorRender:Hd,allowDrop:function(){return!0},expandAction:!1});_(Mo,"TreeNode",ln);var Yd={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file",theme:"outlined"},Qd=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:Yd}))},tl=a.forwardRef(Qd),Zd={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 444H820V330.4c0-17.7-14.3-32-32-32H473L355.7 186.2a8.15 8.15 0 00-5.5-2.2H96c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h698c13 0 24.8-7.9 29.7-20l134-332c1.5-3.8 2.3-7.9 2.3-12 0-17.7-14.3-32-32-32zM136 256h188.5l119.6 114.4H748V444H238c-13 0-24.8 7.9-29.7 20L136 643.2V256zm635.3 512H159l103.3-256h612.4L771.3 768z"}}]},name:"folder-open",theme:"outlined"},Jd=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:Zd}))},eu=a.forwardRef(Jd),tu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 298.4H521L403.7 186.2a8.15 8.15 0 00-5.5-2.2H144c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V330.4c0-17.7-14.3-32-32-32zM840 768H184V256h188.5l119.6 114.4H840V768z"}}]},name:"folder",theme:"outlined"},nu=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:tu}))},ou=a.forwardRef(nu),ru={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M300 276.5a56 56 0 1056-97 56 56 0 00-56 97zm0 284a56 56 0 1056-97 56 56 0 00-56 97zM640 228a56 56 0 10112 0 56 56 0 00-112 0zm0 284a56 56 0 10112 0 56 56 0 00-112 0zM300 844.5a56 56 0 1056-97 56 56 0 00-56 97zM640 796a56 56 0 10112 0 56 56 0 00-112 0z"}}]},name:"holder",theme:"outlined"},au=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:ru}))},lu=a.forwardRef(au);const iu=({treeCls:e,treeNodeCls:t,directoryNodeSelectedBg:o,directoryNodeSelectedColor:n,motionDurationMid:r,borderRadius:l,controlItemBgHover:s})=>({[`${e}${e}-directory ${t}`]:{[`${e}-node-content-wrapper`]:{position:"static",[`&:has(${e}-drop-indicator)`]:{position:"relative"},[`> *:not(${e}-drop-indicator)`]:{position:"relative"},"&:hover":{background:"transparent"},"&:before":{position:"absolute",inset:0,transition:`background-color ${r}`,content:'""',borderRadius:l},"&:hover:before":{background:s}},[`${e}-switcher, ${e}-checkbox, ${e}-draggable-icon`]:{zIndex:1},"&-selected":{background:o,borderRadius:l,[`${e}-switcher, ${e}-draggable-icon`]:{color:n},[`${e}-node-content-wrapper`]:{color:n,background:"transparent","&, &:hover":{color:n},"&:before, &:hover:before":{background:o}}}}}),su=new xi("ant-tree-node-fx-do-not-use",{"0%":{opacity:0},"100%":{opacity:1}}),cu=(e,t)=>({[`.${e}-switcher-icon`]:{display:"inline-block",fontSize:10,verticalAlign:"baseline",svg:{transition:`transform ${t.motionDurationSlow}`}}}),du=(e,t)=>({[`.${e}-drop-indicator`]:{position:"absolute",zIndex:1,height:2,backgroundColor:t.colorPrimary,borderRadius:1,pointerEvents:"none","&:after":{position:"absolute",top:-3,insetInlineStart:-6,width:8,height:8,backgroundColor:"transparent",border:`${j(t.lineWidthBold)} solid ${t.colorPrimary}`,borderRadius:"50%",content:'""'}}}),uu=(e,t)=>{const{treeCls:o,treeNodeCls:n,treeNodePadding:r,titleHeight:l,indentSize:s,nodeSelectedBg:i,nodeHoverBg:c,colorTextQuaternary:d,controlItemBgActiveDisabled:m}=t;return{[o]:Object.assign(Object.assign({},nt(t)),{"--rc-virtual-list-scrollbar-bg":t.colorSplit,background:t.colorBgContainer,borderRadius:t.borderRadius,transition:`background-color ${t.motionDurationSlow}`,"&-rtl":{direction:"rtl"},[`&${o}-rtl ${o}-switcher_close ${o}-switcher-icon svg`]:{transform:"rotate(90deg)"},[`&-focused:not(:hover):not(${o}-active-focused)`]:sn(t),[`${o}-list-holder-inner`]:{alignItems:"flex-start"},[`&${o}-block-node`]:{[`${o}-list-holder-inner`]:{alignItems:"stretch",[`${o}-node-content-wrapper`]:{flex:"auto"},[`${n}.dragging:after`]:{position:"absolute",inset:0,border:`1px solid ${t.colorPrimary}`,opacity:0,animationName:su,animationDuration:t.motionDurationSlow,animationPlayState:"running",animationFillMode:"forwards",content:'""',pointerEvents:"none",borderRadius:t.borderRadius}}},[n]:{display:"flex",alignItems:"flex-start",marginBottom:r,lineHeight:j(l),position:"relative","&:before":{content:'""',position:"absolute",zIndex:1,insetInlineStart:0,width:"100%",top:"100%",height:r},[`&-disabled ${o}-node-content-wrapper`]:{color:t.colorTextDisabled,cursor:"not-allowed","&:hover":{background:"transparent"}},[`${o}-checkbox-disabled + ${o}-node-selected,&${n}-disabled${n}-selected ${o}-node-content-wrapper`]:{backgroundColor:m},[`${o}-checkbox-disabled`]:{pointerEvents:"unset"},[`&:not(${n}-disabled)`]:{[`${o}-node-content-wrapper`]:{"&:hover":{color:t.nodeHoverColor}}},[`&-active ${o}-node-content-wrapper`]:{background:t.controlItemBgHover},[`&:not(${n}-disabled).filter-node ${o}-title`]:{color:t.colorPrimary,fontWeight:t.fontWeightStrong},"&-draggable":{cursor:"grab",[`${o}-draggable-icon`]:{flexShrink:0,width:l,textAlign:"center",visibility:"visible",color:d},[`&${n}-disabled ${o}-draggable-icon`]:{visibility:"hidden"}}},[`${o}-indent`]:{alignSelf:"stretch",whiteSpace:"nowrap",userSelect:"none","&-unit":{display:"inline-block",width:s}},[`${o}-draggable-icon`]:{visibility:"hidden"},[`${o}-switcher, ${o}-checkbox`]:{marginInlineEnd:t.calc(t.calc(l).sub(t.controlInteractiveSize)).div(2).equal()},[`${o}-switcher`]:Object.assign(Object.assign({},cu(e,t)),{position:"relative",flex:"none",alignSelf:"stretch",width:l,textAlign:"center",cursor:"pointer",userSelect:"none",transition:`all ${t.motionDurationSlow}`,"&-noop":{cursor:"unset"},"&:before":{pointerEvents:"none",content:'""',width:l,height:l,position:"absolute",left:{_skip_check_:!0,value:0},top:0,borderRadius:t.borderRadius,transition:`all ${t.motionDurationSlow}`},[`&:not(${o}-switcher-noop):hover:before`]:{backgroundColor:t.colorBgTextHover},[`&_close ${o}-switcher-icon svg`]:{transform:"rotate(-90deg)"},"&-loading-icon":{color:t.colorPrimary},"&-leaf-line":{position:"relative",zIndex:1,display:"inline-block",width:"100%",height:"100%","&:before":{position:"absolute",top:0,insetInlineEnd:t.calc(l).div(2).equal(),bottom:t.calc(r).mul(-1).equal(),marginInlineStart:-1,borderInlineEnd:`1px solid ${t.colorBorder}`,content:'""'},"&:after":{position:"absolute",width:t.calc(t.calc(l).div(2).equal()).mul(.8).equal(),height:t.calc(l).div(2).equal(),borderBottom:`1px solid ${t.colorBorder}`,content:'""'}}}),[`${o}-node-content-wrapper`]:Object.assign(Object.assign({position:"relative",minHeight:l,paddingBlock:0,paddingInline:t.paddingXS,background:"transparent",borderRadius:t.borderRadius,cursor:"pointer",transition:`all ${t.motionDurationMid}, border 0s, line-height 0s, box-shadow 0s`},du(e,t)),{"&:hover":{backgroundColor:c},[`&${o}-node-selected`]:{color:t.nodeSelectedColor,backgroundColor:i},[`${o}-iconEle`]:{display:"inline-block",width:l,height:l,textAlign:"center",verticalAlign:"top","&:empty":{display:"none"}}}),[`${o}-unselectable ${o}-node-content-wrapper:hover`]:{backgroundColor:"transparent"},[`${n}.drop-container > [draggable]`]:{boxShadow:`0 0 0 2px ${t.colorPrimary}`},"&-show-line":{[`${o}-indent-unit`]:{position:"relative",height:"100%","&:before":{position:"absolute",top:0,insetInlineEnd:t.calc(l).div(2).equal(),bottom:t.calc(r).mul(-1).equal(),borderInlineEnd:`1px solid ${t.colorBorder}`,content:'""'},"&-end:before":{display:"none"}},[`${o}-switcher`]:{background:"transparent","&-line-icon":{verticalAlign:"-0.15em"}}},[`${n}-leaf-last ${o}-switcher-leaf-line:before`]:{top:"auto !important",bottom:"auto !important",height:`${j(t.calc(l).div(2).equal())} !important`}})}},fu=(e,t,o=!0)=>{const n=`.${e}`,r=`${n}-treenode`,l=t.calc(t.paddingXS).div(2).equal(),s=wt(t,{treeCls:n,treeNodeCls:r,treeNodePadding:l});return[uu(e,s),o&&iu(s)].filter(Boolean)},mu=e=>{const{controlHeightSM:t,controlItemBgHover:o,controlItemBgActive:n}=e,r=t;return{titleHeight:r,indentSize:r,nodeHoverBg:o,nodeHoverColor:e.colorText,nodeSelectedBg:n,nodeSelectedColor:e.colorText}},pu=e=>{const{colorTextLightSolid:t,colorPrimary:o}=e;return Object.assign(Object.assign({},mu(e)),{directoryNodeSelectedColor:t,directoryNodeSelectedBg:o})},gu=Lt("Tree",(e,{prefixCls:t})=>[{[e.componentCls]:Ia(`${t}-checkbox`,e)},fu(t,e),$o(e)],pu),Br=4;function vu(e){const{dropPosition:t,dropLevelOffset:o,prefixCls:n,indent:r,direction:l="ltr"}=e,s=l==="ltr"?"left":"right",i=l==="ltr"?"right":"left",c={[s]:-o*r+Br,[i]:0};switch(t){case-1:c.top=-3;break;case 1:c.bottom=-3;break;default:c.bottom=-3,c[s]=r+Br;break}return he.createElement("div",{style:c,className:`${n}-drop-indicator`})}var hu={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"filled"},bu=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:hu}))},yu=a.forwardRef(bu),Cu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"minus-square",theme:"outlined"},xu=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:Cu}))},Su=a.forwardRef(xu),$u={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"plus-square",theme:"outlined"},wu=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:$u}))},Eu=a.forwardRef(wu);const Iu=e=>{var t,o;const{prefixCls:n,switcherIcon:r,treeNodeProps:l,showLine:s,switcherLoadingIcon:i}=e,{isLeaf:c,expanded:d,loading:m}=l;if(m)return a.isValidElement(i)?i:a.createElement(aa,{className:`${n}-switcher-loading-icon`});let u;if(s&&typeof s=="object"&&(u=s.showLeafIcon),c){if(!s)return null;if(typeof u!="boolean"&&u){const g=typeof u=="function"?u(l):u,h=`${n}-switcher-line-custom-icon`;return a.isValidElement(g)?Mt(g,{className:Y((t=g.props)===null||t===void 0?void 0:t.className,h)}):g}return u?a.createElement(tl,{className:`${n}-switcher-line-icon`}):a.createElement("span",{className:`${n}-switcher-leaf-line`})}const p=`${n}-switcher-icon`,f=typeof r=="function"?r(l):r;return a.isValidElement(f)?Mt(f,{className:Y((o=f.props)===null||o===void 0?void 0:o.className,p)}):f!==void 0?f:s?d?a.createElement(Su,{className:`${n}-switcher-line-icon`}):a.createElement(Eu,{className:`${n}-switcher-line-icon`}):a.createElement(yu,{className:p})},nl=he.forwardRef((e,t)=>{var o;const{getPrefixCls:n,direction:r,virtual:l,tree:s}=he.useContext(Ue),{prefixCls:i,className:c,showIcon:d=!1,showLine:m,switcherIcon:u,switcherLoadingIcon:p,blockNode:f=!1,children:g,checkable:h=!1,selectable:v=!0,draggable:b,disabled:$,motion:C,style:x}=e,S=n("tree",i),k=n(),I=he.useContext(Tn),E=$??I,y=C??Object.assign(Object.assign({},$n(k)),{motionAppear:!1}),T=Object.assign(Object.assign({},e),{checkable:h,selectable:v,showIcon:d,motion:y,blockNode:f,disabled:E,showLine:!!m,dropIndicatorRender:vu}),[O,M,B]=gu(S),[,w]=bo(),N=w.paddingXS/2+(((o=w.Tree)===null||o===void 0?void 0:o.titleHeight)||w.controlHeightSM),R=he.useMemo(()=>{if(!b)return!1;let K={};switch(typeof b){case"function":K.nodeDraggable=b;break;case"object":K=Object.assign({},b);break}return K.icon!==!1&&(K.icon=K.icon||he.createElement(lu,null)),K},[b]),P=K=>he.createElement(Iu,{prefixCls:S,switcherIcon:u,switcherLoadingIcon:p,treeNodeProps:K,showLine:m});return O(he.createElement(Mo,Object.assign({itemHeight:N,ref:t,virtual:l},T,{style:Object.assign(Object.assign({},s==null?void 0:s.style),x),prefixCls:S,className:Y({[`${S}-icon-hide`]:!d,[`${S}-block-node`]:f,[`${S}-unselectable`]:!v,[`${S}-rtl`]:r==="rtl",[`${S}-disabled`]:E},s==null?void 0:s.className,c,M,B),direction:r,checkable:h&&he.createElement("span",{className:`${S}-checkbox-inner`}),selectable:v,switcherIcon:P,draggable:R}),g))}),Mr=0,Zn=1,Dr=2;function Do(e,t,o){const{key:n,children:r}=o;function l(s){const i=s[n],c=s[r];t(i,s)!==!1&&Do(c||[],t,o)}e.forEach(l)}function Nu({treeData:e,expandedKeys:t,startKey:o,endKey:n,fieldNames:r}){const l=[];let s=Mr;if(o&&o===n)return[o];if(!o||!n)return[];function i(c){return c===o||c===n}return Do(e,c=>{if(s===Dr)return!1;if(i(c)){if(l.push(c),s===Mr)s=Zn;else if(s===Zn)return s=Dr,!1}else s===Zn&&l.push(c);return t.includes(c)},At(r)),l}function Jn(e,t,o){const n=de(t),r=[];return Do(e,(l,s)=>{const i=n.indexOf(l);return i!==-1&&(r.push(s),n.splice(i,1)),!!n.length},At(o)),r}var Kr=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{var{defaultExpandAll:o,defaultExpandParent:n,defaultExpandedKeys:r}=e,l=Kr(e,["defaultExpandAll","defaultExpandParent","defaultExpandedKeys"]);const s=a.useRef(null),i=a.useRef(null),c=()=>{const{keyEntities:E}=wo(Lr(l),{fieldNames:l.fieldNames});let y;return o?y=Object.keys(E):n?y=so(l.expandedKeys||r||[],E):y=l.expandedKeys||r||[],y},[d,m]=a.useState(l.selectedKeys||l.defaultSelectedKeys||[]),[u,p]=a.useState(()=>c());a.useEffect(()=>{"selectedKeys"in l&&m(l.selectedKeys)},[l.selectedKeys]),a.useEffect(()=>{"expandedKeys"in l&&p(l.expandedKeys)},[l.expandedKeys]);const f=(E,y)=>{var T;return"expandedKeys"in l||p(E),(T=l.onExpand)===null||T===void 0?void 0:T.call(l,E,y)},g=(E,y)=>{var T;const{multiple:O,fieldNames:M}=l,{node:B,nativeEvent:w}=y,{key:N=""}=B,R=Lr(l),P=Object.assign(Object.assign({},y),{selected:!0}),K=(w==null?void 0:w.ctrlKey)||(w==null?void 0:w.metaKey),D=w==null?void 0:w.shiftKey;let F;O&&K?(F=E,s.current=N,i.current=F,P.selectedNodes=Jn(R,F,M)):O&&D?(F=Array.from(new Set([].concat(de(i.current||[]),de(Nu({treeData:R,expandedKeys:u,startKey:N,endKey:s.current,fieldNames:M}))))),P.selectedNodes=Jn(R,F,M)):(F=[N],s.current=N,i.current=F,P.selectedNodes=Jn(R,F,M)),(T=l.onSelect)===null||T===void 0||T.call(l,F,P),"selectedKeys"in l||m(F)},{getPrefixCls:h,direction:v}=a.useContext(Ue),{prefixCls:b,className:$,showIcon:C=!0,expandAction:x="click"}=l,S=Kr(l,["prefixCls","className","showIcon","expandAction"]),k=h("tree",b),I=Y(`${k}-directory`,{[`${k}-directory-rtl`]:v==="rtl"},$);return a.createElement(nl,Object.assign({icon:Ou,ref:t,blockNode:!0},S,{showIcon:C,expandAction:x,prefixCls:k,className:I,expandedKeys:u,selectedKeys:d,onSelect:g,onExpand:f}))},ku=a.forwardRef(Ru),Ko=nl;Ko.DirectoryTree=ku;Ko.TreeNode=ln;const _r=e=>{const{value:t,filterSearch:o,tablePrefixCls:n,locale:r,onChange:l}=e;return o?a.createElement("div",{className:`${n}-filter-dropdown-search`},a.createElement(Si,{prefix:a.createElement($i,null),placeholder:r.filterSearchPlaceholder,onChange:l,value:t,htmlSize:1,className:`${n}-filter-dropdown-search-input`})):null},Pu=e=>{const{keyCode:t}=e;t===xt.ENTER&&e.stopPropagation()},Tu=a.forwardRef((e,t)=>a.createElement("div",{className:e.className,onClick:o=>o.stopPropagation(),onKeyDown:Pu,ref:t},e.children));function Ft(e){let t=[];return(e||[]).forEach(({value:o,children:n})=>{t.push(o),n&&(t=[].concat(de(t),de(Ft(n))))}),t}function Bu(e){return e.some(({children:t})=>t)}function ol(e,t){return typeof t=="string"||typeof t=="number"?t==null?void 0:t.toString().toLowerCase().includes(e.trim().toLowerCase()):!1}function rl({filters:e,prefixCls:t,filteredKeys:o,filterMultiple:n,searchValue:r,filterSearch:l}){return e.map((s,i)=>{const c=String(s.value);if(s.children)return{key:c||i,label:s.text,popupClassName:`${t}-dropdown-submenu`,children:rl({filters:s.children,prefixCls:t,filteredKeys:o,filterMultiple:n,searchValue:r,filterSearch:l})};const d=n?Wt:dn,m={key:s.value!==void 0?c:i,label:a.createElement(a.Fragment,null,a.createElement(d,{checked:o.includes(c)}),a.createElement("span",null,s.text))};return r.trim()?typeof l=="function"?l(r,s)?m:null:ol(r,s.text)?m:null:m})}function eo(e){return e||[]}const Mu=e=>{var t,o,n,r;const{tablePrefixCls:l,prefixCls:s,column:i,dropdownPrefixCls:c,columnKey:d,filterOnClose:m,filterMultiple:u,filterMode:p="menu",filterSearch:f=!1,filterState:g,triggerFilter:h,locale:v,children:b,getPopupContainer:$,rootClassName:C}=e,{filterResetToDefaultFilteredValue:x,defaultFilteredValue:S,filterDropdownProps:k={},filterDropdownOpen:I,filterDropdownVisible:E,onFilterDropdownVisibleChange:y,onFilterDropdownOpenChange:T}=i,[O,M]=a.useState(!1),B=!!(g&&(!((t=g.filteredKeys)===null||t===void 0)&&t.length||g.forceFiltered)),w=z=>{var re;M(z),(re=k.onOpenChange)===null||re===void 0||re.call(k,z),T==null||T(z),y==null||y(z)},N=(r=(n=(o=k.open)!==null&&o!==void 0?o:I)!==null&&n!==void 0?n:E)!==null&&r!==void 0?r:O,R=g==null?void 0:g.filteredKeys,[P,K]=ji(eo(R)),D=({selectedKeys:z})=>{K(z)},F=(z,{node:re,checked:ae})=>{D(u?{selectedKeys:z}:{selectedKeys:ae&&re.key?[re.key]:[]})};a.useEffect(()=>{O&&D({selectedKeys:eo(R)})},[R]);const[A,q]=a.useState([]),L=z=>{q(z)},[se,ce]=a.useState(""),ie=z=>{const{value:re}=z.target;ce(re)};a.useEffect(()=>{O||ce("")},[O]);const Q=z=>{const re=z!=null&&z.length?z:null;if(re===null&&(!g||!g.filteredKeys)||an(re,g==null?void 0:g.filteredKeys,!0))return null;h({column:i,key:d,filteredKeys:re})},Z=()=>{w(!1),Q(P())},V=({confirm:z,closeDropdown:re}={confirm:!1,closeDropdown:!1})=>{z&&Q([]),re&&w(!1),ce(""),K(x?(S||[]).map(ae=>String(ae)):[])},te=({closeDropdown:z}={closeDropdown:!0})=>{z&&w(!1),Q(P())},ne=(z,re)=>{re.source==="trigger"&&(z&&R!==void 0&&K(eo(R)),w(z),!z&&!i.filterDropdown&&m&&Z())},X=Y({[`${c}-menu-without-submenu`]:!Bu(i.filters||[])}),J=z=>{if(z.target.checked){const re=Ft(i==null?void 0:i.filters).map(ae=>String(ae));K(re)}else K([])},W=({filters:z})=>(z||[]).map((re,ae)=>{const xe=String(re.value),Se={title:re.text,key:re.value!==void 0?xe:String(ae)};return re.children&&(Se.children=W({filters:re.children})),Se}),H=z=>{var re;return Object.assign(Object.assign({},z),{text:z.title,value:z.key,children:((re=z.children)===null||re===void 0?void 0:re.map(ae=>H(ae)))||[]})};let ee;const{direction:le,renderEmpty:ue}=a.useContext(Ue);if(typeof i.filterDropdown=="function")ee=i.filterDropdown({prefixCls:`${c}-custom`,setSelectedKeys:z=>D({selectedKeys:z}),selectedKeys:P(),confirm:te,clearFilters:V,filters:i.filters,visible:N,close:()=>{w(!1)}});else if(i.filterDropdown)ee=i.filterDropdown;else{const z=P()||[],re=()=>{var xe,Se;const $e=(xe=ue==null?void 0:ue("Table.filter"))!==null&&xe!==void 0?xe:a.createElement(nr,{image:nr.PRESENTED_IMAGE_SIMPLE,description:v.filterEmptyText,styles:{image:{height:24}},style:{margin:0,padding:"16px 0"}});if((i.filters||[]).length===0)return $e;if(p==="tree")return a.createElement(a.Fragment,null,a.createElement(_r,{filterSearch:f,value:se,onChange:ie,tablePrefixCls:l,locale:v}),a.createElement("div",{className:`${l}-filter-dropdown-tree`},u?a.createElement(Wt,{checked:z.length===Ft(i.filters).length,indeterminate:z.length>0&&z.lengthtypeof f=="function"?f(se,H(De)):ol(se,De.title):void 0})));const Te=rl({filters:i.filters||[],filterSearch:f,prefixCls:s,filteredKeys:P(),filterMultiple:u,searchValue:se}),Me=Te.every(De=>De===null);return a.createElement(a.Fragment,null,a.createElement(_r,{filterSearch:f,value:se,onChange:ie,tablePrefixCls:l,locale:v}),Me?$e:a.createElement(Vt,{selectable:!0,multiple:u,prefixCls:`${c}-menu`,className:X,onSelect:D,onDeselect:D,selectedKeys:z,getPopupContainer:$,openKeys:A,onOpenChange:L,items:Te}))},ae=()=>x?an((S||[]).map(xe=>String(xe)),z,!0):z.length===0;ee=a.createElement(a.Fragment,null,re(),a.createElement("div",{className:`${s}-dropdown-btns`},a.createElement(wn,{type:"link",size:"small",disabled:ae(),onClick:()=>V()},v.filterReset),a.createElement(wn,{type:"primary",size:"small",onClick:Z},v.filterConfirm)))}i.filterDropdown&&(ee=a.createElement(ma,{selectable:void 0},ee)),ee=a.createElement(Tu,{className:`${s}-dropdown`},ee);const Re=da({trigger:["click"],placement:le==="rtl"?"bottomLeft":"bottomRight",children:(()=>{let z;return typeof i.filterIcon=="function"?z=i.filterIcon(B):i.filterIcon?z=i.filterIcon:z=a.createElement(jd,null),a.createElement("span",{role:"button",tabIndex:-1,className:Y(`${s}-trigger`,{active:B}),onClick:re=>{re.stopPropagation()}},z)})(),getPopupContainer:$},Object.assign(Object.assign({},k),{rootClassName:Y(C,k.rootClassName),open:N,onOpenChange:ne,popupRender:()=>typeof(k==null?void 0:k.dropdownRender)=="function"?k.dropdownRender(ee):ee}));return a.createElement("div",{className:`${s}-column`},a.createElement("span",{className:`${l}-column-title`},b),a.createElement(Eo,Object.assign({},Re)))},po=(e,t,o)=>{let n=[];return(e||[]).forEach((r,l)=>{var s;const i=Ut(l,o),c=r.filterDropdown!==void 0;if(r.filters||c||"onFilter"in r)if("filteredValue"in r){let d=r.filteredValue;c||(d=(s=d==null?void 0:d.map(String))!==null&&s!==void 0?s:d),n.push({column:r,key:Et(r,i),filteredKeys:d,forceFiltered:r.filtered})}else n.push({column:r,key:Et(r,i),filteredKeys:t&&r.defaultFilteredValue?r.defaultFilteredValue:void 0,forceFiltered:r.filtered});"children"in r&&(n=[].concat(de(n),de(po(r.children,t,i))))}),n};function al(e,t,o,n,r,l,s,i,c){return o.map((d,m)=>{const u=Ut(m,i),{filterOnClose:p=!0,filterMultiple:f=!0,filterMode:g,filterSearch:h}=d;let v=d;if(v.filters||v.filterDropdown){const b=Et(v,u),$=n.find(({key:C})=>b===C);v=Object.assign(Object.assign({},v),{title:C=>a.createElement(Mu,{tablePrefixCls:e,prefixCls:`${e}-filter`,dropdownPrefixCls:t,column:v,columnKey:b,filterState:$,filterOnClose:p,filterMultiple:f,filterMode:g,filterSearch:h,triggerFilter:l,locale:r,getPopupContainer:s,rootClassName:c},Ln(d.title,C))})}return"children"in v&&(v=Object.assign(Object.assign({},v),{children:al(e,t,v.children,n,r,l,s,u,c)})),v})}const jr=e=>{const t={};return e.forEach(({key:o,filteredKeys:n,column:r})=>{const l=o,{filters:s,filterDropdown:i}=r;if(i)t[l]=n||null;else if(Array.isArray(n)){const c=Ft(s);t[l]=c.filter(d=>n.includes(String(d)))}else t[l]=null}),t},go=(e,t,o)=>t.reduce((r,l)=>{const{column:{onFilter:s,filters:i},filteredKeys:c}=l;return s&&c&&c.length?r.map(d=>Object.assign({},d)).filter(d=>c.some(m=>{const u=Ft(i),p=u.findIndex(g=>String(g)===String(m)),f=p!==-1?u[p]:m;return d[o]&&(d[o]=go(d[o],t,o)),s(f,d)})):r},e),ll=e=>e.flatMap(t=>"children"in t?[t].concat(de(ll(t.children||[]))):[t]),Du=e=>{const{prefixCls:t,dropdownPrefixCls:o,mergedColumns:n,onFilterChange:r,getPopupContainer:l,locale:s,rootClassName:i}=e;cn();const c=a.useMemo(()=>ll(n||[]),[n]),[d,m]=a.useState(()=>po(c,!0)),u=a.useMemo(()=>{const h=po(c,!1);if(h.length===0)return h;let v=!0;if(h.forEach(({filteredKeys:b})=>{b!==void 0&&(v=!1)}),v){const b=(c||[]).map(($,C)=>Et($,Ut(C)));return d.filter(({key:$})=>b.includes($)).map($=>{const C=c[b.indexOf($.key)];return Object.assign(Object.assign({},$),{column:Object.assign(Object.assign({},$.column),C),forceFiltered:C.filtered})})}return h},[c,d]),p=a.useMemo(()=>jr(u),[u]),f=h=>{const v=u.filter(({key:b})=>b!==h.key);v.push(h),m(v),r(jr(v),v)};return[h=>al(t,o,h,u,s,f,l,void 0,i),u,p]},Ku=(e,t,o)=>{const n=a.useRef({});function r(l){var s;if(!n.current||n.current.data!==e||n.current.childrenColumnName!==t||n.current.getRowKey!==o){let c=function(d){d.forEach((m,u)=>{const p=o(m,u);i.set(p,m),m&&typeof m=="object"&&t in m&&c(m[t]||[])})};const i=new Map;c(e),n.current={data:e,childrenColumnName:t,kvMap:i,getRowKey:o}}return(s=n.current.kvMap)===null||s===void 0?void 0:s.get(l)}return[r]};var Lu=function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r{const l=e[r];typeof l!="function"&&(o[r]=l)}),o}function ju(e,t,o){const n=o&&typeof o=="object"?o:{},{total:r=0}=n,l=Lu(n,["total"]),[s,i]=a.useState(()=>({current:"defaultCurrent"in l?l.defaultCurrent:1,pageSize:"defaultPageSize"in l?l.defaultPageSize:il})),c=da(s,l,{total:r>0?r:e}),d=Math.ceil((r||e)/c.pageSize);c.current>d&&(c.current=d||1);const m=(p,f)=>{i({current:p??1,pageSize:f||c.pageSize})},u=(p,f)=>{var g;o&&((g=o.onChange)===null||g===void 0||g.call(o,p,f)),m(p,f),t(p,f||(c==null?void 0:c.pageSize))};return o===!1?[{},()=>{}]:[Object.assign(Object.assign({},c),{onChange:u}),m]}var Hu={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"outlined"},zu=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:Hu}))},Fu=a.forwardRef(zu),Au={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M858.9 689L530.5 308.2c-9.4-10.9-27.5-10.9-37 0L165.1 689c-12.2 14.2-1.2 35 18.5 35h656.8c19.7 0 30.7-20.8 18.5-35z"}}]},name:"caret-up",theme:"outlined"},Wu=function(t,o){return a.createElement(dt,Ce({},t,{ref:o,icon:Au}))},Vu=a.forwardRef(Wu);const Cn="ascend",to="descend",Rn=e=>typeof e.sorter=="object"&&typeof e.sorter.multiple=="number"?e.sorter.multiple:!1,Hr=e=>typeof e=="function"?e:e&&typeof e=="object"&&e.compare?e.compare:!1,qu=(e,t)=>t?e[e.indexOf(t)+1]:e[0],vo=(e,t,o)=>{let n=[];const r=(l,s)=>{n.push({column:l,key:Et(l,s),multiplePriority:Rn(l),sortOrder:l.sortOrder})};return(e||[]).forEach((l,s)=>{const i=Ut(s,o);l.children?("sortOrder"in l&&r(l,i),n=[].concat(de(n),de(vo(l.children,t,i)))):l.sorter&&("sortOrder"in l?r(l,i):t&&l.defaultSortOrder&&n.push({column:l,key:Et(l,i),multiplePriority:Rn(l),sortOrder:l.defaultSortOrder}))}),n},sl=(e,t,o,n,r,l,s,i)=>(t||[]).map((d,m)=>{const u=Ut(m,i);let p=d;if(p.sorter){const f=p.sortDirections||r,g=p.showSorterTooltip===void 0?s:p.showSorterTooltip,h=Et(p,u),v=o.find(({key:y})=>y===h),b=v?v.sortOrder:null,$=qu(f,b);let C;if(d.sortIcon)C=d.sortIcon({sortOrder:b});else{const y=f.includes(Cn)&&a.createElement(Vu,{className:Y(`${e}-column-sorter-up`,{active:b===Cn})}),T=f.includes(to)&&a.createElement(Fu,{className:Y(`${e}-column-sorter-down`,{active:b===to})});C=a.createElement("span",{className:Y(`${e}-column-sorter`,{[`${e}-column-sorter-full`]:!!(y&&T)})},a.createElement("span",{className:`${e}-column-sorter-inner`,"aria-hidden":"true"},y,T))}const{cancelSort:x,triggerAsc:S,triggerDesc:k}=l||{};let I=x;$===to?I=k:$===Cn&&(I=S);const E=typeof g=="object"?Object.assign({title:I},g):{title:I};p=Object.assign(Object.assign({},p),{className:Y(p.className,{[`${e}-column-sort`]:b}),title:y=>{const T=`${e}-column-sorters`,O=a.createElement("span",{className:`${e}-column-title`},Ln(d.title,y)),M=a.createElement("div",{className:T},O,C);return g?typeof g!="boolean"&&(g==null?void 0:g.target)==="sorter-icon"?a.createElement("div",{className:Y(T,`${T}-tooltip-target-sorter`)},O,a.createElement(xn,Object.assign({},E),C)):a.createElement(xn,Object.assign({},E),M):M},onHeaderCell:y=>{var T;const O=((T=d.onHeaderCell)===null||T===void 0?void 0:T.call(d,y))||{},M=O.onClick,B=O.onKeyDown;O.onClick=R=>{n({column:d,key:h,sortOrder:$,multiplePriority:Rn(d)}),M==null||M(R)},O.onKeyDown=R=>{R.keyCode===xt.ENTER&&(n({column:d,key:h,sortOrder:$,multiplePriority:Rn(d)}),B==null||B(R))};const w=Kd(d.title,{}),N=w==null?void 0:w.toString();return b&&(O["aria-sort"]=b==="ascend"?"ascending":"descending"),O["aria-label"]=N||"",O.className=Y(O.className,`${e}-column-has-sorters`),O.tabIndex=0,d.ellipsis&&(O.title=(w??"").toString()),O}})}return"children"in p&&(p=Object.assign(Object.assign({},p),{children:sl(e,p.children,o,n,r,l,s,u)})),p}),zr=e=>{const{column:t,sortOrder:o}=e;return{column:t,order:o,field:t.dataIndex,columnKey:t.key}},Fr=e=>{const t=e.filter(({sortOrder:o})=>o).map(zr);if(t.length===0&&e.length){const o=e.length-1;return Object.assign(Object.assign({},zr(e[o])),{column:void 0,order:void 0,field:void 0,columnKey:void 0})}return t.length<=1?t[0]||{}:t},ho=(e,t,o)=>{const n=t.slice().sort((s,i)=>i.multiplePriority-s.multiplePriority),r=e.slice(),l=n.filter(({column:{sorter:s},sortOrder:i})=>Hr(s)&&i);return l.length?r.sort((s,i)=>{for(let c=0;c{const i=s[o];return i?Object.assign(Object.assign({},s),{[o]:ho(i,t,o)}):s}):r},Xu=e=>{const{prefixCls:t,mergedColumns:o,sortDirections:n,tableLocale:r,showSorterTooltip:l,onSorterChange:s}=e,[i,c]=a.useState(()=>vo(o,!0)),d=(h,v)=>{const b=[];return h.forEach(($,C)=>{const x=Ut(C,v);if(b.push(Et($,x)),Array.isArray($.children)){const S=d($.children,x);b.push.apply(b,de(S))}}),b},m=a.useMemo(()=>{let h=!0;const v=vo(o,!1);if(!v.length){const x=d(o);return i.filter(({key:S})=>x.includes(S))}const b=[];function $(x){h?b.push(x):b.push(Object.assign(Object.assign({},x),{sortOrder:null}))}let C=null;return v.forEach(x=>{C===null?($(x),x.sortOrder&&(x.multiplePriority===!1?h=!1:C=!0)):(C&&x.multiplePriority!==!1||(h=!1),$(x))}),b},[o,i]),u=a.useMemo(()=>{var h,v;const b=m.map(({column:$,sortOrder:C})=>({column:$,order:C}));return{sortColumns:b,sortColumn:(h=b[0])===null||h===void 0?void 0:h.column,sortOrder:(v=b[0])===null||v===void 0?void 0:v.order}},[m]),p=h=>{let v;h.multiplePriority===!1||!m.length||m[0].multiplePriority===!1?v=[h]:v=[].concat(de(m.filter(({key:b})=>b!==h.key)),[h]),c(v),s(Fr(v),v)};return[h=>sl(t,h,m,p,n,r,l),m,u,()=>Fr(m)]},cl=(e,t)=>e.map(n=>{const r=Object.assign({},n);return r.title=Ln(n.title,t),"children"in r&&(r.children=cl(r.children,t)),r}),Gu=e=>[a.useCallback(o=>cl(o,e),[e])],Uu=Ua((e,t)=>{const{_renderTimes:o}=e,{_renderTimes:n}=t;return o!==n}),Yu=Qa((e,t)=>{const{_renderTimes:o}=e,{_renderTimes:n}=t;return o!==n}),Qu=e=>{const{componentCls:t,lineWidth:o,lineType:n,tableBorderColor:r,tableHeaderBg:l,tablePaddingVertical:s,tablePaddingHorizontal:i,calc:c}=e,d=`${j(o)} ${n} ${r}`,m=(u,p,f)=>({[`&${t}-${u}`]:{[`> ${t}-container`]:{[`> ${t}-content, > ${t}-body`]:{"\n > table > tbody > tr > th,\n > table > tbody > tr > td\n ":{[`> ${t}-expanded-row-fixed`]:{margin:`${j(c(p).mul(-1).equal())} + ${j(c(c(f).add(o)).mul(-1).equal())}`}}}}}});return{[`${t}-wrapper`]:{[`${t}${t}-bordered`]:Object.assign(Object.assign(Object.assign({[`> ${t}-title`]:{border:d,borderBottom:0},[`> ${t}-container`]:{borderInlineStart:d,borderTop:d,[` + > ${t}-content, + > ${t}-header, + > ${t}-body, + > ${t}-summary + `]:{"> table":{"\n > thead > tr > th,\n > thead > tr > td,\n > tbody > tr > th,\n > tbody > tr > td,\n > tfoot > tr > th,\n > tfoot > tr > td\n ":{borderInlineEnd:d},"> thead":{"> tr:not(:last-child) > th":{borderBottom:d},"> tr > th::before":{backgroundColor:"transparent !important"}},"\n > thead > tr,\n > tbody > tr,\n > tfoot > tr\n ":{[`> ${t}-cell-fix-right-first::after`]:{borderInlineEnd:d}},"\n > tbody > tr > th,\n > tbody > tr > td\n ":{[`> ${t}-expanded-row-fixed`]:{margin:`${j(c(s).mul(-1).equal())} ${j(c(c(i).add(o)).mul(-1).equal())}`,"&::after":{position:"absolute",top:0,insetInlineEnd:o,bottom:0,borderInlineEnd:d,content:'""'}}}}}},[`&${t}-scroll-horizontal`]:{[`> ${t}-container > ${t}-body`]:{"> table > tbody":{[` + > tr${t}-expanded-row, + > tr${t}-placeholder + `]:{"> th, > td":{borderInlineEnd:0}}}}}},m("middle",e.tablePaddingVerticalMiddle,e.tablePaddingHorizontalMiddle)),m("small",e.tablePaddingVerticalSmall,e.tablePaddingHorizontalSmall)),{[`> ${t}-footer`]:{border:d,borderTop:0}}),[`${t}-cell`]:{[`${t}-container:first-child`]:{borderTop:0},"&-scrollbar:not([rowspan])":{boxShadow:`0 ${j(o)} 0 ${j(o)} ${l}`}},[`${t}-bordered ${t}-cell-scrollbar`]:{borderInlineEnd:d}}}},Zu=e=>{const{componentCls:t}=e;return{[`${t}-wrapper`]:{[`${t}-cell-ellipsis`]:Object.assign(Object.assign({},Gr),{wordBreak:"keep-all",[` + &${t}-cell-fix-left-last, + &${t}-cell-fix-right-first + `]:{overflow:"visible",[`${t}-cell-content`]:{display:"block",overflow:"hidden",textOverflow:"ellipsis"}},[`${t}-column-title`]:{overflow:"hidden",textOverflow:"ellipsis",wordBreak:"keep-all"}})}}},Ju=e=>{const{componentCls:t}=e;return{[`${t}-wrapper`]:{[`${t}-tbody > tr${t}-placeholder`]:{textAlign:"center",color:e.colorTextDisabled,"\n &:hover > th,\n &:hover > td,\n ":{background:e.colorBgContainer}}}}},ef=e=>{const{componentCls:t,antCls:o,motionDurationSlow:n,lineWidth:r,paddingXS:l,lineType:s,tableBorderColor:i,tableExpandIconBg:c,tableExpandColumnWidth:d,borderRadius:m,tablePaddingVertical:u,tablePaddingHorizontal:p,tableExpandedRowBg:f,paddingXXS:g,expandIconMarginTop:h,expandIconSize:v,expandIconHalfInner:b,expandIconScale:$,calc:C}=e,x=`${j(r)} ${s} ${i}`,S=C(g).sub(r).equal();return{[`${t}-wrapper`]:{[`${t}-expand-icon-col`]:{width:d},[`${t}-row-expand-icon-cell`]:{textAlign:"center",[`${t}-row-expand-icon`]:{display:"inline-flex",float:"none",verticalAlign:"sub"}},[`${t}-row-indent`]:{height:1,float:"left"},[`${t}-row-expand-icon`]:Object.assign(Object.assign({},wi(e)),{position:"relative",float:"left",width:v,height:v,color:"inherit",lineHeight:j(v),background:c,border:x,borderRadius:m,transform:`scale(${$})`,"&:focus, &:hover, &:active":{borderColor:"currentcolor"},"&::before, &::after":{position:"absolute",background:"currentcolor",transition:`transform ${n} ease-out`,content:'""'},"&::before":{top:b,insetInlineEnd:S,insetInlineStart:S,height:r},"&::after":{top:S,bottom:S,insetInlineStart:b,width:r,transform:"rotate(90deg)"},"&-collapsed::before":{transform:"rotate(-180deg)"},"&-collapsed::after":{transform:"rotate(0deg)"},"&-spaced":{"&::before, &::after":{display:"none",content:"none"},background:"transparent",border:0,visibility:"hidden"}}),[`${t}-row-indent + ${t}-row-expand-icon`]:{marginTop:h,marginInlineEnd:l},[`tr${t}-expanded-row`]:{"&, &:hover":{"> th, > td":{background:f}},[`${o}-descriptions-view`]:{display:"flex",table:{flex:"auto",width:"100%"}}},[`${t}-expanded-row-fixed`]:{position:"relative",margin:`${j(C(u).mul(-1).equal())} ${j(C(p).mul(-1).equal())}`,padding:`${j(u)} ${j(p)}`}}}},tf=e=>{const{componentCls:t,antCls:o,iconCls:n,tableFilterDropdownWidth:r,tableFilterDropdownSearchWidth:l,paddingXXS:s,paddingXS:i,colorText:c,lineWidth:d,lineType:m,tableBorderColor:u,headerIconColor:p,fontSizeSM:f,tablePaddingHorizontal:g,borderRadius:h,motionDurationSlow:v,colorIcon:b,colorPrimary:$,tableHeaderFilterActiveBg:C,colorTextDisabled:x,tableFilterDropdownBg:S,tableFilterDropdownHeight:k,controlItemBgHover:I,controlItemBgActive:E,boxShadowSecondary:y,filterDropdownMenuBg:T,calc:O}=e,M=`${o}-dropdown`,B=`${t}-filter-dropdown`,w=`${o}-tree`,N=`${j(d)} ${m} ${u}`;return[{[`${t}-wrapper`]:{[`${t}-filter-column`]:{display:"flex",justifyContent:"space-between"},[`${t}-filter-trigger`]:{position:"relative",display:"flex",alignItems:"center",marginBlock:O(s).mul(-1).equal(),marginInline:`${j(s)} ${j(O(g).div(2).mul(-1).equal())}`,padding:`0 ${j(s)}`,color:p,fontSize:f,borderRadius:h,cursor:"pointer",transition:`all ${v}`,"&:hover":{color:b,background:C},"&.active":{color:$}}}},{[`${o}-dropdown`]:{[B]:Object.assign(Object.assign({},nt(e)),{minWidth:r,backgroundColor:S,borderRadius:h,boxShadow:y,overflow:"hidden",[`${M}-menu`]:{maxHeight:k,overflowX:"hidden",border:0,boxShadow:"none",borderRadius:"unset",backgroundColor:T,"&:empty::after":{display:"block",padding:`${j(i)} 0`,color:x,fontSize:f,textAlign:"center",content:'"Not Found"'}},[`${B}-tree`]:{paddingBlock:`${j(i)} 0`,paddingInline:i,[w]:{padding:0},[`${w}-treenode ${w}-node-content-wrapper:hover`]:{backgroundColor:I},[`${w}-treenode-checkbox-checked ${w}-node-content-wrapper`]:{"&, &:hover":{backgroundColor:E}}},[`${B}-search`]:{padding:i,borderBottom:N,"&-input":{input:{minWidth:l},[n]:{color:x}}},[`${B}-checkall`]:{width:"100%",marginBottom:s,marginInlineStart:s},[`${B}-btns`]:{display:"flex",justifyContent:"space-between",padding:`${j(O(i).sub(d).equal())} ${j(i)}`,overflow:"hidden",borderTop:N}})}},{[`${o}-dropdown ${B}, ${B}-submenu`]:{[`${o}-checkbox-wrapper + span`]:{paddingInlineStart:i,color:c},"> ul":{maxHeight:"calc(100vh - 130px)",overflowX:"hidden",overflowY:"auto"}}}]},nf=e=>{const{componentCls:t,lineWidth:o,colorSplit:n,motionDurationSlow:r,zIndexTableFixed:l,tableBg:s,zIndexTableSticky:i,calc:c}=e,d=n;return{[`${t}-wrapper`]:{[` + ${t}-cell-fix-left, + ${t}-cell-fix-right + `]:{position:"sticky !important",zIndex:l,background:s},[` + ${t}-cell-fix-left-first::after, + ${t}-cell-fix-left-last::after + `]:{position:"absolute",top:0,right:{_skip_check_:!0,value:0},bottom:c(o).mul(-1).equal(),width:30,transform:"translateX(100%)",transition:`box-shadow ${r}`,content:'""',pointerEvents:"none",willChange:"transform"},[`${t}-cell-fix-left-all::after`]:{display:"none"},[` + ${t}-cell-fix-right-first::after, + ${t}-cell-fix-right-last::after + `]:{position:"absolute",top:0,bottom:c(o).mul(-1).equal(),left:{_skip_check_:!0,value:0},width:30,transform:"translateX(-100%)",transition:`box-shadow ${r}`,content:'""',pointerEvents:"none"},[`${t}-container`]:{position:"relative","&::before, &::after":{position:"absolute",top:0,bottom:0,zIndex:c(i).add(1).equal({unit:!1}),width:30,transition:`box-shadow ${r}`,content:'""',pointerEvents:"none"},"&::before":{insetInlineStart:0},"&::after":{insetInlineEnd:0}},[`${t}-ping-left`]:{[`&:not(${t}-has-fix-left) ${t}-container::before`]:{boxShadow:`inset 10px 0 8px -8px ${d}`},[` + ${t}-cell-fix-left-first::after, + ${t}-cell-fix-left-last::after + `]:{boxShadow:`inset 10px 0 8px -8px ${d}`},[`${t}-cell-fix-left-last::before`]:{backgroundColor:"transparent !important"}},[`${t}-ping-right`]:{[`&:not(${t}-has-fix-right) ${t}-container::after`]:{boxShadow:`inset -10px 0 8px -8px ${d}`},[` + ${t}-cell-fix-right-first::after, + ${t}-cell-fix-right-last::after + `]:{boxShadow:`inset -10px 0 8px -8px ${d}`}},[`${t}-fixed-column-gapped`]:{[` + ${t}-cell-fix-left-first::after, + ${t}-cell-fix-left-last::after, + ${t}-cell-fix-right-first::after, + ${t}-cell-fix-right-last::after + `]:{boxShadow:"none"}}}}},of=e=>{const{componentCls:t,antCls:o,margin:n}=e;return{[`${t}-wrapper ${t}-pagination${o}-pagination`]:{margin:`${j(n)} 0`}}},rf=e=>{const{componentCls:t,tableRadius:o}=e;return{[`${t}-wrapper`]:{[t]:{[`${t}-title, ${t}-header`]:{borderRadius:`${j(o)} ${j(o)} 0 0`},[`${t}-title + ${t}-container`]:{borderStartStartRadius:0,borderStartEndRadius:0,[`${t}-header, table`]:{borderRadius:0},"table > thead > tr:first-child":{"th:first-child, th:last-child, td:first-child, td:last-child":{borderRadius:0}}},"&-container":{borderStartStartRadius:o,borderStartEndRadius:o,"table > thead > tr:first-child":{"> *:first-child":{borderStartStartRadius:o},"> *:last-child":{borderStartEndRadius:o}}},"&-footer":{borderRadius:`0 0 ${j(o)} ${j(o)}`}}}}},af=e=>{const{componentCls:t}=e;return{[`${t}-wrapper-rtl`]:{direction:"rtl",table:{direction:"rtl"},[`${t}-pagination-left`]:{justifyContent:"flex-end"},[`${t}-pagination-right`]:{justifyContent:"flex-start"},[`${t}-row-expand-icon`]:{float:"right","&::after":{transform:"rotate(-90deg)"},"&-collapsed::before":{transform:"rotate(180deg)"},"&-collapsed::after":{transform:"rotate(0deg)"}},[`${t}-container`]:{"&::before":{insetInlineStart:"unset",insetInlineEnd:0},"&::after":{insetInlineStart:0,insetInlineEnd:"unset"},[`${t}-row-indent`]:{float:"right"}}}}},lf=e=>{const{componentCls:t,antCls:o,iconCls:n,fontSizeIcon:r,padding:l,paddingXS:s,headerIconColor:i,headerIconHoverColor:c,tableSelectionColumnWidth:d,tableSelectedRowBg:m,tableSelectedRowHoverBg:u,tableRowHoverBg:p,tablePaddingHorizontal:f,calc:g}=e;return{[`${t}-wrapper`]:{[`${t}-selection-col`]:{width:d,[`&${t}-selection-col-with-dropdown`]:{width:g(d).add(r).add(g(l).div(4)).equal()}},[`${t}-bordered ${t}-selection-col`]:{width:g(d).add(g(s).mul(2)).equal(),[`&${t}-selection-col-with-dropdown`]:{width:g(d).add(r).add(g(l).div(4)).add(g(s).mul(2)).equal()}},[` + table tr th${t}-selection-column, + table tr td${t}-selection-column, + ${t}-selection-column + `]:{paddingInlineEnd:e.paddingXS,paddingInlineStart:e.paddingXS,textAlign:"center",[`${o}-radio-wrapper`]:{marginInlineEnd:0}},[`table tr th${t}-selection-column${t}-cell-fix-left`]:{zIndex:g(e.zIndexTableFixed).add(1).equal({unit:!1})},[`table tr th${t}-selection-column::after`]:{backgroundColor:"transparent !important"},[`${t}-selection`]:{position:"relative",display:"inline-flex",flexDirection:"column"},[`${t}-selection-extra`]:{position:"absolute",top:0,zIndex:1,cursor:"pointer",transition:`all ${e.motionDurationSlow}`,marginInlineStart:"100%",paddingInlineStart:j(g(f).div(4).equal()),[n]:{color:i,fontSize:r,verticalAlign:"baseline","&:hover":{color:c}}},[`${t}-tbody`]:{[`${t}-row`]:{[`&${t}-row-selected`]:{[`> ${t}-cell`]:{background:m,"&-row-hover":{background:u}}},[`> ${t}-cell-row-hover`]:{background:p}}}}}},sf=e=>{const{componentCls:t,tableExpandColumnWidth:o,calc:n}=e,r=(l,s,i,c)=>({[`${t}${t}-${l}`]:{fontSize:c,[` + ${t}-title, + ${t}-footer, + ${t}-cell, + ${t}-thead > tr > th, + ${t}-tbody > tr > th, + ${t}-tbody > tr > td, + tfoot > tr > th, + tfoot > tr > td + `]:{padding:`${j(s)} ${j(i)}`},[`${t}-filter-trigger`]:{marginInlineEnd:j(n(i).div(2).mul(-1).equal())},[`${t}-expanded-row-fixed`]:{margin:`${j(n(s).mul(-1).equal())} ${j(n(i).mul(-1).equal())}`},[`${t}-tbody`]:{[`${t}-wrapper:only-child ${t}`]:{marginBlock:j(n(s).mul(-1).equal()),marginInline:`${j(n(o).sub(i).equal())} ${j(n(i).mul(-1).equal())}`}},[`${t}-selection-extra`]:{paddingInlineStart:j(n(i).div(4).equal())}}});return{[`${t}-wrapper`]:Object.assign(Object.assign({},r("middle",e.tablePaddingVerticalMiddle,e.tablePaddingHorizontalMiddle,e.tableFontSizeMiddle)),r("small",e.tablePaddingVerticalSmall,e.tablePaddingHorizontalSmall,e.tableFontSizeSmall))}},cf=e=>{const{componentCls:t,marginXXS:o,fontSizeIcon:n,headerIconColor:r,headerIconHoverColor:l}=e;return{[`${t}-wrapper`]:{[`${t}-thead th${t}-column-has-sorters`]:{outline:"none",cursor:"pointer",transition:`all ${e.motionDurationSlow}, left 0s`,"&:hover":{background:e.tableHeaderSortHoverBg,"&::before":{backgroundColor:"transparent !important"}},"&:focus-visible":{color:e.colorPrimary},[` + &${t}-cell-fix-left:hover, + &${t}-cell-fix-right:hover + `]:{background:e.tableFixedHeaderSortActiveBg}},[`${t}-thead th${t}-column-sort`]:{background:e.tableHeaderSortBg,"&::before":{backgroundColor:"transparent !important"}},[`td${t}-column-sort`]:{background:e.tableBodySortBg},[`${t}-column-title`]:{position:"relative",zIndex:1,flex:1,minWidth:0},[`${t}-column-sorters`]:{display:"flex",flex:"auto",alignItems:"center",justifyContent:"space-between","&::after":{position:"absolute",inset:0,width:"100%",height:"100%",content:'""'}},[`${t}-column-sorters-tooltip-target-sorter`]:{"&::after":{content:"none"}},[`${t}-column-sorter`]:{marginInlineStart:o,color:r,fontSize:0,transition:`color ${e.motionDurationSlow}`,"&-inner":{display:"inline-flex",flexDirection:"column",alignItems:"center"},"&-up, &-down":{fontSize:n,"&.active":{color:e.colorPrimary}},[`${t}-column-sorter-up + ${t}-column-sorter-down`]:{marginTop:"-0.3em"}},[`${t}-column-sorters:hover ${t}-column-sorter`]:{color:l}}}},df=e=>{const{componentCls:t,opacityLoading:o,tableScrollThumbBg:n,tableScrollThumbBgHover:r,tableScrollThumbSize:l,tableScrollBg:s,zIndexTableSticky:i,stickyScrollBarBorderRadius:c,lineWidth:d,lineType:m,tableBorderColor:u}=e,p=`${j(d)} ${m} ${u}`;return{[`${t}-wrapper`]:{[`${t}-sticky`]:{"&-holder":{position:"sticky",zIndex:i,background:e.colorBgContainer},"&-scroll":{position:"sticky",bottom:0,height:`${j(l)} !important`,zIndex:i,display:"flex",alignItems:"center",background:s,borderTop:p,opacity:o,"&:hover":{transformOrigin:"center bottom"},"&-bar":{height:l,backgroundColor:n,borderRadius:c,transition:`all ${e.motionDurationSlow}, transform 0s`,position:"absolute",bottom:0,"&:hover, &-active":{backgroundColor:r}}}}}}},Ar=e=>{const{componentCls:t,lineWidth:o,tableBorderColor:n,calc:r}=e,l=`${j(o)} ${e.lineType} ${n}`;return{[`${t}-wrapper`]:{[`${t}-summary`]:{position:"relative",zIndex:e.zIndexTableFixed,background:e.tableBg,"> tr":{"> th, > td":{borderBottom:l}}},[`div${t}-summary`]:{boxShadow:`0 ${j(r(o).mul(-1).equal())} 0 ${n}`}}}},uf=e=>{const{componentCls:t,motionDurationMid:o,lineWidth:n,lineType:r,tableBorderColor:l,calc:s}=e,i=`${j(n)} ${r} ${l}`,c=`${t}-expanded-row-cell`;return{[`${t}-wrapper`]:{[`${t}-tbody-virtual`]:{[`${t}-tbody-virtual-holder-inner`]:{[` + & > ${t}-row, + & > div:not(${t}-row) > ${t}-row + `]:{display:"flex",boxSizing:"border-box",width:"100%"}},[`${t}-cell`]:{borderBottom:i,transition:`background ${o}`},[`${t}-expanded-row`]:{[`${c}${c}-fixed`]:{position:"sticky",insetInlineStart:0,overflow:"hidden",width:`calc(var(--virtual-width) - ${j(n)})`,borderInlineEnd:"none"}}},[`${t}-bordered`]:{[`${t}-tbody-virtual`]:{"&:after":{content:'""',insetInline:0,bottom:0,borderBottom:i,position:"absolute"},[`${t}-cell`]:{borderInlineEnd:i,[`&${t}-cell-fix-right-first:before`]:{content:'""',position:"absolute",insetBlock:0,insetInlineStart:s(n).mul(-1).equal(),borderInlineStart:i}}},[`&${t}-virtual`]:{[`${t}-placeholder ${t}-cell`]:{borderInlineEnd:i,borderBottom:i}}}}}},ff=e=>{const{componentCls:t,fontWeightStrong:o,tablePaddingVertical:n,tablePaddingHorizontal:r,tableExpandColumnWidth:l,lineWidth:s,lineType:i,tableBorderColor:c,tableFontSize:d,tableBg:m,tableRadius:u,tableHeaderTextColor:p,motionDurationMid:f,tableHeaderBg:g,tableHeaderCellSplitColor:h,tableFooterTextColor:v,tableFooterBg:b,calc:$}=e,C=`${j(s)} ${i} ${c}`;return{[`${t}-wrapper`]:Object.assign(Object.assign({clear:"both",maxWidth:"100%","--rc-virtual-list-scrollbar-bg":e.tableScrollBg},no()),{[t]:Object.assign(Object.assign({},nt(e)),{fontSize:d,background:m,borderRadius:`${j(u)} ${j(u)} 0 0`,scrollbarColor:`${e.tableScrollThumbBg} ${e.tableScrollBg}`}),table:{width:"100%",textAlign:"start",borderRadius:`${j(u)} ${j(u)} 0 0`,borderCollapse:"separate",borderSpacing:0},[` + ${t}-cell, + ${t}-thead > tr > th, + ${t}-tbody > tr > th, + ${t}-tbody > tr > td, + tfoot > tr > th, + tfoot > tr > td + `]:{position:"relative",padding:`${j(n)} ${j(r)}`,overflowWrap:"break-word"},[`${t}-title`]:{padding:`${j(n)} ${j(r)}`},[`${t}-thead`]:{"\n > tr > th,\n > tr > td\n ":{position:"relative",color:p,fontWeight:o,textAlign:"start",background:g,borderBottom:C,transition:`background ${f} ease`,"&[colspan]:not([colspan='1'])":{textAlign:"center"},[`&:not(:last-child):not(${t}-selection-column):not(${t}-row-expand-icon-cell):not([colspan])::before`]:{position:"absolute",top:"50%",insetInlineEnd:0,width:1,height:"1.6em",backgroundColor:h,transform:"translateY(-50%)",transition:`background-color ${f}`,content:'""'}},"> tr:not(:last-child) > th[colspan]":{borderBottom:0}},[`${t}-tbody`]:{"> tr":{"> th, > td":{transition:`background ${f}, border-color ${f}`,borderBottom:C,[` + > ${t}-wrapper:only-child, + > ${t}-expanded-row-fixed > ${t}-wrapper:only-child + `]:{[t]:{marginBlock:j($(n).mul(-1).equal()),marginInline:`${j($(l).sub(r).equal())} + ${j($(r).mul(-1).equal())}`,[`${t}-tbody > tr:last-child > td`]:{borderBottomWidth:0,"&:first-child, &:last-child":{borderRadius:0}}}}},"> th":{position:"relative",color:p,fontWeight:o,textAlign:"start",background:g,borderBottom:C,transition:`background ${f} ease`},[`& > ${t}-measure-cell`]:{paddingBlock:"0 !important",borderBlock:"0 !important",[`${t}-measure-cell-content`]:{height:0,overflow:"hidden",pointerEvents:"none"}}}},[`${t}-footer`]:{padding:`${j(n)} ${j(r)}`,color:v,background:b}})}},mf=e=>{const{colorFillAlter:t,colorBgContainer:o,colorTextHeading:n,colorFillSecondary:r,colorFillContent:l,controlItemBgActive:s,controlItemBgActiveHover:i,padding:c,paddingSM:d,paddingXS:m,colorBorderSecondary:u,borderRadiusLG:p,controlHeight:f,colorTextPlaceholder:g,fontSize:h,fontSizeSM:v,lineHeight:b,lineWidth:$,colorIcon:C,colorIconHover:x,opacityLoading:S,controlInteractiveSize:k}=e,I=new Tt(r).onBackground(o).toHexString(),E=new Tt(l).onBackground(o).toHexString(),y=new Tt(t).onBackground(o).toHexString(),T=new Tt(C),O=new Tt(x),M=k/2-$,B=M*2+$*3;return{headerBg:y,headerColor:n,headerSortActiveBg:I,headerSortHoverBg:E,bodySortBg:y,rowHoverBg:y,rowSelectedBg:s,rowSelectedHoverBg:i,rowExpandedBg:t,cellPaddingBlock:c,cellPaddingInline:c,cellPaddingBlockMD:d,cellPaddingInlineMD:m,cellPaddingBlockSM:m,cellPaddingInlineSM:m,borderColor:u,headerBorderRadius:p,footerBg:y,footerColor:n,cellFontSize:h,cellFontSizeMD:h,cellFontSizeSM:h,headerSplitColor:u,fixedHeaderSortActiveBg:I,headerFilterHoverBg:l,filterDropdownMenuBg:o,filterDropdownBg:o,expandIconBg:o,selectionColumnWidth:f,stickyScrollBarBg:g,stickyScrollBarBorderRadius:100,expandIconMarginTop:(h*b-$*3)/2-Math.ceil((v*1.4-$*3)/2),headerIconColor:T.clone().setA(T.a*S).toRgbString(),headerIconHoverColor:O.clone().setA(O.a*S).toRgbString(),expandIconHalfInner:M,expandIconSize:B,expandIconScale:k/B}},Wr=2,pf=Lt("Table",e=>{const{colorTextHeading:t,colorSplit:o,colorBgContainer:n,controlInteractiveSize:r,headerBg:l,headerColor:s,headerSortActiveBg:i,headerSortHoverBg:c,bodySortBg:d,rowHoverBg:m,rowSelectedBg:u,rowSelectedHoverBg:p,rowExpandedBg:f,cellPaddingBlock:g,cellPaddingInline:h,cellPaddingBlockMD:v,cellPaddingInlineMD:b,cellPaddingBlockSM:$,cellPaddingInlineSM:C,borderColor:x,footerBg:S,footerColor:k,headerBorderRadius:I,cellFontSize:E,cellFontSizeMD:y,cellFontSizeSM:T,headerSplitColor:O,fixedHeaderSortActiveBg:M,headerFilterHoverBg:B,filterDropdownBg:w,expandIconBg:N,selectionColumnWidth:R,stickyScrollBarBg:P,calc:K}=e,D=wt(e,{tableFontSize:E,tableBg:n,tableRadius:I,tablePaddingVertical:g,tablePaddingHorizontal:h,tablePaddingVerticalMiddle:v,tablePaddingHorizontalMiddle:b,tablePaddingVerticalSmall:$,tablePaddingHorizontalSmall:C,tableBorderColor:x,tableHeaderTextColor:s,tableHeaderBg:l,tableFooterTextColor:k,tableFooterBg:S,tableHeaderCellSplitColor:O,tableHeaderSortBg:i,tableHeaderSortHoverBg:c,tableBodySortBg:d,tableFixedHeaderSortActiveBg:M,tableHeaderFilterActiveBg:B,tableFilterDropdownBg:w,tableRowHoverBg:m,tableSelectedRowBg:u,tableSelectedRowHoverBg:p,zIndexTableFixed:Wr,zIndexTableSticky:K(Wr).add(1).equal({unit:!1}),tableFontSizeMiddle:y,tableFontSizeSmall:T,tableSelectionColumnWidth:R,tableExpandIconBg:N,tableExpandColumnWidth:K(r).add(K(e.padding).mul(2)).equal(),tableExpandedRowBg:f,tableFilterDropdownWidth:120,tableFilterDropdownHeight:264,tableFilterDropdownSearchWidth:140,tableScrollThumbSize:8,tableScrollThumbBg:P,tableScrollThumbBgHover:t,tableScrollBg:o});return[ff(D),of(D),Ar(D),cf(D),tf(D),Qu(D),rf(D),ef(D),Ar(D),Ju(D),lf(D),nf(D),df(D),Zu(D),sf(D),af(D),uf(D)]},mf,{unitless:{expandIconScale:!0}}),Vr=[],gf=(e,t)=>{var o,n;const{prefixCls:r,className:l,rootClassName:s,style:i,size:c,bordered:d,dropdownPrefixCls:m,dataSource:u,pagination:p,rowSelection:f,rowKey:g="key",rowClassName:h,columns:v,children:b,childrenColumnName:$,onChange:C,getPopupContainer:x,loading:S,expandIcon:k,expandable:I,expandedRowRender:E,expandIconColumnIndex:y,indentSize:T,scroll:O,sortDirections:M,locale:B,showSorterTooltip:w={target:"full-header"},virtual:N}=e;cn();const R=a.useMemo(()=>v||ko(b),[v,b]),P=a.useMemo(()=>R.some(me=>me.responsive),[R]),K=Ei(P),D=a.useMemo(()=>{const me=new Set(Object.keys(K).filter(fe=>K[fe]));return R.filter(fe=>!fe.responsive||fe.responsive.some(Pe=>me.has(Pe)))},[R,K]),F=It(e,["className","style","columns"]),{locale:A=ra,direction:q,table:L,renderEmpty:se,getPrefixCls:ce,getPopupContainer:ie}=a.useContext(Ue),Q=Co(c),Z=Object.assign(Object.assign({},A.Table),B),V=u||Vr,te=ce("table",r),ne=ce("dropdown",m),[,X]=bo(),J=pt(te),[W,H,ee]=pf(te,J),le=Object.assign(Object.assign({childrenColumnName:$,expandIconColumnIndex:y},I),{expandIcon:(o=I==null?void 0:I.expandIcon)!==null&&o!==void 0?o:(n=L==null?void 0:L.expandable)===null||n===void 0?void 0:n.expandIcon}),{childrenColumnName:ue="children"}=le,Be=a.useMemo(()=>V.some(me=>me==null?void 0:me[ue])?"nest":E||I!=null&&I.expandedRowRender?"row":null,[V]),Re={body:a.useRef(null)},z=Dd(te),re=a.useRef(null),ae=a.useRef(null);_i(t,()=>Object.assign(Object.assign({},ae.current),{nativeElement:re.current}));const xe=a.useMemo(()=>typeof g=="function"?g:me=>me==null?void 0:me[g],[g]),[Se]=Ku(V,ue,xe),$e={},Te=(me,fe,Pe=!1)=>{var He,Ye,et,rt;const tt=Object.assign(Object.assign({},$e),me);Pe&&((He=$e.resetPagination)===null||He===void 0||He.call($e),!((Ye=tt.pagination)===null||Ye===void 0)&&Ye.current&&(tt.pagination.current=1),p&&((et=p.onChange)===null||et===void 0||et.call(p,1,(rt=tt.pagination)===null||rt===void 0?void 0:rt.pageSize))),O&&O.scrollToFirstRowOnChange!==!1&&Re.body.current&&Di(0,{getContainer:()=>Re.body.current}),C==null||C(tt.pagination,tt.filters,tt.sorter,{currentDataSource:go(ho(V,tt.sorterStates,ue),tt.filterStates,ue),action:fe})},Me=(me,fe)=>{Te({sorter:me,sorterStates:fe},"sort",!1)},[De,Ne,oe,G]=Xu({prefixCls:te,mergedColumns:D,onSorterChange:Me,sortDirections:M||["ascend","descend"],tableLocale:Z,showSorterTooltip:w}),ge=a.useMemo(()=>ho(V,Ne,ue),[V,Ne]);$e.sorter=G(),$e.sorterStates=Ne;const ke=(me,fe)=>{Te({filters:me,filterStates:fe},"filter",!0)},[Oe,we,Ke]=Du({prefixCls:te,locale:Z,dropdownPrefixCls:ne,mergedColumns:D,onFilterChange:ke,getPopupContainer:x||ie,rootClassName:Y(s,J)}),be=go(ge,we,ue);$e.filters=Ke,$e.filterStates=we;const je=a.useMemo(()=>{const me={};return Object.keys(Ke).forEach(fe=>{Ke[fe]!==null&&(me[fe]=Ke[fe])}),Object.assign(Object.assign({},oe),{filters:me})},[oe,Ke]),[Ve]=Gu(je),qe=(me,fe)=>{Te({pagination:Object.assign(Object.assign({},$e.pagination),{current:me,pageSize:fe})},"paginate")},[Ee,Rt]=ju(be.length,qe,p);$e.pagination=p===!1?{}:_u(Ee,p),$e.resetPagination=Rt;const it=a.useMemo(()=>{if(p===!1||!Ee.pageSize)return be;const{current:me=1,total:fe,pageSize:Pe=il}=Ee;return be.lengthPe?be.slice((me-1)*Pe,me*Pe):be:be.slice((me-1)*Pe,me*Pe)},[!!p,be,Ee==null?void 0:Ee.current,Ee==null?void 0:Ee.pageSize,Ee==null?void 0:Ee.total]),[_t,ot]=Bd({prefixCls:te,data:be,pageData:it,getRowKey:xe,getRecordByKey:Se,expandType:Be,childrenColumnName:ue,locale:Z,getPopupContainer:x||ie},f),Ze=(me,fe,Pe)=>{let He;return typeof h=="function"?He=Y(h(me,fe,Pe)):He=Y(h),Y({[`${te}-row-selected`]:ot.has(xe(me,fe))},He)};le.__PARENT_RENDER_ICON__=le.expandIcon,le.expandIcon=le.expandIcon||k||Md(Z),Be==="nest"&&le.expandIconColumnIndex===void 0?le.expandIconColumnIndex=f?1:0:le.expandIconColumnIndex>0&&f&&(le.expandIconColumnIndex-=1),typeof le.indentSize!="number"&&(le.indentSize=typeof T=="number"?T:15);const Je=a.useCallback(me=>Ve(_t(Oe(De(me)))),[De,Oe,_t]),Ge=()=>{if(p===!1||!(Ee!=null&&Ee.total))return{};const me=()=>Ee.size||(Q==="small"||Q==="middle"?"small":void 0),fe=ze=>{const Fn=ze==="left"?"start":ze==="right"?"end":ze;return a.createElement(Ri,Object.assign({},Ee,{align:Ee.align||Fn,className:Y(`${te}-pagination`,Ee.className),size:me()}))},Pe=q==="rtl"?"left":"right",He=Ee.position;if(He===null||!Array.isArray(He))return{bottom:fe(Pe)};const Ye=He.find(ze=>typeof ze=="string"&&ze.toLowerCase().includes("top")),et=He.find(ze=>typeof ze=="string"&&ze.toLowerCase().includes("bottom")),rt=He.every(ze=>`${ze}`=="none"),tt=Ye?Ye.toLowerCase().replace("top",""):"",Qt=et?et.toLowerCase().replace("bottom",""):"",zn=!Ye&&!et&&!rt,pn=()=>tt?fe(tt):void 0,jt=()=>{if(Qt)return fe(Qt);if(zn)return fe(Pe)};return{top:pn(),bottom:jt()}},Le=a.useMemo(()=>typeof S=="boolean"?{spinning:S}:typeof S=="object"&&S!==null?Object.assign({spinning:!0},S):void 0,[S]),st=Y(ee,J,`${te}-wrapper`,L==null?void 0:L.className,{[`${te}-wrapper-rtl`]:q==="rtl"},l,s,H),Yt=Object.assign(Object.assign({},L==null?void 0:L.style),i),yt=a.useMemo(()=>Le!=null&&Le.spinning&&V===Vr?null:typeof(B==null?void 0:B.emptyText)<"u"?B.emptyText:(se==null?void 0:se("Table"))||a.createElement(Ii,{componentName:"Table"}),[Le==null?void 0:Le.spinning,V,B==null?void 0:B.emptyText,se]),ut=N?Yu:Uu,mn={},_n=a.useMemo(()=>{const{fontSize:me,lineHeight:fe,lineWidth:Pe,padding:He,paddingXS:Ye,paddingSM:et}=X,rt=Math.floor(me*fe);switch(Q){case"middle":return et*2+rt+Pe;case"small":return Ye*2+rt+Pe;default:return He*2+rt+Pe}},[X,Q]);N&&(mn.listItemHeight=_n);const{top:jn,bottom:Hn}=Ge();return W(a.createElement("div",{ref:re,className:st,style:Yt},a.createElement(Ni,Object.assign({spinning:!1},Le),jn,a.createElement(ut,Object.assign({},mn,F,{ref:ae,columns:D,direction:q,expandable:le,prefixCls:te,className:Y({[`${te}-middle`]:Q==="middle",[`${te}-small`]:Q==="small",[`${te}-bordered`]:d,[`${te}-empty`]:V.length===0},ee,J,H),data:it,rowKey:xe,rowClassName:Ze,emptyText:yt,internalHooks:fn,internalRefs:Re,transformColumns:Je,getContainerWidth:z,measureRowRender:me=>a.createElement(Oi,{getPopupContainer:fe=>fe},me)})),Hn)))},vf=a.forwardRef(gf),hf=(e,t)=>{const o=a.useRef(0);return o.current+=1,a.createElement(vf,Object.assign({},e,{ref:t,_renderTimes:o.current}))},Ot=a.forwardRef(hf);Ot.SELECTION_COLUMN=Ct;Ot.EXPAND_COLUMN=St;Ot.SELECTION_ALL=co;Ot.SELECTION_INVERT=uo;Ot.SELECTION_NONE=fo;Ot.Column=$d;Ot.ColumnGroup=wd;Ot.Summary=ja;export{Wt as C,Nt as F,Ot as a}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/ThunderboltOutlined-xUGxlyJ6.js b/shopops-admin/src/main/resources/static/admin/assets/ThunderboltOutlined-xUGxlyJ6.js new file mode 100644 index 0000000..9ab1d06 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/ThunderboltOutlined-xUGxlyJ6.js @@ -0,0 +1 @@ +import{r as e,I as n,_ as a}from"./styles-CdbHnvft.js";var o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M848 359.3H627.7L825.8 109c4.1-5.3.4-13-6.3-13H436c-2.8 0-5.5 1.5-6.9 4L170 547.5c-3.1 5.3.7 12 6.9 12h174.4l-89.4 357.6c-1.9 7.8 7.5 13.3 13.3 7.7L853.5 373c5.2-4.9 1.7-13.7-5.5-13.7zM378.2 732.5l60.3-241H281.1l189.6-327.4h224.6L487 427.4h211L378.2 732.5z"}}]},name:"thunderbolt",theme:"outlined"},l=function(t,r){return e.createElement(n,a({},t,{ref:r,icon:o}))},s=e.forwardRef(l);export{s as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/ToolOutlined-MDl_KHZ_.js b/shopops-admin/src/main/resources/static/admin/assets/ToolOutlined-MDl_KHZ_.js new file mode 100644 index 0000000..00bcc97 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/ToolOutlined-MDl_KHZ_.js @@ -0,0 +1 @@ +import{r as e,I as o,_ as l}from"./styles-CdbHnvft.js";var c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M876.6 239.5c-.5-.9-1.2-1.8-2-2.5-5-5-13.1-5-18.1 0L684.2 409.3l-67.9-67.9L788.7 169c.8-.8 1.4-1.6 2-2.5 3.6-6.1 1.6-13.9-4.5-17.5-98.2-58-226.8-44.7-311.3 39.7-67 67-89.2 162-66.5 247.4l-293 293c-3 3-2.8 7.9.3 11l169.7 169.7c3.1 3.1 8.1 3.3 11 .3l292.9-292.9c85.5 22.8 180.5.7 247.6-66.4 84.4-84.5 97.7-213.1 39.7-311.3zM786 499.8c-58.1 58.1-145.3 69.3-214.6 33.6l-8.8 8.8-.1-.1-274 274.1-79.2-79.2 230.1-230.1s0 .1.1.1l52.8-52.8c-35.7-69.3-24.5-156.5 33.6-214.6a184.2 184.2 0 01144-53.5L537 318.9a32.05 32.05 0 000 45.3l124.5 124.5a32.05 32.05 0 0045.3 0l132.8-132.8c3.7 51.8-14.4 104.8-53.6 143.9z"}}]},name:"tool",theme:"outlined"},r=function(t,a){return e.createElement(o,l({},t,{ref:a,icon:c}))},i=e.forwardRef(r);export{i as R}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/approvals-BYTE0-0F.js b/shopops-admin/src/main/resources/static/admin/assets/approvals-BYTE0-0F.js new file mode 100644 index 0000000..24c6b34 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/approvals-BYTE0-0F.js @@ -0,0 +1 @@ +import{r as i,I as se,_ as re,L as V,T as je,R as ve,j as e,a as Ce,C as we,z as be,b as ye,c as K,s as h,A as Se,S as R,d as x,e as ke,f as z,g as I,h as G,i as X,F as Y,B as c,k as Ne,l as Re,D as j,m as Ee,n as $e,o as T,p as B,q as le}from"./styles-CdbHnvft.js";import{F as u,a as De}from"./Table-sHSMbx0B.js";import{R as Le}from"./StopOutlined-BzANPQ2U.js";import{R as Te}from"./CheckCircleOutlined-xsXj4p7f.js";import{R as Pe}from"./AuditOutlined-D7IGVWIo.js";import{R as Fe}from"./ToolOutlined-MDl_KHZ_.js";import{S as Me}from"./index-emnzbHoJ.js";var Ae={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"},Oe=function(t,r){return i.createElement(se,re({},t,{ref:r,icon:Ae}))},ze=i.forwardRef(Oe),Be={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"},Ve=function(t,r){return i.createElement(se,re({},t,{ref:r,icon:Be}))},Ge=i.forwardRef(Ve);const{Header:Ue,Content:He}=V,{Paragraph:qe,Text:Je,Title:Qe}=je,We=["PENDING","APPROVED","REJECTED","WITHDRAWN","EXPIRED"],_e=["HIGH","MEDIUM","LOW"];function Ke(){const s=ye(),[t]=u.useForm(),[r]=u.useForm(),[d,E]=i.useState({tenantId:s.tenantId||"1",shopId:s.shopId||"1",userId:s.userId||"1",roles:s.roles||"ADMIN,OPERATOR"}),[P,ne]=i.useState([]),[l,F]=i.useState(null),[k,M]=i.useState([]),[ie,oe]=i.useState(0),[g,ce]=i.useState(1),[m,de]=i.useState(20),[pe,U]=i.useState(!1),[ue,H]=i.useState(!1),[C,w]=i.useState(!1),[me,b]=i.useState("审批中心已就绪。"),$=i.useMemo(()=>Xe(P),[P]),q=i.useCallback((a=g,n=m)=>{const p=t.getFieldsValue(),o=new URLSearchParams;return o.set("pageNum",String(a)),o.set("pageSize",String(n)),v(o,"status",p.status),v(o,"riskLevel",p.riskLevel),v(o,"toolCode",p.toolCode),v(o,"taskId",p.taskId),v(o,"traceId",p.traceId),v(o,"approvalNo",p.approvalNo),v(o,"approvalId",p.approvalId),o},[t,g,m]),J=i.useCallback(a=>{window.history.replaceState(null,"",`${window.location.pathname}?${a.toString()}`)},[]),y=i.useCallback(async a=>{if(!a){F(null);return}H(!0);try{const n=await K(`/api/admin/approvals/${encodeURIComponent(String(a))}`,d);F(n),r.setFieldsValue({comment:n.decisionComment||"",confirmText:""}),b(`审批详情已加载:${n.approvalNo||n.approvalId}`)}catch(n){h.error(S(n))}finally{H(!1)}},[d,r]),f=i.useCallback(async(a=g,n=m)=>{var o;U(!0);const p=q(a,n);try{const N=await K(`/api/admin/approvals?${p}`,d),D=N.list||[];ne(D),oe(N.total||0),ce(a),de(n),M(ge=>ge.filter(fe=>D.some(_=>_.approvalId===fe&&_.status==="PENDING"))),J(p);const W=t.getFieldValue("approvalId");W?y(W):!l&&((o=D[0])!=null&&o.approvalId)&&y(D[0].approvalId),b("审批单已刷新。")}catch(N){b(`审批单加载失败:${S(N)}`),h.error(S(N))}finally{U(!1)}},[q,d,t,y,g,m,l,J]),he=i.useCallback(()=>{const a=new URLSearchParams(window.location.search);t.setFieldsValue({status:a.get("status")||void 0,riskLevel:a.get("riskLevel")||void 0,toolCode:a.get("toolCode")||void 0,taskId:a.get("taskId")||void 0,traceId:a.get("traceId")||void 0,approvalNo:a.get("approvalNo")||void 0,approvalId:a.get("approvalId")||void 0});const n=a.get("approvalId");n&&y(n)},[t,y]);i.useEffect(()=>{he(),f(te(new URLSearchParams(window.location.search).get("pageNum"),1),te(new URLSearchParams(window.location.search).get("pageSize"),20))},[]);function A(a){a==="pending"&&t.setFieldsValue({status:"PENDING"}),a==="high"&&t.setFieldsValue({riskLevel:"HIGH"}),a==="refund"&&t.setFieldsValue({toolCode:"order.refund_execute"}),f(1,m)}async function O(a){if(!(l!=null&&l.approvalId)){h.warning("请先选择一条审批单");return}w(!0);try{const n=r.getFieldsValue(),p=await B(`/api/admin/approvals/${encodeURIComponent(String(l.approvalId))}/${a}`,n,d);F(p),b(ae(a)),h.success(ae(a)),await f(g,m)}catch(n){h.error(S(n))}finally{w(!1)}}async function Q(a){if(k.length===0){h.warning("请先勾选待处理审批单");return}w(!0);try{const n={approvalIds:k.map(o=>Number(o)).filter(o=>Number.isFinite(o)),...r.getFieldsValue()},p=await B(`/api/admin/approvals/batch/${a}`,n,d);M([]),b(`批量处理完成:成功 ${T(p.successCount)},失败 ${T(p.failedCount)}。`),h.success("批量处理完成"),await f(g,m)}catch(n){h.error(S(n))}finally{w(!1)}}async function xe(){w(!0);try{const a=await B("/api/admin/approvals/expire-stale?timeoutMinutes=60&limit=50",{},d);b(`超时审批关闭完成:${T(a.successCount)} 条。`),h.success("超时审批已关闭"),await f(g,m)}catch(a){h.error(S(a))}finally{w(!1)}}const Ie={selectedRowKeys:k,onChange:M,getCheckboxProps:a=>({disabled:a.status!=="PENDING"})};return e.jsxs(V,{className:"app-shell","data-page-markers":'applyInitialQuery syncUrl positiveInt(params.get("pageNum"), 1) positiveInt(params.get("pageSize"), 20) navigator.clipboard fallbackCopy',"data-api-patterns":"/api/admin/approvals/${approvalId}/${action} /api/admin/approvals/batch/${action} /api/admin/approvals/expire-stale",children:[e.jsx(Se,{active:"approvals"}),e.jsxs(V,{children:[e.jsxs(Ue,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Qe,{level:3,children:"审批中心"}),e.jsx(Je,{type:"secondary",children:"处理 Agent 高风险工具审批,追踪通过、驳回、撤回和超时关闭链路"})]}),e.jsxs(R,{wrap:!0,children:[e.jsx(x,{addonBefore:"Tenant",value:d.tenantId,onChange:a=>E({...d,tenantId:a.target.value})}),e.jsx(x,{addonBefore:"Shop",value:d.shopId,onChange:a=>E({...d,shopId:a.target.value})}),e.jsx(x,{addonBefore:"User",value:d.userId,onChange:a=>E({...d,userId:a.target.value})}),e.jsx(x,{addonBefore:"Roles",value:d.roles,onChange:a=>E({...d,roles:a.target.value})})]})]}),e.jsxs(He,{className:"content",children:[e.jsx(ke,{type:"info",showIcon:!0,message:me}),e.jsxs(z,{gutter:[16,16],children:[e.jsx(L,{title:"总数",value:$.total}),e.jsx(L,{title:"待审批",value:$.pending}),e.jsx(L,{title:"高风险",value:$.highRisk}),e.jsx(L,{title:"已关闭",value:$.closed})]}),e.jsxs(z,{gutter:[16,16],children:[e.jsx(I,{xs:24,xl:15,children:e.jsxs(G,{title:"审批队列",className:"section-card",children:[e.jsxs(u,{form:t,layout:"vertical",onFinish:()=>f(1,m),children:[e.jsxs(z,{gutter:12,children:[e.jsx(I,{xs:24,md:6,children:e.jsx(u.Item,{label:"状态",name:"status",children:e.jsx(X,{allowClear:!0,options:We.map(a=>({value:a,label:a}))})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(u.Item,{label:"风险",name:"riskLevel",children:e.jsx(X,{allowClear:!0,options:_e.map(a=>({value:a,label:a}))})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(u.Item,{label:"工具编码",name:"toolCode",children:e.jsx(x,{placeholder:"order.refund_execute"})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(u.Item,{label:"任务 ID",name:"taskId",children:e.jsx(x,{})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(u.Item,{label:"Trace",name:"traceId",children:e.jsx(x,{})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(u.Item,{label:"审批单号",name:"approvalNo",children:e.jsx(x,{})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(u.Item,{label:"审批 ID",name:"approvalId",children:e.jsx(x,{id:"approvalId"})})})]}),e.jsxs(Y,{justify:"space-between",wrap:"wrap",gap:12,children:[e.jsxs(R,{wrap:!0,children:[e.jsx(c,{id:"filterSubmit",type:"primary",htmlType:"submit",icon:e.jsx(Ne,{}),children:"查询"}),e.jsx(c,{onClick:()=>{t.resetFields(),f(1,m)},children:"重置"}),e.jsx(c,{"data-quick-filter":"pending",onClick:()=>A("pending"),children:"待审批"}),e.jsx(c,{"data-quick-filter":"high",onClick:()=>A("high"),children:"高风险"}),e.jsx(c,{"data-quick-filter":"refund",onClick:()=>A("refund"),children:"退款工具"})]}),e.jsxs(R,{wrap:!0,children:[e.jsx(c,{id:"batchApproveBtn",type:"primary",disabled:!k.length,loading:C,onClick:()=>Q("approve"),children:"批量通过"}),e.jsx(c,{id:"batchRejectBtn",danger:!0,disabled:!k.length,loading:C,onClick:()=>Q("reject"),children:"批量驳回"}),e.jsx(c,{id:"expireStaleBtn",icon:e.jsx(Le,{}),loading:C,onClick:xe,children:"关闭超时"}),e.jsx(c,{icon:e.jsx(Re,{}),onClick:()=>f(g,m),children:"刷新"})]})]})]}),e.jsx(De,{className:"spaced-table",rowKey:a=>String(a.approvalId),rowSelection:Ie,loading:pe,dataSource:P,pagination:{current:g,pageSize:m,total:ie,showSizeChanger:!0,onChange:f},onRow:a=>({onClick:()=>y(a.approvalId)}),rowClassName:a=>a.approvalId===(l==null?void 0:l.approvalId)?"selected-row clickable":"clickable",columns:[{title:"审批单",dataIndex:"approvalNo",width:160,render:(a,n)=>a||n.approvalId},{title:"标题",dataIndex:"title",ellipsis:!0},{title:"工具",dataIndex:"toolCode",width:190},{title:"状态",dataIndex:"status",width:120,render:Z},{title:"风险",dataIndex:"riskLevel",width:100,render:ee},{title:"申请人",dataIndex:"requesterName",width:120},{title:"审批人",dataIndex:"approverName",width:120,render:a=>a||"-"},{title:"创建时间",dataIndex:"createdAt",width:170,render:Ye}]})]})}),e.jsx(I,{xs:24,xl:9,children:e.jsx(G,{title:"审批详情",className:"section-card",loading:ue,extra:e.jsx(c,{id:"copyDetail",icon:e.jsx($e,{}),onClick:()=>Ze(JSON.stringify(l||{},null,2)),children:"复制"}),children:l?e.jsxs(R,{direction:"vertical",className:"full-width",size:14,children:[e.jsxs(j,{size:"small",bordered:!0,column:1,id:"approvalSummary",children:[e.jsx(j.Item,{label:"审批单",children:l.approvalNo||l.approvalId}),e.jsx(j.Item,{label:"状态",children:Z(l.status)}),e.jsx(j.Item,{label:"风险",children:ee(l.riskLevel)}),e.jsx(j.Item,{label:"工具",children:l.toolCode||"-"}),e.jsx(j.Item,{label:"任务",children:l.taskId||"-"}),e.jsx(j.Item,{label:"Trace",children:l.traceId||"-"}),e.jsx(j.Item,{label:"申请原因",children:l.reason||"-"})]}),e.jsxs(u,{form:r,layout:"vertical",children:[e.jsx(u.Item,{label:"处理意见",name:"comment",children:e.jsx(x.TextArea,{id:"decisionComment",rows:3,placeholder:"填写审批备注"})}),e.jsx(u.Item,{label:"确认文本",name:"confirmText",children:e.jsx(x,{id:"confirmText",placeholder:"高风险审批可填写确认通过"})})]}),e.jsxs(Y,{wrap:"wrap",gap:8,children:[e.jsx(c,{id:"approveBtn",type:"primary",icon:e.jsx(Te,{}),loading:C,onClick:()=>O("approve"),children:"通过"}),e.jsx(c,{id:"rejectBtn",danger:!0,icon:e.jsx(ze,{}),loading:C,onClick:()=>O("reject"),children:"驳回"}),e.jsx(c,{id:"withdrawBtn",icon:e.jsx(Ge,{}),loading:C,onClick:()=>O("withdraw"),children:"撤回"})]}),e.jsxs(R,{wrap:!0,children:[e.jsx(c,{id:"openAudit",href:`/admin/audit.html?source=APPROVAL&resourceId=${l.approvalId}`,icon:e.jsx(Pe,{}),children:"审计中心"}),e.jsx(c,{href:l.taskId?`/admin/tasks.html?taskId=${l.taskId}`:"/admin/tasks.html",icon:e.jsx(Ee,{}),children:"任务"}),e.jsx(c,{href:l.toolCode?`/admin/tools.html?toolCode=${l.toolCode}`:"/admin/tools.html",icon:e.jsx(Fe,{}),children:"工具日志"})]}),e.jsx(qe,{className:"json-block",id:"detailBox",children:JSON.stringify(l,null,2)})]}):e.jsx("div",{className:"empty-state",children:"请选择一条审批单"})})})]})]})]})]})}function L({title:s,value:t}){return e.jsx(I,{xs:12,md:6,children:e.jsx(G,{className:"metric-card",children:e.jsx(Me,{title:s,value:T(t)})})})}function Xe(s){return s.reduce((t,r)=>(t.total+=1,t.pending+=r.status==="PENDING"?1:0,t.highRisk+=r.riskLevel==="HIGH"?1:0,t.closed+=r.status&&r.status!=="PENDING"?1:0,t),{total:0,pending:0,highRisk:0,closed:0})}function Z(s){const t=String(s||"-"),r=t==="PENDING"?"blue":t==="APPROVED"?"green":t==="REJECTED"?"red":t==="EXPIRED"?"orange":"default";return e.jsx(le,{color:r,children:t})}function ee(s){const t=String(s||"-"),r=t==="HIGH"?"red":t==="MEDIUM"?"orange":t==="LOW"?"green":"default";return e.jsx(le,{color:r,children:t})}function ae(s){return s==="approve"?"审批已通过。":s==="reject"?"审批已驳回。":"审批已撤回。"}function v(s,t,r){r&&r.trim()&&s.set(t,r.trim())}function te(s,t){const r=Number(s);return Number.isFinite(r)&&r>0?Math.floor(r):t}function Ye(s){return s?String(s).replace("T"," ").slice(0,19):"-"}async function Ze(s){try{await navigator.clipboard.writeText(s),h.success("已复制")}catch{const t=document.createElement("textarea");t.dataset.copyMode="fallbackCopy",t.value=s,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t),h.success("已复制")}}function S(s){return s instanceof Error?s.message:String(s)}ve.createRoot(document.getElementById("root")).render(e.jsx(Ce.StrictMode,{children:e.jsx(we,{locale:be,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx(Ke,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/audit-stiICUtL.js b/shopops-admin/src/main/resources/static/admin/assets/audit-stiICUtL.js new file mode 100644 index 0000000..229d1a3 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/audit-stiICUtL.js @@ -0,0 +1 @@ +import{r as n,I as he,_ as xe,j as e,L as M,T as pe,R as je,a as fe,C as Ie,z as ge,b as Ce,c as O,s as w,t as be,A as Se,S as k,B as m,l as ke,e as Y,f as A,g as u,h as C,i as D,d as v,F as ve,k as Re,D as x,n as ye,o as we,q as H}from"./styles-CdbHnvft.js";import{i as Te}from"./index-ClPwX7rX.js";import{F as j,a as Ee}from"./Table-sHSMbx0B.js";import{S as Le}from"./index-emnzbHoJ.js";import{R as Ne}from"./AuditOutlined-D7IGVWIo.js";import{R as Oe}from"./FileTextOutlined-DR_VCDvU.js";import{R as Ae}from"./ApiOutlined-CqRwPpT6.js";import{R as De}from"./ToolOutlined-MDl_KHZ_.js";var Fe={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"},$e=function(s,r){return n.createElement(he,xe({},s,{ref:r,icon:Fe}))},Ue=n.forwardRef($e);const Pe={HIGH:"高风险",MEDIUM:"中风险",LOW:"低风险",UNKNOWN:"未知"};function ze({breakdown:t}){const s=n.useRef(null);return n.useEffect(()=>{if(!s.current)return;const r=Te(s.current),b=Object.entries(t||{}).filter(([,R])=>Number(R)>0);r.setOption({tooltip:{trigger:"item"},legend:{bottom:0,left:"center"},color:["#d14343","#d9842b","#31795a","#637083"],series:[{name:"风险分布",type:"pie",radius:["42%","68%"],center:["50%","44%"],avoidLabelOverlap:!0,label:{formatter:"{b}: {c}"},data:b.length?b.map(([R,f])=>({name:Pe[R]||R,value:f})):[{name:"暂无事件",value:1,itemStyle:{color:"#d9dee8"}}]}]});const i=()=>r.resize();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i),r.dispose()}},[t]),e.jsx("div",{className:"audit-risk-chart",ref:s})}const{Header:Me,Content:Ve}=M,{Paragraph:Be,Text:Z,Title:He}=pe,Je=["AUTH","TASK","TOOL","APPROVAL","CONNECTOR"],We=["SUCCESS","FAILURE","FAILED","PENDING","APPROVED","REJECTED","CANCELED"],Ge=["LOW","MEDIUM","HIGH"];function qe(){const t=Ce(),[s]=j.useForm(),[r,b]=n.useState({tenantId:t.tenantId||"1",shopId:t.shopId||"1",userId:t.userId||"1",roles:t.roles||"ADMIN,OPERATOR"}),[i,R]=n.useState(null),[f,ee]=n.useState(null),[te,se]=n.useState([]),[ae,re]=n.useState(0),[y,J]=n.useState(1),[h,W]=n.useState(20),[o,E]=n.useState(null),[ne,G]=n.useState(!1),[le,q]=n.useState(!1),[ie,K]=n.useState(!1),[oe,L]=n.useState("审计中心已就绪。"),p=o==null?void 0:o.event,ce=n.useMemo(()=>B(o==null?void 0:o.context,"shopConfigSnapshot"),[o]),de=n.useMemo(()=>B(o==null?void 0:o.context,"recentShopConfigChange"),[o]),N=n.useCallback((a=y,c=h)=>{const d=s.getFieldsValue(),l=new URLSearchParams;return l.set("pageNum",String(a)),l.set("pageSize",String(c)),g(l,"source",d.source),g(l,"eventType",d.eventType),g(l,"eventStatus",d.eventStatus),g(l,"taskId",d.taskId),g(l,"traceId",d.traceId),g(l,"toolCode",d.toolCode),g(l,"riskLevel",d.riskLevel),g(l,"username",d.username),d.elevatedRisk==="true"&&l.set("elevatedRisk","true"),l},[s,y,h]),Q=n.useCallback(a=>{window.history.replaceState(null,"",`${window.location.pathname}?${a.toString()}`)},[]),$=n.useCallback(async a=>{if(!a.source||!a.resourceId){E({event:a});return}q(!0);try{const c=await O(`/api/admin/audit/timeline/${encodeURIComponent(a.source)}/${encodeURIComponent(a.resourceId)}`,r);E(c),L(`已加载 ${a.source} / ${a.resourceId} 的审计详情。`)}catch(c){w.error(T(c)),E({event:a})}finally{q(!1)}},[r]),I=n.useCallback(async(a=y,c=h)=>{G(!0);const d=N(a,c);Q(d);try{const l=await O(`/api/admin/audit/timeline?${d.toString()}`,r),S=l.list||[];se(S),re(Number(l.total||0)),J(Number(l.pageNum||a)),W(Number(l.pageSize||c)),L("审计时间线已刷新。"),S[0]?$(S[0]):E(null)}catch(l){w.error(T(l)),L(`审计时间线加载失败:${T(l)}`)}finally{G(!1)}},[N,r,$,y,h,Q]),U=n.useCallback(async()=>{try{const[a,c]=await Promise.all([O("/api/admin/audit/overview",r),O("/api/admin/audit/high-risk",r)]);R(a),ee(c)}catch(a){w.error(T(a))}},[r]),ue=n.useCallback(async()=>{K(!0);try{const a=N(1,100),c=await fetch(`/api/admin/audit/export.csv?${a.toString()}`,{headers:be(r)});if(!c.ok)throw new Error(`HTTP ${c.status}`);const d=await c.blob(),l=URL.createObjectURL(d),S=document.createElement("a");S.href=l,S.download=`shopops-audit-${new Date().toISOString().slice(0,10)}.csv`,S.click(),URL.revokeObjectURL(l),L("CSV 已下载。")}catch(a){w.error(T(a))}finally{K(!1)}},[N,r]),me=n.useCallback(async()=>{try{await navigator.clipboard.writeText(JSON.stringify(o||{},null,2)),w.success("审计详情已复制")}catch{et(JSON.stringify(o||{},null,2)),w.success("审计详情已复制")}},[o]),P=n.useCallback(a=>{a==="failed"&&s.setFieldsValue({eventStatus:"FAILURE",elevatedRisk:void 0}),a==="approval"&&s.setFieldsValue({source:"APPROVAL",elevatedRisk:void 0}),a==="risk"&&s.setFieldsValue({elevatedRisk:"true",eventStatus:void 0}),I(1,h)},[s,I,h]);return n.useEffect(()=>{const a=new URLSearchParams(window.location.search),c={};["source","eventType","eventStatus","taskId","traceId","toolCode","riskLevel","username"].forEach(d=>{const l=a.get(d);l&&(c[d]=l)}),a.get("elevatedRisk")==="true"&&(c.elevatedRisk="true"),s.setFieldsValue(c),J(X(a.get("pageNum"),1)),W(X(a.get("pageSize"),20))},[s]),n.useEffect(()=>{U(),I(y,h)},[U]),e.jsxs(M,{className:"app-shell",children:[e.jsx(Se,{active:"audit"}),e.jsxs(M,{children:[e.jsxs(Me,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(He,{level:3,children:"调用链审计中心"}),e.jsx(Z,{type:"secondary",children:"把 Agent 任务、工具调用、审批动作和店铺配置快照串成可追踪证据链"})]}),e.jsxs(k,{children:[e.jsx(m,{icon:e.jsx(ke,{}),onClick:()=>{U(),I(1,h)},children:"刷新"}),e.jsx(m,{icon:e.jsx(Ue,{}),loading:ie,onClick:ue,children:"CSV 下载"})]})]}),e.jsxs(Ve,{className:"content",children:[e.jsx(Y,{className:"status-alert",message:oe,type:"info",showIcon:!0}),e.jsxs(A,{gutter:[16,16],children:[e.jsxs(u,{xs:24,lg:16,children:[e.jsxs(A,{gutter:[16,16],children:[e.jsx(z,{title:"审计事件",value:((i==null?void 0:i.authEventTotal)||0)+((i==null?void 0:i.taskEventTotal)||0)+((i==null?void 0:i.toolCallTotal)||0)}),e.jsx(z,{title:"失败事件",value:((i==null?void 0:i.authFailureTotal)||0)+((i==null?void 0:i.taskFailureTotal)||0)+((i==null?void 0:i.toolCallFailed)||0)}),e.jsx(z,{title:"高风险链路",value:(f==null?void 0:f.elevatedRiskTotal)||0})]}),e.jsx(C,{title:"快捷筛选",className:"section-card",children:e.jsxs(k,{wrap:!0,children:[e.jsx(m,{"data-quick-filter":"failed",onClick:()=>P("failed"),children:"失败链路"}),e.jsx(m,{"data-quick-filter":"approval",onClick:()=>P("approval"),children:"审批事件"}),e.jsx(m,{"data-quick-filter":"risk",onClick:()=>P("risk"),children:"中高风险"}),e.jsx(m,{"data-empty-reset":!0,onClick:()=>{s.resetFields(),I(1,h)},children:"重置"})]})})]}),e.jsx(u,{xs:24,lg:8,children:e.jsx(C,{title:"风险分布",className:"section-card",children:e.jsx(ze,{breakdown:f==null?void 0:f.riskBreakdown})})})]}),e.jsx(C,{title:"审计筛选",className:"section-card",children:e.jsxs(j,{form:s,layout:"vertical",onFinish:()=>I(1,h),children:[e.jsxs(A,{gutter:12,children:[e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"来源",name:"source",children:e.jsx(D,{allowClear:!0,options:Je.map(a=>({value:a,label:a}))})})}),e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"状态",name:"eventStatus",children:e.jsx(D,{allowClear:!0,options:We.map(a=>({value:a,label:a}))})})}),e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"风险等级",name:"riskLevel",children:e.jsx(D,{allowClear:!0,options:Ge.map(a=>({value:a,label:a}))})})}),e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"只看中高风险",name:"elevatedRisk",children:e.jsx(D,{allowClear:!0,options:[{value:"true",label:"是"}]})})}),e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"任务 ID",name:"taskId",children:e.jsx(v,{allowClear:!0})})}),e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"Trace ID",name:"traceId",children:e.jsx(v,{allowClear:!0})})}),e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"工具编码",name:"toolCode",children:e.jsx(v,{allowClear:!0})})}),e.jsx(u,{xs:24,md:6,children:e.jsx(j.Item,{label:"用户名",name:"username",children:e.jsx(v,{allowClear:!0})})})]}),e.jsxs(ve,{justify:"space-between",wrap:"wrap",gap:12,children:[e.jsxs(k,{children:[e.jsx(m,{type:"primary",htmlType:"submit",icon:e.jsx(Re,{}),children:"查询"}),e.jsx(m,{onClick:()=>{s.resetFields(),I(1,h)},children:"重置"})]}),e.jsx(Ke,{context:r,onChange:b})]})]})}),e.jsxs(A,{gutter:[16,16],children:[e.jsx(u,{xs:24,xl:14,children:e.jsx(C,{title:"审计时间线",className:"section-card timeline-column",children:e.jsx(Ee,{rowKey:a=>`${a.source}-${a.resourceId||a.eventId}`,loading:ne,dataSource:te,pagination:{current:y,pageSize:h,total:ae,showSizeChanger:!0,onChange:(a,c)=>I(a,c)},onRow:a=>({onClick:()=>$(a)}),columns:[{title:"时间",dataIndex:"createdAt",width:170,render:Ze},{title:"来源",dataIndex:"source",width:100,render:_},{title:"事件",dataIndex:"eventType",width:170},{title:"状态",dataIndex:"eventStatus",width:110,render:Xe},{title:"风险",dataIndex:"riskLevel",width:100,render:Ye},{title:"摘要",dataIndex:"summary",ellipsis:!0}]})})}),e.jsx(u,{xs:24,xl:10,children:e.jsx(C,{title:"审计详情",className:"section-card",loading:le,extra:e.jsx(m,{id:"copyDetail",icon:e.jsx(ye,{}),onClick:me,children:"复制"}),children:p?e.jsxs(k,{direction:"vertical",size:16,className:"full-width",children:[e.jsxs(x,{size:"small",column:1,bordered:!0,children:[e.jsx(x.Item,{label:"来源",children:_(p.source)}),e.jsxs(x.Item,{label:"资源",children:[p.resourceType||"-"," / ",p.resourceId||p.eventId||"-"]}),e.jsx(x.Item,{label:"任务",children:p.taskId||"-"}),e.jsx(x.Item,{label:"Trace",children:p.traceId||"-"}),e.jsx(x.Item,{label:"工具",children:p.toolCode||"-"}),e.jsx(x.Item,{label:"摘要",children:p.summary||"-"})]}),e.jsx(Qe,{event:p,resource:o==null?void 0:o.resource}),e.jsx(_e,{snapshot:ce,change:de}),e.jsx(V,{title:"上下文",value:o==null?void 0:o.context}),e.jsx(V,{title:"资源详情",value:o==null?void 0:o.resource})]}):e.jsx("div",{className:"empty-state",children:"暂无审计事件"})})})]})]})]})]})}function z({title:t,value:s}){return e.jsx(u,{xs:24,md:8,children:e.jsx(C,{className:"metric-card",children:e.jsx(Le,{title:t,value:we(s)})})})}function Ke({context:t,onChange:s}){return e.jsxs(k,{wrap:!0,children:[e.jsx(v,{addonBefore:"Tenant",value:t.tenantId,onChange:r=>s({...t,tenantId:r.target.value})}),e.jsx(v,{addonBefore:"Shop",value:t.shopId,onChange:r=>s({...t,shopId:r.target.value})}),e.jsx(v,{addonBefore:"User",value:t.userId,onChange:r=>s({...t,userId:r.target.value})})]})}function Qe({event:t,resource:s}){var b,i;const r=((b=t.detail)==null?void 0:b.reportId)||(s==null?void 0:s.reportId)||((i=B(s,"taskDetail"))==null?void 0:i.reportId);return e.jsxs(k,{wrap:!0,children:[e.jsx(m,{id:"openTask",href:t.taskId?`/admin/tasks.html?taskId=${t.taskId}`:"/admin/tasks.html",icon:e.jsx(Ne,{}),children:"任务"}),e.jsx(m,{id:"openReport",href:r?`/admin/reports.html?reportId=${r}`:"/admin/reports.html",icon:e.jsx(Oe,{}),children:"报告"}),e.jsx(m,{id:"openApproval",href:"/admin/approvals.html",icon:e.jsx(Ae,{}),children:"审批"}),e.jsx(m,{id:"openToolLogs",href:t.toolCode?`/admin/tools.html?toolCode=${t.toolCode}`:"/admin/tools.html",icon:e.jsx(De,{}),children:"工具日志"})]})}function _e({snapshot:t,change:s}){return!t&&!s?e.jsx(Y,{id:"configSnapshotBox",message:"本事件暂无店铺配置快照",type:"info",showIcon:!0}):e.jsxs(k,{direction:"vertical",className:"full-width",children:[t&&e.jsx(C,{id:"configSnapshotBox",size:"small",title:"本次 Agent 使用的店铺配置快照",children:e.jsxs(x,{size:"small",column:1,children:[e.jsx(x.Item,{label:"退款率预警阈值",children:F(t.refundRateWarnThreshold)}),e.jsx(x.Item,{label:"差评预警阈值",children:F(t.negativeCommentWarnThreshold)}),e.jsx(x.Item,{label:"高风险工具审批",children:String(t.agentToolApprovalEnabled??"-")}),e.jsx(x.Item,{label:"模型策略",children:F(t.agentModelPolicy)})]})}),s&&e.jsxs(C,{id:"configChangeBox",size:"small",title:"最近配置变更",children:[e.jsx(Be,{children:F(s.message)}),e.jsx(V,{title:"变更详情",value:s})]})]})}function V({title:t,value:s}){return s?e.jsxs("div",{children:[e.jsx(Z,{strong:!0,children:t}),e.jsx("pre",{className:"json-block",children:JSON.stringify(s,null,2)})]}):null}function _(t){return e.jsx(H,{color:t==="TOOL"?"blue":t==="APPROVAL"?"purple":"default",children:t||"-"})}function Xe(t){const s=t==="SUCCESS"||t==="APPROVED"?"green":t==="FAILURE"||t==="FAILED"||t==="REJECTED"?"red":"gold";return e.jsx(H,{color:s,children:t||"-"})}function Ye(t){const s=t==="HIGH"?"red":t==="MEDIUM"?"orange":t==="LOW"?"green":"default";return e.jsx(H,{color:s,children:t||"-"})}function g(t,s,r){r&&r.trim()&&t.set(s,r.trim())}function B(t,s){if(!t||typeof t!="object")return;const r=t[s];return r&&typeof r=="object"?r:void 0}function X(t,s){const r=Number(t);return Number.isFinite(r)&&r>0?Math.floor(r):s}function F(t){return t==null||t===""?"-":String(t)}function Ze(t){return t?t.replace("T"," ").slice(0,19):"-"}function et(t){const s=document.createElement("textarea");s.value=t,document.body.appendChild(s),s.select(),document.execCommand("copy"),document.body.removeChild(s)}function T(t){return t instanceof Error?t.message:String(t)}je.createRoot(document.getElementById("root")).render(e.jsx(fe.StrictMode,{children:e.jsx(Ie,{locale:ge,children:e.jsx(qe,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/auth-BUDROF0w.js b/shopops-admin/src/main/resources/static/admin/assets/auth-BUDROF0w.js new file mode 100644 index 0000000..a719168 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/auth-BUDROF0w.js @@ -0,0 +1 @@ +import{r,I as q,_ as P,L as z,T as ge,R as fe,j as e,a as je,C as Ie,z as Se,b as ve,c as ee,s as y,A as ye,S as te,d as x,e as we,f as M,g as I,h as D,F as B,B as m,D as C,n as ae,i as se,k as Ce,l as be,o as ce,p as ne,q as de}from"./styles-CdbHnvft.js";import{F as h,a as Ee}from"./Table-sHSMbx0B.js";import{S as Re}from"./index-emnzbHoJ.js";var Te={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M521.7 82c-152.5-.4-286.7 78.5-363.4 197.7-3.4 5.3.4 12.3 6.7 12.3h70.3c4.8 0 9.3-2.1 12.3-5.8 7-8.5 14.5-16.7 22.4-24.5 32.6-32.5 70.5-58.1 112.7-75.9 43.6-18.4 90-27.8 137.9-27.8 47.9 0 94.3 9.3 137.9 27.8 42.2 17.8 80.1 43.4 112.7 75.9 32.6 32.5 58.1 70.4 76 112.5C865.7 417.8 875 464.1 875 512c0 47.9-9.4 94.2-27.8 137.8-17.8 42.1-43.4 80-76 112.5s-70.5 58.1-112.7 75.9A352.8 352.8 0 01520.6 866c-47.9 0-94.3-9.4-137.9-27.8A353.84 353.84 0 01270 762.3c-7.9-7.9-15.3-16.1-22.4-24.5-3-3.7-7.6-5.8-12.3-5.8H165c-6.3 0-10.2 7-6.7 12.3C234.9 863.2 368.5 942 520.6 942c236.2 0 428-190.1 430.4-425.6C953.4 277.1 761.3 82.6 521.7 82zM395.02 624v-76h-314c-4.4 0-8-3.6-8-8v-56c0-4.4 3.6-8 8-8h314v-76c0-6.7 7.8-10.5 13-6.3l141.9 112a8 8 0 010 12.6l-141.9 112c-5.2 4.1-13 .4-13-6.3z"}}]},name:"login",theme:"outlined"},Ne=function(s,n){return r.createElement(q,P({},s,{ref:n,icon:Te}))},ke=r.forwardRef(Ne),Oe={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M868 732h-70.3c-4.8 0-9.3 2.1-12.3 5.8-7 8.5-14.5 16.7-22.4 24.5a353.84 353.84 0 01-112.7 75.9A352.8 352.8 0 01512.4 866c-47.9 0-94.3-9.4-137.9-27.8a353.84 353.84 0 01-112.7-75.9 353.28 353.28 0 01-76-112.5C167.3 606.2 158 559.9 158 512s9.4-94.2 27.8-137.8c17.8-42.1 43.4-80 76-112.5s70.5-58.1 112.7-75.9c43.6-18.4 90-27.8 137.9-27.8 47.9 0 94.3 9.3 137.9 27.8 42.2 17.8 80.1 43.4 112.7 75.9 7.9 7.9 15.3 16.1 22.4 24.5 3 3.7 7.6 5.8 12.3 5.8H868c6.3 0 10.2-7 6.7-12.3C798 160.5 663.8 81.6 511.3 82 271.7 82.6 79.6 277.1 82 516.4 84.4 751.9 276.2 942 512.4 942c152.1 0 285.7-78.8 362.3-197.7 3.4-5.3-.4-12.3-6.7-12.3zm88.9-226.3L815 393.7c-5.3-4.2-13-.4-13 6.3v76H488c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h314v76c0 6.7 7.8 10.5 13 6.3l141.9-112a8 8 0 000-12.6z"}}]},name:"logout",theme:"outlined"},Fe=function(s,n){return r.createElement(q,P({},s,{ref:n,icon:Oe}))},Ae=r.forwardRef(Fe),Le={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M858.5 763.6a374 374 0 00-80.6-119.5 375.63 375.63 0 00-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 00-80.6 119.5A371.7 371.7 0 00136 901.8a8 8 0 008 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 008-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"}}]},name:"user",theme:"outlined"},$e=function(s,n){return r.createElement(q,P({},s,{ref:n,icon:Le}))},Me=r.forwardRef($e);const{Header:Be,Content:Ue}=z,{Paragraph:re,Text:ie,Title:ze}=ge,U="shopops.auth.token",O="shopops.auth.user",De=["LOGIN","LOGOUT","ACCESS_DENIED","ORG_USER_CREATED","ORG_MEMBER_UPDATED"],qe=["SUCCESS","FAILURE"];function Pe(){const a=ve(),[s]=h.useForm(),[n]=h.useForm(),[o,E]=r.useState({tenantId:a.tenantId||"1",shopId:a.shopId||"1",userId:a.userId||"1",roles:a.roles||"ADMIN,OPERATOR"}),[i,F]=r.useState(()=>Ve()),[S,_]=r.useState(()=>localStorage.getItem(U)||""),[A,J]=r.useState([]),[L,V]=r.useState(null),[R,G]=r.useState(0),[v,H]=r.useState(1),[u,K]=r.useState(10),[w,g]=r.useState(!1),[ue,f]=r.useState("认证中心已就绪,可登录、校验当前用户、退出并查看认证审计事件。"),T=r.useMemo(()=>{var l;const t=A.filter(c=>c.eventStatus==="FAILURE").length;return{session:i!=null&&i.authenticated||S?1:0,roles:((l=i==null?void 0:i.roles)==null?void 0:l.length)||0,auditTotal:R,failures:t}},[i,A,S,R]),Q=r.useCallback((t=v,l=u)=>{const c=n.getFieldsValue(),d=new URLSearchParams;return d.set("pageNum",String(t)),d.set("pageSize",String(l)),b(d,"eventType",c.eventType),b(d,"eventStatus",c.eventStatus),b(d,"username",c.username),b(d,"userId",c.userId),b(d,"requestId",c.requestId),d},[n,v,u]),Y=r.useCallback(t=>{window.history.replaceState(null,"",`${window.location.pathname}?${t.toString()}`)},[]),p=r.useCallback(async(t=v,l=u)=>{const c=Q(t,l);g(!0);try{const d=await ee(`/api/admin/auth/audit-events?${c}`,o),Z=d.list||[];J(Z),G(d.total||0),H(t),K(l),V(xe=>xe||Z[0]||null),Y(c),f("认证审计事件已刷新。")}catch(d){J([]),G(0),f(`认证审计事件加载失败:${j(d)}`),y.error(j(d))}finally{g(!1)}},[Q,o,v,u,Y]),W=r.useCallback(async()=>{g(!0);try{const t=await ee("/api/admin/auth/me",o);F(t),localStorage.setItem(O,JSON.stringify(t||{})),f("当前用户已刷新。")}catch(t){f(`当前用户加载失败:${j(t)}`),y.error(j(t))}finally{g(!1)}},[o]),me=r.useCallback(()=>{const t=new URLSearchParams(window.location.search);n.setFieldsValue({eventType:t.get("eventType")||void 0,eventStatus:t.get("eventStatus")||void 0,username:t.get("username")||void 0,userId:t.get("userId")||void 0,requestId:t.get("requestId")||void 0}),H(k(t.get("pageNum"),1)),K(k(t.get("pageSize"),10))},[n]);r.useEffect(()=>{s.setFieldsValue({username:"admin",password:"shopops123"}),me();const t=new URLSearchParams(window.location.search),l=k(t.get("pageNum"),1),c=k(t.get("pageSize"),10);p(l,c),S&&W()},[]);async function he(){const t=await s.validateFields();g(!0);try{const l=await ne("/api/admin/auth/login",{tenantId:Number(o.tenantId||1),shopId:Number(o.shopId||1),username:t.username,password:t.password},o),c=l.accessToken||"";_(c),F(l.user||null),localStorage.setItem(U,c),localStorage.setItem(O,JSON.stringify(l.user||{})),f("登录成功。"),await p(1,u)}catch(l){f(`登录失败:${j(l)}`),y.error(j(l))}finally{g(!1)}}async function pe(){if(!S){y.warning("没有 Bearer Token");return}g(!0);try{const t=await ne("/api/admin/auth/logout",null,o);f(`已退出:${t.status||"REVOKED"}`),X(!1),await p(1,u)}catch(t){f(`退出失败:${j(t)}`),y.error(j(t))}finally{g(!1)}}function X(t=!0){_(""),F(null),localStorage.removeItem(U),localStorage.removeItem(O),t&&p(1,u)}function $(t){n.resetFields(),t==="login"&&n.setFieldsValue({eventType:"LOGIN"}),t==="failure"&&n.setFieldsValue({eventStatus:"FAILURE"}),t==="admin"&&n.setFieldsValue({username:"admin"}),p(1,u)}return e.jsxs(z,{className:"app-shell","data-page-markers":'applyInitialQuery new URLSearchParams(window.location.search) syncUrl window.history.replaceState positiveInt(params.get("pageNum"), 1) positiveInt(params.get("pageSize"), 10) empty-state data-retry-list errorRow withBusy copyText navigator.clipboard fallbackCopy',children:[e.jsx(ye,{active:"auth"}),e.jsxs(z,{children:[e.jsxs(Be,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(ze,{level:3,children:"认证中心"}),e.jsx(ie,{type:"secondary",children:i?`${i.username||"user"} / ${(i.roles||[]).join(",")||"NO_ROLE"}`:"请求头开发上下文"})]}),e.jsxs(te,{wrap:!0,children:[e.jsx(x,{addonBefore:"Tenant",value:o.tenantId,onChange:t=>E({...o,tenantId:t.target.value})}),e.jsx(x,{addonBefore:"Shop",value:o.shopId,onChange:t=>E({...o,shopId:t.target.value})}),e.jsx(x,{addonBefore:"User",value:o.userId,onChange:t=>E({...o,userId:t.target.value})}),e.jsx(x,{addonBefore:"Roles",value:o.roles,onChange:t=>E({...o,roles:t.target.value})})]})]}),e.jsxs(Ue,{className:"content",children:[e.jsx(we,{className:"status-alert",type:"info",showIcon:!0,message:ue}),e.jsxs(M,{gutter:[16,16],children:[e.jsx(N,{title:"会话",value:T.session}),e.jsx(N,{title:"角色",value:T.roles}),e.jsx(N,{title:"审计事件",value:T.auditTotal}),e.jsx(N,{title:"失败事件",value:T.failures})]}),e.jsxs(M,{gutter:[16,16],children:[e.jsx(I,{xs:24,xl:9,children:e.jsxs(D,{title:"登录",className:"section-card",extra:e.jsx(m,{id:"loadMe",icon:e.jsx(Me,{}),loading:w,onClick:W,children:"当前用户"}),children:[e.jsxs(h,{form:s,layout:"vertical",onFinish:he,autoComplete:"off",children:[e.jsx(h.Item,{label:"用户名",name:"username",rules:[{required:!0}],children:e.jsx(x,{id:"loginUsername",autoComplete:"username"})}),e.jsx(h.Item,{label:"密码",name:"password",rules:[{required:!0}],children:e.jsx(x.Password,{id:"loginPassword",autoComplete:"current-password"})}),e.jsxs(B,{gap:8,wrap:"wrap",children:[e.jsx(m,{id:"logout",icon:e.jsx(Ae,{}),loading:w,onClick:pe,children:"退出"}),e.jsx(m,{id:"loginSubmit",type:"primary",htmlType:"submit",icon:e.jsx(ke,{}),loading:w,children:"登录"}),e.jsx(m,{onClick:()=>X(!0),children:"清除本地会话"})]})]}),e.jsxs(C,{className:"compact-list",title:"当前用户",size:"small",bordered:!0,column:1,children:[e.jsx(C.Item,{label:"Token",children:S?Ge(S):"暂无 Token"}),e.jsx(C.Item,{label:"用户",children:(i==null?void 0:i.username)||"-"}),e.jsx(C.Item,{label:"认证类型",children:(i==null?void 0:i.authType)||(S?"BEARER":"HEADER")}),e.jsx(C.Item,{label:"请求 ID",children:(i==null?void 0:i.requestId)||"-"})]}),e.jsx(m,{id:"copyUser",className:"compact-list",icon:e.jsx(ae,{}),onClick:()=>oe(JSON.stringify(i||{},null,2)),children:"复制当前用户"}),e.jsx(re,{className:"json-block",id:"userBox",children:JSON.stringify(i||{authenticated:!1},null,2)})]})}),e.jsx(I,{xs:24,xl:15,children:e.jsxs(D,{title:"认证审计事件",className:"section-card",children:[e.jsxs(h,{form:n,layout:"vertical",onFinish:()=>p(1,u),children:[e.jsxs(M,{gutter:12,children:[e.jsx(I,{xs:24,md:6,children:e.jsx(h.Item,{label:"事件类型",name:"eventType",children:e.jsx(se,{allowClear:!0,options:De.map(le)})})}),e.jsx(I,{xs:24,md:5,children:e.jsx(h.Item,{label:"状态",name:"eventStatus",children:e.jsx(se,{allowClear:!0,options:qe.map(le)})})}),e.jsx(I,{xs:24,md:5,children:e.jsx(h.Item,{label:"用户名",name:"username",children:e.jsx(x,{})})}),e.jsx(I,{xs:24,md:4,children:e.jsx(h.Item,{label:"用户 ID",name:"userId",children:e.jsx(x,{})})}),e.jsx(I,{xs:24,md:4,children:e.jsx(h.Item,{label:"Request",name:"requestId",children:e.jsx(x,{})})})]}),e.jsxs(B,{justify:"space-between",wrap:"wrap",gap:8,children:[e.jsxs(te,{wrap:!0,children:[e.jsx(m,{id:"authFilterSubmit",type:"primary",htmlType:"submit",icon:e.jsx(Ce,{}),loading:w,children:"查询"}),e.jsx(m,{onClick:()=>{n.resetFields(),p(1,u)},children:"重置"}),e.jsx(m,{"data-quick-filter":"login",onClick:()=>$("login"),children:"登录"}),e.jsx(m,{"data-quick-filter":"failure",onClick:()=>$("failure"),children:"失败"}),e.jsx(m,{"data-quick-filter":"admin",onClick:()=>$("admin"),children:"admin"})]}),e.jsx(m,{icon:e.jsx(be,{}),loading:w,onClick:()=>p(v,u),children:"刷新"})]})]}),e.jsx(Ee,{className:"spaced-table",rowKey:t=>String(t.eventId),loading:w,"data-retry-list":"authAuditEvents",dataSource:A,locale:{emptyText:e.jsx("div",{className:"empty-state",children:"暂无认证事件"})},pagination:{current:v,pageSize:u,total:R,showSizeChanger:!0,onChange:p},onRow:t=>({onClick:()=>V(t)}),rowClassName:"clickable",columns:[{title:"ID",dataIndex:"eventId",width:90},{title:"事件",dataIndex:"eventType",width:150},{title:"状态",dataIndex:"eventStatus",width:110,render:_e},{title:"用户",width:140,render:(t,l)=>l.username||l.userId||"-"},{title:"认证",dataIndex:"authType",width:110,render:Je},{title:"请求",dataIndex:"requestId",ellipsis:!0},{title:"客户端",dataIndex:"clientIp",width:130},{title:"失败原因",dataIndex:"failureReason",ellipsis:!0},{title:"创建时间",dataIndex:"createdAt",width:170,render:He}]}),e.jsxs(B,{justify:"space-between",align:"center",wrap:"wrap",gap:8,children:[e.jsx(ie,{type:"secondary",children:`第 ${v} 页 / 共 ${ce(R)} 条`}),e.jsx(m,{id:"copyEventDetail",icon:e.jsx(ae,{}),onClick:()=>oe(JSON.stringify(L||{},null,2)),children:"复制事件详情"})]}),e.jsx(re,{className:"json-block",id:"eventDetailBox",children:L?JSON.stringify(L,null,2):"请选择一条认证事件"})]})})]})]})]})]})}function N({title:a,value:s}){return e.jsx(I,{xs:12,md:6,children:e.jsx(D,{className:"metric-card",children:e.jsx(Re,{title:a,value:ce(s)})})})}function b(a,s,n){n&&n.trim()&&a.set(s,n.trim())}function k(a,s){const n=Number(a);return Number.isFinite(n)&&n>0?Math.floor(n):s}function le(a){return{value:a,label:a}}function _e(a){const s=String(a||"-"),n=s==="SUCCESS"?"green":s==="FAILURE"?"red":"default";return e.jsx(de,{color:n,children:s})}function Je(a){const s=String(a||"-");return e.jsx(de,{color:s==="BEARER"?"blue":"default",children:s})}function Ve(){try{return JSON.parse(localStorage.getItem(O)||"null")}catch{return null}}function Ge(a){return a.length<=16?a:`${a.slice(0,8)}...${a.slice(-8)}`}function He(a){return a?String(a).replace("T"," ").slice(0,19):"-"}async function oe(a){try{await navigator.clipboard.writeText(a),y.success("已复制")}catch{const s=document.createElement("textarea");s.dataset.copyMode="fallbackCopy",s.value=a,document.body.appendChild(s),s.select(),document.execCommand("copy"),document.body.removeChild(s),y.success("已复制")}}function j(a){return a instanceof Error?a.message:String(a)}fe.createRoot(document.getElementById("root")).render(e.jsx(je.StrictMode,{children:e.jsx(Ie,{locale:Se,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx(Pe,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/connectors-DsLGTidC.js b/shopops-admin/src/main/resources/static/admin/assets/connectors-DsLGTidC.js new file mode 100644 index 0000000..dc0ef46 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/connectors-DsLGTidC.js @@ -0,0 +1 @@ +import{r as o,I as re,_ as oe,L as X,T as Ne,R as Fe,j as e,a as $e,C as Ae,z as Ee,b as Le,c as M,s as x,A as Te,S as q,d as f,e as G,f as w,g as c,h as N,B as y,l as ke,u as Pe,i as v,F as Ve,o as T,k as ee,D as te,q as Y,p as L}from"./styles-CdbHnvft.js";import{F as i,a as O}from"./Table-sHSMbx0B.js";import{R as Me}from"./ThunderboltOutlined-xUGxlyJ6.js";import{R as Oe}from"./StopOutlined-BzANPQ2U.js";import{R as ze}from"./ApiOutlined-CqRwPpT6.js";import{S as Ue}from"./index-emnzbHoJ.js";var De={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M811.4 368.9C765.6 248 648.9 162 512.2 162S258.8 247.9 213 368.8C126.9 391.5 63.5 470.2 64 563.6 64.6 668 145.6 752.9 247.6 762c4.7.4 8.7-3.3 8.7-8v-60.4c0-4-3-7.4-7-7.9-27-3.4-52.5-15.2-72.1-34.5-24-23.5-37.2-55.1-37.2-88.6 0-28 9.1-54.4 26.2-76.4 16.7-21.4 40.2-36.9 66.1-43.7l37.9-10 13.9-36.7c8.6-22.8 20.6-44.2 35.7-63.5 14.9-19.2 32.6-36 52.4-50 41.1-28.9 89.5-44.2 140-44.2s98.9 15.3 140 44.3c19.9 14 37.5 30.8 52.4 50 15.1 19.3 27.1 40.7 35.7 63.5l13.8 36.6 37.8 10c54.2 14.4 92.1 63.7 92.1 120 0 33.6-13.2 65.1-37.2 88.6-19.5 19.2-44.9 31.1-71.9 34.5-4 .5-6.9 3.9-6.9 7.9V754c0 4.7 4.1 8.4 8.8 8 101.7-9.2 182.5-94 183.2-198.2.6-93.4-62.7-172.1-148.6-194.9z"}},{tag:"path",attrs:{d:"M376.9 656.4c1.8-33.5 15.7-64.7 39.5-88.6 25.4-25.5 60-39.8 96-39.8 36.2 0 70.3 14.1 96 39.8 1.4 1.4 2.7 2.8 4.1 4.3l-25 19.6a8 8 0 003 14.1l98.2 24c5 1.2 9.9-2.6 9.9-7.7l.5-101.3c0-6.7-7.6-10.5-12.9-6.3L663 532.7c-36.6-42-90.4-68.6-150.5-68.6-107.4 0-195 85.1-199.4 191.7-.2 4.5 3.4 8.3 8 8.3H369c4.2-.1 7.7-3.4 7.9-7.7zM703 664h-47.9c-4.2 0-7.7 3.3-8 7.6-1.8 33.5-15.7 64.7-39.5 88.6-25.4 25.5-60 39.8-96 39.8-36.2 0-70.3-14.1-96-39.8-1.4-1.4-2.7-2.8-4.1-4.3l25-19.6a8 8 0 00-3-14.1l-98.2-24c-5-1.2-9.9 2.6-9.9 7.7l-.4 101.4c0 6.7 7.6 10.5 12.9 6.3l23.2-18.2c36.6 42 90.4 68.6 150.5 68.6 107.4 0 195-85.1 199.4-191.7.2-4.5-3.4-8.3-8-8.3z"}}]},name:"cloud-sync",theme:"outlined"},Be=function(s,l){return o.createElement(re,oe({},s,{ref:l,icon:De}))},Ke=o.forwardRef(Be),Je={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M608 112c-167.9 0-304 136.1-304 304 0 70.3 23.9 135 63.9 186.5L255.8 713.6l-62.3-62.3a8.19 8.19 0 00-11.4 0l-39.8 39.8a8.19 8.19 0 000 11.4l62.3 62.3-44.9 44.9-62.3-62.3a8.19 8.19 0 00-11.4 0l-39.8 39.8a8.19 8.19 0 000 11.4l110.3 111.2c3.1 3.1 8.2 3.1 11.3 0l253.6-253.6A304.1 304.1 0 00608 720c167.9 0 304-136.1 304-304S775.9 112 608 112m161.2 465.2C726.2 620.3 668.9 644 608 644s-118.2-23.7-161.2-66.8C403.7 534.2 380 476.9 380 416s23.7-118.2 66.8-161.2c43-43.1 100.3-66.8 161.2-66.8s118.2 23.7 161.2 66.8c43.1 43 66.8 100.3 66.8 161.2s-23.7 118.2-66.8 161.2"}}]},name:"key",theme:"outlined"},_e=function(s,l){return o.createElement(re,oe({},s,{ref:l,icon:Je}))},qe=o.forwardRef(_e);const{Header:Ge,Content:He}=X,{Paragraph:Qe,Text:H,Title:Xe}=Ne,ae=["shopops.connector.order-summary.file","shopops.connector.negative-comments.file","shopops.connector.product-candidates.file","shopops.connector.ad-performance.file","shopops.connector.external-reports.file"];function Ye(){const a=Le(),[s]=i.useForm(),[l]=i.useForm(),[m]=i.useForm(),[n,k]=o.useState({tenantId:a.tenantId||"1",shopId:a.shopId||"1",userId:a.userId||"1",roles:a.roles||"ADMIN,OPERATOR"}),[S,le]=o.useState([]),[F,ie]=o.useState([]),[$,ce]=o.useState(null),[D,de]=o.useState([]),[B,ue]=o.useState([]),[me,xe]=o.useState(0),[he,pe]=o.useState(0),[P,ge]=o.useState(1),[h,je]=o.useState(10),[K,fe]=o.useState(1),[p,ye]=o.useState(10),[g,u]=o.useState(!1),[Ie,j]=o.useState("连接器中心已就绪,可检查 Olist 文件数据源、凭证、同步任务和外部调用日志。"),V=o.useMemo(()=>We(S,F,D,B),[S,F,D,B]),W=i.useWatch("connectorCode",s),J=o.useMemo(()=>Array.from(new Set([...S.map(t=>t.connectorCode),...F.map(t=>t.connectorCode)].filter(Boolean))).map(t=>({value:t,label:t})),[S,F]),_=o.useCallback(async()=>{const t=await M("/api/admin/connectors/status",n);le(t||[]),j("连接器状态已刷新。")},[n]),A=o.useCallback(async()=>{const t=await M("/api/admin/connectors/credentials",n);ie(t||[])},[n]),C=o.useCallback(async(t=P,r=h)=>{const d=new URLSearchParams;d.set("pageNum",String(t)),d.set("pageSize",String(r)),R(d,"connectorCode",l.getFieldValue("connectorCode")),R(d,"status",l.getFieldValue("status")),se(d,"sync");const E=await M(`/api/admin/connectors/sync-jobs?${d}`,n);de(E.list||[]),xe(E.total||0),ge(t),je(r)},[n,l,P,h]),b=o.useCallback(async(t=K,r=p)=>{const d=new URLSearchParams;d.set("pageNum",String(t)),d.set("pageSize",String(r)),R(d,"connectorCode",m.getFieldValue("connectorCode")),R(d,"status",m.getFieldValue("status")),R(d,"jobId",m.getFieldValue("jobId")),R(d,"endpoint",m.getFieldValue("endpoint")),se(d,"logs");const E=await M(`/api/admin/connectors/api-call-logs?${d}`,n);ue(E.list||[]),pe(E.total||0),fe(t),ye(r)},[n,m,K,p]),Z=o.useCallback(async()=>{u(!0);try{await Promise.all([_(),A(),C(1,h),b(1,p)]),j("连接器状态、凭证、同步任务和外部调用日志已刷新。")}catch(t){j(`连接器数据加载失败:${I(t)}`),x.error(I(t))}finally{u(!1)}},[b,A,_,C,p,h]),Se=o.useCallback(()=>{const t=new URLSearchParams(window.location.search);l.setFieldsValue({connectorCode:t.get("connectorCode")||void 0,status:t.get("status")||void 0}),m.setFieldsValue({connectorCode:t.get("connectorCode")||void 0,status:t.get("logStatus")||t.get("status")||void 0,jobId:t.get("jobId")||void 0,endpoint:t.get("endpoint")||void 0})},[m,l]);o.useEffect(()=>{Se(),Z()},[]);async function Ce(){const t=await s.validateFields();u(!0);try{const r=await L("/api/admin/connectors/credentials",t,n);j(`连接器凭证已保存:${r.connectorCode||t.connectorCode}`),s.setFieldsValue({secretValue:""}),await A()}catch(r){x.error(I(r))}finally{u(!1)}}async function be(t){if(!t){x.warning("请先选择连接器");return}u(!0);try{const r=await L(`/api/admin/connectors/credentials/${encodeURIComponent(t)}/test`,null,n);ce(r),j(`连接器凭证测试完成:${r.status||t}`),await A()}catch(r){x.error(I(r))}finally{u(!1)}}async function we(t){if(!t){x.warning("请先选择连接器");return}u(!0);try{await L(`/api/admin/connectors/credentials/${encodeURIComponent(t)}/disable`,null,n),j(`连接器凭证已停用:${t}`),await A()}catch(r){x.error(I(r))}finally{u(!1)}}async function ve(){const t=l.getFieldValue("connectorCode")||s.getFieldValue("connectorCode");if(!t){x.warning("请先选择要同步的连接器");return}u(!0);try{const r=await L("/api/admin/connectors/sync-jobs",{connectorCode:t,remark:"manual sync from react connector center"},n);j(`同步任务已触发:${r.jobId||t}`),await Promise.all([C(1,h),b(1,p),_()])}catch(r){x.error(I(r))}finally{u(!1)}}async function Re(t){if(t){u(!0);try{await L(`/api/admin/connectors/sync-jobs/${encodeURIComponent(String(t))}/retry`,null,n),j(`同步任务已重试:${t}`),await Promise.all([C(P,h),b(1,p)])}catch(r){x.error(I(r))}finally{u(!1)}}}return e.jsxs(X,{className:"app-shell","data-page-markers":"applyInitialQuery syncUrl navigator.clipboard fallbackCopy","data-api-patterns":"/api/admin/connectors/status /api/admin/connectors/credentials /api/admin/connectors/credentials/${connectorCode}/test /api/admin/connectors/credentials/${connectorCode}/disable /api/admin/connectors/sync-jobs /api/admin/connectors/sync-jobs/${jobId}/retry /api/admin/connectors/api-call-logs","data-config-keys":ae.join(" "),children:[e.jsx(Te,{active:"connectors"}),e.jsxs(X,{children:[e.jsxs(Ge,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Xe,{level:3,children:"数据接入中心"}),e.jsx(H,{type:"secondary",children:"管理 Olist 文件数据源、连接器凭证、同步任务和外部调用日志,让 Agent 报告有可追溯的数据来源。"})]}),e.jsxs(q,{wrap:!0,children:[e.jsx(f,{addonBefore:"Tenant",value:n.tenantId,onChange:t=>k({...n,tenantId:t.target.value})}),e.jsx(f,{addonBefore:"Shop",value:n.shopId,onChange:t=>k({...n,shopId:t.target.value})}),e.jsx(f,{addonBefore:"User",value:n.userId,onChange:t=>k({...n,userId:t.target.value})}),e.jsx(f,{addonBefore:"Roles",value:n.roles,onChange:t=>k({...n,roles:t.target.value})})]})]}),e.jsxs(He,{className:"content",children:[e.jsx(G,{className:"status-alert",type:"info",showIcon:!0,message:Ie}),e.jsxs(w,{gutter:[16,16],children:[e.jsx(z,{title:"已配置数据源",value:V.configured}),e.jsx(z,{title:"可用数据源",value:V.available}),e.jsx(z,{title:"有效凭证",value:V.enabledCredentials}),e.jsx(z,{title:"失败调用",value:V.failedCalls})]}),e.jsxs(w,{gutter:[16,16],children:[e.jsx(c,{xs:24,xl:15,children:e.jsx(N,{title:"文件数据源状态",className:"section-card",extra:e.jsx(y,{icon:e.jsx(ke,{}),loading:g,onClick:Z,children:"刷新"}),children:e.jsx(O,{rowKey:t=>t.connectorCode||t.propertyKey||"-",loading:g,dataSource:S,pagination:!1,columns:[{title:"连接器",dataIndex:"connectorCode",width:190,render:(t,r)=>e.jsxs(q,{direction:"vertical",size:0,children:[e.jsx(H,{strong:!0,children:t}),e.jsx(H,{type:"secondary",children:r.connectorName})]})},{title:"类别",dataIndex:"category",width:120},{title:"状态",dataIndex:"status",width:120,render:U},{title:"配置",dataIndex:"configured",width:100,render:Q},{title:"可用",dataIndex:"available",width:100,render:Q},{title:"配置项",dataIndex:"propertyKey",ellipsis:!0},{title:"路径",dataIndex:"configuredPath",ellipsis:!0},{title:"消息",dataIndex:"message",ellipsis:!0}]})})}),e.jsx(c,{xs:24,xl:9,children:e.jsxs(N,{title:"连接器凭证",className:"section-card",children:[e.jsx(G,{type:"warning",showIcon:!0,message:"密钥只在保存请求中提交,不在页面回显;列表仅展示 maskedSecret。",icon:e.jsx(Pe,{})}),e.jsxs(i,{className:"form-stack",form:s,layout:"vertical",initialValues:{credentialType:"api_key"},children:[e.jsxs(w,{gutter:12,children:[e.jsx(c,{xs:24,md:12,children:e.jsx(i.Item,{label:"连接器编码",name:"connectorCode",rules:[{required:!0,message:"请选择连接器"}],children:e.jsx(v,{showSearch:!0,options:J,placeholder:"file.order-summary"})})}),e.jsx(c,{xs:24,md:12,children:e.jsx(i.Item,{label:"凭证类型",name:"credentialType",rules:[{required:!0}],children:e.jsx(v,{options:["api_key","bearer_token","basic"].map(t=>({value:t,label:t}))})})}),e.jsx(c,{xs:24,children:e.jsx(i.Item,{label:"Secret",name:"secretValue",rules:[{required:!0,message:"保存时需要输入 Secret"}],children:e.jsx(f.Password,{placeholder:"只在保存请求中提交,不在页面回显"})})}),e.jsx(c,{xs:24,children:e.jsx(i.Item,{label:"过期时间",name:"expiresAt",children:e.jsx(f,{type:"datetime-local"})})})]}),e.jsxs(Ve,{wrap:"wrap",gap:8,children:[e.jsx(y,{id:"saveCredential",type:"primary",icon:e.jsx(qe,{}),loading:g,onClick:Ce,children:"保存凭证"}),e.jsx(y,{id:"testCredential",icon:e.jsx(Me,{}),loading:g,onClick:()=>be(W),children:"测试"}),e.jsx(y,{id:"disableCredential",danger:!0,icon:e.jsx(Oe,{}),loading:g,onClick:()=>we(W),children:"停用"})]})]}),$?e.jsx(G,{className:"compact-list",type:$.success?"success":"error",showIcon:!0,message:`${$.connectorCode}:${$.message||$.status}`}):null,e.jsx(O,{className:"spaced-table",size:"small",rowKey:t=>t.connectorCode||"-",dataSource:F,pagination:!1,columns:[{title:"连接器",dataIndex:"connectorCode",ellipsis:!0},{title:"状态",dataIndex:"status",width:110,render:U},{title:"启用",dataIndex:"enabled",width:80,render:Q},{title:"Masked Secret",dataIndex:"maskedSecret",ellipsis:!0},{title:"轮换提醒",dataIndex:"rotationStatus",width:120,render:Ze},{title:"即将过期",dataIndex:"daysUntilExpiry",width:110,render:t=>T(t)}]})]})})]}),e.jsxs(w,{gutter:[16,16],children:[e.jsx(c,{xs:24,xl:12,children:e.jsxs(N,{title:"同步任务",className:"section-card",children:[e.jsx(i,{form:l,layout:"vertical",onFinish:()=>C(1,h),children:e.jsxs(w,{gutter:12,children:[e.jsx(c,{xs:24,md:10,children:e.jsx(i.Item,{label:"连接器",name:"connectorCode",children:e.jsx(v,{allowClear:!0,showSearch:!0,options:J,placeholder:"file.order-summary"})})}),e.jsx(c,{xs:24,md:8,children:e.jsx(i.Item,{label:"状态",name:"status",children:e.jsx(v,{allowClear:!0,options:["SUCCESS","FAILED","RUNNING","PENDING"].map(t=>({value:t,label:t}))})})}),e.jsx(c,{xs:24,md:6,children:e.jsx(i.Item,{label:"操作",children:e.jsxs(q,{children:[e.jsx(y,{id:"filterSyncJobs",htmlType:"submit",icon:e.jsx(ee,{}),children:"查询"}),e.jsx(y,{id:"triggerSync",type:"primary",icon:e.jsx(Ke,{}),loading:g,onClick:ve,children:"触发同步"})]})})})]})}),e.jsx(O,{className:"spaced-table",rowKey:t=>String(t.jobId),loading:g,dataSource:D,pagination:{current:P,pageSize:h,total:me,showSizeChanger:!0,onChange:C},columns:[{title:"Job",dataIndex:"jobId",width:90},{title:"连接器",dataIndex:"connectorCode",ellipsis:!0},{title:"状态",dataIndex:"status",width:110,render:U},{title:"尝试",width:90,render:(t,r)=>`${T(r.attempt)}/${T(r.maxAttempts)}`},{title:"触发",dataIndex:"triggerType",width:110},{title:"消息",dataIndex:"message",ellipsis:!0},{title:"创建时间",dataIndex:"createdAt",width:170,render:ne},{title:"操作",width:92,render:(t,r)=>e.jsx(y,{size:"small",onClick:()=>Re(r.jobId),children:"重试"})}]})]})}),e.jsx(c,{xs:24,xl:12,children:e.jsxs(N,{title:"外部调用日志",className:"section-card",children:[e.jsx(i,{form:m,layout:"vertical",onFinish:()=>b(1,p),children:e.jsxs(w,{gutter:12,children:[e.jsx(c,{xs:24,md:6,children:e.jsx(i.Item,{label:"连接器",name:"connectorCode",children:e.jsx(v,{allowClear:!0,showSearch:!0,options:J})})}),e.jsx(c,{xs:24,md:5,children:e.jsx(i.Item,{label:"状态",name:"status",children:e.jsx(v,{allowClear:!0,options:["SUCCESS","FAILED"].map(t=>({value:t,label:t}))})})}),e.jsx(c,{xs:24,md:5,children:e.jsx(i.Item,{label:"Job",name:"jobId",children:e.jsx(f,{})})}),e.jsx(c,{xs:24,md:6,children:e.jsx(i.Item,{label:"Endpoint",name:"endpoint",children:e.jsx(f,{placeholder:"connector.status.check"})})}),e.jsx(c,{xs:24,md:2,children:e.jsx(i.Item,{label:" ",children:e.jsx(y,{id:"filterApiLogs",htmlType:"submit",icon:e.jsx(ee,{})})})})]})}),e.jsx(O,{className:"spaced-table",rowKey:t=>String(t.logId),loading:g,dataSource:B,pagination:{current:K,pageSize:p,total:he,showSizeChanger:!0,onChange:b},columns:[{title:"Log",dataIndex:"logId",width:82},{title:"Job",dataIndex:"jobId",width:82},{title:"连接器",dataIndex:"connectorCode",ellipsis:!0},{title:"Method",dataIndex:"requestMethod",width:92},{title:"Endpoint",dataIndex:"endpoint",ellipsis:!0},{title:"状态",dataIndex:"status",width:105,render:U},{title:"HTTP",dataIndex:"statusCode",width:80},{title:"耗时",dataIndex:"latencyMs",width:90,render:t=>`${T(t)} ms`},{title:"时间",dataIndex:"createdAt",width:170,render:ne}]})]})})]}),e.jsxs(N,{className:"section-card",title:"配置项说明",extra:e.jsx(ze,{}),children:[e.jsx(te,{size:"small",bordered:!0,column:{xs:1,md:2},children:ae.map(t=>e.jsx(te.Item,{label:t,children:et(t)},t))}),e.jsx(Qe,{className:"json-block",children:JSON.stringify({credentials:"secret only submitted on save request, not echoed",connectorStatus:S[0]||null},null,2)})]})]})]})]})}function z({title:a,value:s}){return e.jsx(c,{xs:12,md:6,children:e.jsx(N,{className:"metric-card",children:e.jsx(Ue,{title:a,value:T(s)})})})}function We(a,s,l,m){return{configured:a.filter(n=>n.configured).length,available:a.filter(n=>n.available).length,enabledCredentials:s.filter(n=>n.enabled).length,failedCalls:m.filter(n=>n.status==="FAILED").length+l.filter(n=>n.status==="FAILED").length}}function U(a){const s=String(a||"-"),l=s==="SUCCESS"||s==="AVAILABLE"||s==="VALID"?"green":s==="FAILED"||s==="ERROR"||s==="INVALID"?"red":s==="RUNNING"?"blue":"default";return e.jsx(Y,{color:l,children:s})}function Q(a){return e.jsx(Y,{color:a?"green":"orange",children:a?"YES":"NO"})}function Ze(a){const s=String(a||"-"),l=s==="EXPIRED"?"red":s==="EXPIRING_SOON"?"orange":s==="ACTIVE"?"green":"default";return e.jsx(Y,{color:l,children:s})}function R(a,s,l){l&&l.trim()&&a.set(s,l.trim())}function se(a,s){a.set("area",s),window.history.replaceState(null,"",`${window.location.pathname}?${a.toString()}`)}function ne(a){return a?String(a).replace("T"," ").slice(0,19):"-"}function et(a){return a.includes("order-summary")?"Olist 订单汇总数据,用于日报 GMV、订单量和退款率分析。":a.includes("negative-comments")?"Olist 评价数据转换出的风险评价,用于差评原因分析。":a.includes("product-candidates")?"商品候选与低点击商品优化建议的数据来源。":a.includes("ad-performance")?"投放表现预留数据源,可扩展曝光、点击、转化和成本。":"平台外部报表预留数据源,用于后续环境指标和外部经营数据。"}function I(a){return a instanceof Error?a.message:String(a)}Fe.createRoot(document.getElementById("root")).render(e.jsx($e.StrictMode,{children:e.jsx(Ae,{locale:Ee,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx(Ye,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/dashboard-BI0PGwGw.js b/shopops-admin/src/main/resources/static/admin/assets/dashboard-BI0PGwGw.js new file mode 100644 index 0000000..9c4b8ac --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/dashboard-BI0PGwGw.js @@ -0,0 +1 @@ +import{r as i,I as K,_ as Q,j as e,L as v,T as J,R as V,a as X,C as Y,z as Z,b as ee,c as E,A as se,S as I,B as g,l as te,e as ae,f as b,v as re,o as j,g as p,h as f,D as o,F as ne,q as T,m as le,s as y,d as M}from"./styles-CdbHnvft.js";import{i as ie}from"./index-ClPwX7rX.js";import{L as x}from"./index-rsTaKYdt.js";import{R as z}from"./DashboardOutlined-DhWgz-bD.js";import{R as de}from"./FileTextOutlined-DR_VCDvU.js";import{R as F}from"./ToolOutlined-MDl_KHZ_.js";import{R as oe}from"./AuditOutlined-D7IGVWIo.js";import{R as ce}from"./ApiOutlined-CqRwPpT6.js";import{S as xe}from"./index-emnzbHoJ.js";var he={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M923 283.6a260.04 260.04 0 00-56.9-82.8 264.4 264.4 0 00-84-55.5A265.34 265.34 0 00679.7 125c-49.3 0-97.4 13.5-139.2 39-10 6.1-19.5 12.8-28.5 20.1-9-7.3-18.5-14-28.5-20.1-41.8-25.5-89.9-39-139.2-39-35.5 0-69.9 6.8-102.4 20.3-31.4 13-59.7 31.7-84 55.5a258.44 258.44 0 00-56.9 82.8c-13.9 32.3-21 66.6-21 101.9 0 33.3 6.8 68 20.3 103.3 11.3 29.5 27.5 60.1 48.2 91 32.8 48.9 77.9 99.9 133.9 151.6 92.8 85.7 184.7 144.9 188.6 147.3l23.7 15.2c10.5 6.7 24 6.7 34.5 0l23.7-15.2c3.9-2.5 95.7-61.6 188.6-147.3 56-51.7 101.1-102.7 133.9-151.6 20.7-30.9 37-61.5 48.2-91 13.5-35.3 20.3-70 20.3-103.3.1-35.3-7-69.6-20.9-101.9zM512 814.8S156 586.7 156 385.5C156 283.6 240.3 201 344.3 201c73.1 0 136.5 40.8 167.7 100.4C543.2 241.8 606.6 201 679.7 201c104 0 188.3 82.6 188.3 184.5 0 201.2-356 429.3-356 429.3z"}}]},name:"heart",theme:"outlined"},ue=function(r,n){return i.createElement(K,Q({},r,{ref:n,icon:he}))},je=i.forwardRef(ue);function fe({metrics:s}){const r=i.useRef(null);return i.useEffect(()=>{if(!r.current)return;const n=ie(r.current),t=[["成功",Number((s==null?void 0:s.success)||0),"#31795a"],["失败",Number((s==null?void 0:s.failed)||0),"#d14343"],["运行中",Number((s==null?void 0:s.running)||0),"#2f6fbb"],["队列中",Number((s==null?void 0:s.queued)||0),"#d9842b"],["降级",Number((s==null?void 0:s.degraded)||0),"#8f55d6"]];n.setOption({grid:{left:42,right:16,top:24,bottom:34},tooltip:{trigger:"axis"},xAxis:{type:"category",data:t.map(([l])=>l)},yAxis:{type:"value",minInterval:1},series:[{type:"bar",barMaxWidth:36,data:t.map(([,l,S])=>({value:l,itemStyle:{color:S}}))}]});const u=()=>n.resize();return window.addEventListener("resize",u),()=>{window.removeEventListener("resize",u),n.dispose()}},[s]),e.jsx("div",{className:"dashboard-task-chart",ref:r})}const{Header:pe,Content:me}=v,{Paragraph:De,Text:h,Title:Ie}=J;function ge(){var L,D,w,H,O;const s=ee(),[r,n]=i.useState({tenantId:s.tenantId||"1",shopId:s.shopId||"1",userId:s.userId||"1",roles:s.roles||"ADMIN,OPERATOR"}),[t,u]=i.useState(null),[l,S]=i.useState(null),[d,P]=i.useState(null),[R,$]=i.useState(!1),[U,q]=i.useState("Dashboard 已就绪。"),W=(t==null?void 0:t.recentFailedEvents)||[],G=i.useMemo(()=>Object.entries((l==null?void 0:l.checks)||{}),[l]),C=i.useCallback(async()=>{$(!0);const a=await Promise.allSettled([E("/api/admin/dashboard/summary",r),E("/api/system/health",r),E("/api/admin/audit/high-risk",r)]);a[0].status==="fulfilled"?u(a[0].value):Se(a[0].reason),a[1].status==="fulfilled"?S(a[1].value):Re(a[1].reason),a[2].status==="fulfilled"?P(a[2].value):Ce(a[2].reason);const m=a.filter(_=>_.status==="rejected").length;q(m?`Dashboard 已刷新,${m} 个面板加载失败。`:"Dashboard 已刷新。"),$(!1)},[r]);return i.useEffect(()=>{C()},[C]),e.jsxs(v,{className:"app-shell",children:[e.jsx(se,{active:"dashboard"}),e.jsxs(v,{children:[e.jsxs(pe,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Ie,{level:3,children:"ShopOps 管理总览"}),e.jsx(h,{type:"secondary",children:"一屏查看 Agent 任务、报告、工具调用、审计风险和系统健康"})]}),e.jsxs(I,{children:[e.jsx(be,{context:r,onChange:n}),e.jsx(g,{icon:e.jsx(te,{}),loading:R,onClick:C,children:"刷新"})]})]}),e.jsxs(me,{className:"content",children:[e.jsx(ae,{className:"status-alert panel-state","data-error-handlers":"renderSummaryError renderHealthError renderRiskError",message:U,type:"info",showIcon:!0}),e.jsxs(b,{gutter:[16,16],children:[e.jsx(k,{title:"Agent 任务",value:((L=t==null?void 0:t.taskMetrics)==null?void 0:L.total)||0,suffix:`${re(((D=t==null?void 0:t.taskMetrics)==null?void 0:D.successRate)||0)} 成功率`}),e.jsx(k,{title:"报告总数",value:(t==null?void 0:t.reportTotal)||0,suffix:"运营日报与分析报告"}),e.jsx(k,{title:"工具调用",value:(t==null?void 0:t.toolCallTotal)||0,suffix:`${j((t==null?void 0:t.toolCallFailed)||0)} 次失败`}),e.jsx(k,{title:"审计风险",value:(d==null?void 0:d.elevatedRiskTotal)||0,suffix:`${j((d==null?void 0:d.total)||0)} 条事件`})]}),e.jsxs(b,{gutter:[16,16],children:[e.jsx(p,{xs:24,xl:15,children:e.jsxs(f,{title:"Agent 任务状态",className:"section-card",loading:R,children:[e.jsx(fe,{metrics:t==null?void 0:t.taskMetrics}),e.jsxs(o,{size:"small",column:2,bordered:!0,children:[e.jsxs(o.Item,{label:"平均耗时",children:[j(((w=t==null?void 0:t.taskMetrics)==null?void 0:w.avgLatencyMs)||0)," ms"]}),e.jsx(o.Item,{label:"生成时间",children:B(t==null?void 0:t.generatedAt)}),e.jsx(o.Item,{label:"成功",children:j(((H=t==null?void 0:t.taskMetrics)==null?void 0:H.success)||0)}),e.jsx(o.Item,{label:"失败",children:j(((O=t==null?void 0:t.taskMetrics)==null?void 0:O.failed)||0)})]})]})}),e.jsx(p,{xs:24,xl:9,children:e.jsxs(f,{title:"系统健康",className:"section-card",loading:R,"data-health-checks":"database flyway redis rabbitmq toolRegistry",children:[e.jsxs(o,{size:"small",column:1,bordered:!0,children:[e.jsx(o.Item,{label:"状态",children:N(l==null?void 0:l.status)}),e.jsx(o.Item,{label:"持久化",children:(l==null?void 0:l.persistence)||"-"}),e.jsx(o.Item,{label:"时间",children:B(l==null?void 0:l.timestamp)})]}),e.jsx(x,{className:"compact-list",dataSource:G,renderItem:([a,m])=>e.jsx(x.Item,{children:e.jsxs(ne,{justify:"space-between",className:"full-width",gap:12,children:[e.jsx(h,{children:a}),e.jsxs(I,{children:[e.jsx(T,{children:String(m.mode||"-")}),N(m.status)]})]})})})]})})]}),e.jsxs(b,{gutter:[16,16],children:[e.jsx(p,{xs:24,xl:12,children:e.jsx(f,{title:"最近失败事件",className:"section-card",children:e.jsx(x,{dataSource:W,locale:{emptyText:"暂无失败事件"},renderItem:a=>e.jsx(x.Item,{actions:[e.jsx(g,{type:"link",href:a.taskId?`/admin/tasks.html?taskId=${a.taskId}`:"/admin/tasks.html",children:"任务"},"task"),e.jsx(g,{type:"link",href:a.taskId?`/admin/audit.html?source=TASK&taskId=${a.taskId}`:"/admin/audit.html",children:"审计"},"audit")],children:e.jsx(x.Item.Meta,{title:e.jsxs(I,{children:[N(a.eventStatus),e.jsx(h,{children:a.eventType||"-"})]}),description:e.jsx(h,{type:"secondary",children:a.message||a.taskNo||"-"})})})})})}),e.jsx(p,{xs:24,xl:12,children:e.jsx(f,{title:"审计风险",className:"section-card",children:e.jsx(x,{dataSource:(d==null?void 0:d.recentElevatedRiskEvents)||[],locale:{emptyText:"暂无中高风险事件"},renderItem:a=>e.jsx(x.Item,{actions:[e.jsx(g,{type:"link",href:`/admin/audit.html?source=${a.source||""}&toolCode=${a.toolCode||""}`,children:"查看"},"audit")],children:e.jsx(x.Item.Meta,{title:e.jsxs(I,{children:[ke(a.riskLevel),e.jsx(h,{children:a.eventType||"-"})]}),description:e.jsx(h,{type:"secondary",children:a.summary||a.toolCode||a.traceId||"-"})})})})})})]}),e.jsx(f,{title:"后台模块",className:"section-card",children:e.jsxs(b,{gutter:[12,12],children:[e.jsx(c,{icon:e.jsx(le,{}),title:"Agent 工作台",desc:"自然语言发起日常运营任务",href:"/admin/workbench.html",id:"taskModuleHint"}),e.jsx(c,{icon:e.jsx(z,{}),title:"任务队列",desc:"查看步骤、事件和重试",href:"/admin/tasks.html"}),e.jsx(c,{icon:e.jsx(de,{}),title:"报告中心",desc:"查看运营日报和 evidence",href:"/admin/reports.html"}),e.jsx(c,{icon:e.jsx(F,{}),title:"工具日志",desc:"MCP 工具调用与审批 required",href:"/admin/tools.html"}),e.jsx(c,{icon:e.jsx(oe,{}),title:"审计中心",desc:"调用链、风险事件和配置快照",href:"/admin/audit.html",id:"auditModuleHint"}),e.jsx(c,{icon:e.jsx(ce,{}),title:"Prompt 模板",desc:"模型提示词版本管理",href:"/admin/prompts.html"}),e.jsx(c,{icon:e.jsx(je,{}),title:"系统健康",desc:"数据库、Redis、RabbitMQ、工具注册",href:"/admin/dashboard.html"}),e.jsx(c,{icon:e.jsx(F,{}),title:"失败工具",desc:"快速定位失败工具调用",href:"/admin/tools.html?status=FAILED"}),e.jsx(c,{icon:e.jsx(z,{}),title:"失败任务",desc:"快速查看失败任务队列",href:"/admin/tasks.html?status=FAILED"})]})})]})]})]})}function k({title:s,value:r,suffix:n}){return e.jsx(p,{xs:24,md:12,xl:6,children:e.jsxs(f,{className:"metric-card",children:[e.jsx(xe,{title:s,value:j(r)}),e.jsx(h,{type:"secondary",children:n})]})})}function be({context:s,onChange:r}){return e.jsxs(I,{wrap:!0,children:[e.jsx(M,{addonBefore:"Tenant",value:s.tenantId,onChange:n=>r({...s,tenantId:n.target.value})}),e.jsx(M,{addonBefore:"Shop",value:s.shopId,onChange:n=>r({...s,shopId:n.target.value})}),e.jsx(M,{addonBefore:"User",value:s.userId,onChange:n=>r({...s,userId:n.target.value})})]})}function c({icon:s,title:r,desc:n,href:t,id:u}){return e.jsx(p,{xs:24,md:12,xl:8,children:e.jsxs("a",{className:"module-link",href:t,id:u,children:[e.jsx("span",{children:s}),e.jsx("strong",{children:r}),e.jsx(h,{type:"secondary",children:n})]})})}function N(s){const r=s==="UP"||s==="SUCCESS"?"green":s==="DOWN"||s==="FAILED"||s==="FAILURE"?"red":"gold";return e.jsx(T,{color:r,children:s||"-"})}function ke(s){const r=s==="HIGH"?"red":s==="MEDIUM"?"orange":s==="LOW"?"green":"default";return e.jsx(T,{color:r,children:s||"-"})}function B(s){return s?String(s).replace("T"," ").slice(0,19):"-"}function Se(s){y.error(`Dashboard summary 加载失败:${A(s)}`)}function Re(s){y.error(`System health 加载失败:${A(s)}`)}function Ce(s){y.error(`Audit risk 加载失败:${A(s)}`)}function A(s){return s instanceof Error?s.message:String(s)}V.createRoot(document.getElementById("root")).render(e.jsx(X.StrictMode,{children:e.jsx(Y,{locale:Z,children:e.jsx(ge,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/index-D7Zu6-V4.js b/shopops-admin/src/main/resources/static/admin/assets/index-D7Zu6-V4.js new file mode 100644 index 0000000..8ffb9fc --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/index-D7Zu6-V4.js @@ -0,0 +1 @@ +import{r as c,a4 as Ee,a5 as Pe,a6 as Q,a7 as te,a8 as ce,_ as Z,M as F,a9 as ae,aa as he,E as Se,G as ve,H as be,J as f,ab as Te,ac as Ne,K as Oe,ad as je,ae as De,af as ye,ag as ze,ah as Ce,ai as L,aj as se,a as de,ak as We,al as _e,P as Me,a0 as qe,X as Ae,Y as He}from"./styles-CdbHnvft.js";var Be={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},Le=function(){var t=c.useRef([]),i=c.useRef(null);return c.useEffect(function(){var r=Date.now(),n=!1;t.current.forEach(function(o){if(o){n=!0;var a=o.style;a.transitionDuration=".3s, .3s, .3s, .06s",i.current&&r-i.current<100&&(a.transitionDuration="0s, 0s")}}),n&&(i.current=Date.now())}),t.current},me=0,Xe=Pe();function Re(){var e;return Xe?(e=me,me+=1):e="TEST_OR_SSR",e}const Fe=(function(e){var t=c.useState(),i=Ee(t,2),r=i[0],n=i[1];return c.useEffect(function(){n("rc_progress_".concat(Re()))},[]),e||r});var ue=function(t){var i=t.bg,r=t.children;return c.createElement("div",{style:{width:"100%",height:"100%",background:i}},r)};function ge(e,t){return Object.keys(e).map(function(i){var r=parseFloat(i),n="".concat(Math.floor(r*t),"%");return"".concat(e[i]," ").concat(n)})}var Ge=c.forwardRef(function(e,t){var i=e.prefixCls,r=e.color,n=e.gradientId,o=e.radius,a=e.style,s=e.ptg,l=e.strokeLinecap,d=e.strokeWidth,m=e.size,g=e.gapDegree,h=r&&Q(r)==="object",v=h?"#FFF":void 0,b=m/2,C=c.createElement("circle",{className:"".concat(i,"-circle-path"),r:o,cx:b,cy:b,stroke:v,strokeLinecap:l,strokeWidth:d,opacity:s===0?0:1,style:a,ref:t});if(!h)return C;var w="".concat(n,"-conic"),u=g?"".concat(180+g/2,"deg"):"0deg",S=ge(r,(360-g)/360),y=ge(r,1),P="conic-gradient(from ".concat(u,", ").concat(S.join(", "),")"),x="linear-gradient(to ".concat(g?"bottom":"top",", ").concat(y.join(", "),")");return c.createElement(c.Fragment,null,c.createElement("mask",{id:w},C),c.createElement("foreignObject",{x:0,y:0,width:m,height:m,mask:"url(#".concat(w,")")},c.createElement(ue,{bg:x},c.createElement(ue,{bg:P}))))}),J=100,oe=function(t,i,r,n,o,a,s,l,d,m){var g=arguments.length>10&&arguments[10]!==void 0?arguments[10]:0,h=r/100*360*((360-a)/360),v=a===0?0:{bottom:0,top:180,left:90,right:-90}[s],b=(100-n)/100*i;d==="round"&&n!==100&&(b+=m/2,b>=i&&(b=i-.01));var C=J/2;return{stroke:typeof l=="string"?l:void 0,strokeDasharray:"".concat(i,"px ").concat(t),strokeDashoffset:b+g,transform:"rotate(".concat(o+h+v,"deg)"),transformOrigin:"".concat(C,"px ").concat(C,"px"),transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},Ke=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function pe(e){var t=e??[];return Array.isArray(t)?t:[t]}var Ve=function(t){var i=te(te({},Be),t),r=i.id,n=i.prefixCls,o=i.steps,a=i.strokeWidth,s=i.trailWidth,l=i.gapDegree,d=l===void 0?0:l,m=i.gapPosition,g=i.trailColor,h=i.strokeLinecap,v=i.style,b=i.className,C=i.strokeColor,w=i.percent,u=ce(i,Ke),S=J/2,y=Fe(r),P="".concat(y,"-gradient"),x=S-a/2,E=Math.PI*2*x,N=d>0?90+d/2:-90,I=E*((360-d)/360),O=Q(o)==="object"?o:{count:o,gap:2},p=O.count,H=O.gap,B=pe(w),W=pe(C),j=W.find(function(M){return M&&Q(M)==="object"}),T=j&&Q(j)==="object",$=T?"butt":h,D=oe(E,I,0,100,N,d,m,g,$,a),q=Le(),A=function(){var K=0;return B.map(function(G,X){var V=W[X]||W[W.length-1],U=oe(E,I,K,G,N,d,m,V,$,a);return K+=G,c.createElement(Ge,{key:X,color:V,ptg:G,radius:x,prefixCls:n,gradientId:P,style:U,strokeLinecap:$,strokeWidth:a,gapDegree:d,ref:function(R){q[X]=R},size:J})}).reverse()},_=function(){var K=Math.round(p*(B[0]/100)),G=100/p,X=0;return new Array(p).fill(null).map(function(V,U){var z=U<=K-1?W[0]:g,R=z&&Q(z)==="object"?"url(#".concat(P,")"):void 0,k=oe(E,I,X,G,N,d,m,z,"butt",a,H);return X+=(I-k.strokeDashoffset+H)*100/I,c.createElement("circle",{key:U,className:"".concat(n,"-circle-path"),r:x,cx:S,cy:S,stroke:R,strokeWidth:a,opacity:1,style:k,ref:function(we){q[U]=we}})})};return c.createElement("svg",Z({className:F("".concat(n,"-circle"),b),viewBox:"0 0 ".concat(J," ").concat(J),style:v,id:r,role:"presentation"},u),!p&&c.createElement("circle",{className:"".concat(n,"-circle-trail"),r:x,cx:S,cy:S,stroke:g,strokeLinecap:$,strokeWidth:s||a,style:D}),p?_():A())};function Y(e){return!e||e<0?0:e>100?100:e}function ie({success:e,successPercent:t}){let i=t;return e&&"progress"in e&&(i=e.progress),e&&"percent"in e&&(i=e.percent),i}const Ue=({percent:e,success:t,successPercent:i})=>{const r=Y(ie({success:t,successPercent:i}));return[r,Y(Y(e)-r)]},Ye=({success:e={},strokeColor:t})=>{const{strokeColor:i}=e;return[i||ae.green,t||null]},ne=(e,t,i)=>{var r,n,o,a;let s=-1,l=-1;if(t==="step"){const d=i.steps,m=i.strokeWidth;typeof e=="string"||typeof e>"u"?(s=e==="small"?2:14,l=m??8):typeof e=="number"?[s,l]=[e,e]:[s=14,l=8]=Array.isArray(e)?e:[e.width,e.height],s*=d}else if(t==="line"){const d=i==null?void 0:i.strokeWidth;typeof e=="string"||typeof e>"u"?l=d||(e==="small"?6:8):typeof e=="number"?[s,l]=[e,e]:[s=-1,l=8]=Array.isArray(e)?e:[e.width,e.height]}else(t==="circle"||t==="dashboard")&&(typeof e=="string"||typeof e>"u"?[s,l]=e==="small"?[60,60]:[120,120]:typeof e=="number"?[s,l]=[e,e]:Array.isArray(e)&&(s=(n=(r=e[0])!==null&&r!==void 0?r:e[1])!==null&&n!==void 0?n:120,l=(a=(o=e[0])!==null&&o!==void 0?o:e[1])!==null&&a!==void 0?a:120));return[s,l]},Qe=3,Je=e=>Qe/e*100,Ze=e=>{const{prefixCls:t,trailColor:i=null,strokeLinecap:r="round",gapPosition:n,gapDegree:o,width:a=120,type:s,children:l,success:d,size:m=a,steps:g}=e,[h,v]=ne(m,"circle");let{strokeWidth:b}=e;b===void 0&&(b=Math.max(Je(h),6));const C={width:h,height:v,fontSize:h*.15+6},w=c.useMemo(()=>{if(o||o===0)return o;if(s==="dashboard")return 75},[o,s]),u=Ue(e),S=n||s==="dashboard"&&"bottom"||void 0,y=Object.prototype.toString.call(e.strokeColor)==="[object Object]",P=Ye({success:d,strokeColor:e.strokeColor}),x=F(`${t}-inner`,{[`${t}-circle-gradient`]:y}),E=c.createElement(Ve,{steps:g,percent:g?u[1]:u,strokeWidth:b,trailWidth:b,strokeColor:g?P[1]:P,strokeLinecap:r,trailColor:i,prefixCls:t,gapDegree:w,gapPosition:S}),N=h<=20,I=c.createElement("div",{className:x,style:C},E,!N&&l);return N?c.createElement(he,{title:l},I):I},re="--progress-line-stroke-color",Ie="--progress-percent",fe=e=>{const t=e?"100%":"-100%";return new Te(`antProgress${e?"RTL":"LTR"}Active`,{"0%":{transform:`translateX(${t}) scaleX(0)`,opacity:.1},"20%":{transform:`translateX(${t}) scaleX(0)`,opacity:.5},to:{transform:"translateX(0) scaleX(1)",opacity:0}})},ke=e=>{const{componentCls:t,iconCls:i}=e;return{[t]:Object.assign(Object.assign({},be(e)),{display:"inline-block","&-rtl":{direction:"rtl"},"&-line":{position:"relative",width:"100%",fontSize:e.fontSize},[`${t}-outer`]:{display:"inline-flex",alignItems:"center",width:"100%"},[`${t}-inner`]:{position:"relative",display:"inline-block",width:"100%",flex:1,overflow:"hidden",verticalAlign:"middle",backgroundColor:e.remainingColor,borderRadius:e.lineBorderRadius},[`${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.defaultColor}},[`${t}-success-bg, ${t}-bg`]:{position:"relative",background:e.defaultColor,borderRadius:e.lineBorderRadius,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`},[`${t}-layout-bottom`]:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",[`${t}-text`]:{width:"max-content",marginInlineStart:0,marginTop:e.marginXXS}},[`${t}-bg`]:{overflow:"hidden","&::after":{content:'""',background:{_multi_value_:!0,value:["inherit",`var(${re})`]},height:"100%",width:`calc(1 / var(${Ie}) * 100%)`,display:"block"},[`&${t}-bg-inner`]:{minWidth:"max-content","&::after":{content:"none"},[`${t}-text-inner`]:{color:e.colorWhite,[`&${t}-text-bright`]:{color:"rgba(0, 0, 0, 0.45)"}}}},[`${t}-success-bg`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,backgroundColor:e.colorSuccess},[`${t}-text`]:{display:"inline-block",marginInlineStart:e.marginXS,color:e.colorText,lineHeight:1,width:"2em",whiteSpace:"nowrap",textAlign:"start",verticalAlign:"middle",wordBreak:"normal",[i]:{fontSize:e.fontSize},[`&${t}-text-outer`]:{width:"max-content"},[`&${t}-text-outer${t}-text-start`]:{width:"max-content",marginInlineStart:0,marginInlineEnd:e.marginXS}},[`${t}-text-inner`]:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",marginInlineStart:0,padding:`0 ${f(e.paddingXXS)}`,[`&${t}-text-start`]:{justifyContent:"start"},[`&${t}-text-end`]:{justifyContent:"end"}},[`&${t}-status-active`]:{[`${t}-bg::before`]:{position:"absolute",inset:0,backgroundColor:e.colorBgContainer,borderRadius:e.lineBorderRadius,opacity:0,animationName:fe(),animationDuration:e.progressActiveMotionDuration,animationTimingFunction:e.motionEaseOutQuint,animationIterationCount:"infinite",content:'""'}},[`&${t}-rtl${t}-status-active`]:{[`${t}-bg::before`]:{animationName:fe(!0)}},[`&${t}-status-exception`]:{[`${t}-bg`]:{backgroundColor:e.colorError},[`${t}-text`]:{color:e.colorError}},[`&${t}-status-exception ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorError}},[`&${t}-status-success`]:{[`${t}-bg`]:{backgroundColor:e.colorSuccess},[`${t}-text`]:{color:e.colorSuccess}},[`&${t}-status-success ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorSuccess}}})}},et=e=>{const{componentCls:t,iconCls:i}=e;return{[t]:{[`${t}-circle-trail`]:{stroke:e.remainingColor},[`&${t}-circle ${t}-inner`]:{position:"relative",lineHeight:1,backgroundColor:"transparent"},[`&${t}-circle ${t}-text`]:{position:"absolute",insetBlockStart:"50%",insetInlineStart:0,width:"100%",margin:0,padding:0,color:e.circleTextColor,fontSize:e.circleTextFontSize,lineHeight:1,whiteSpace:"normal",textAlign:"center",transform:"translateY(-50%)",[i]:{fontSize:e.circleIconFontSize}},[`${t}-circle&-status-exception`]:{[`${t}-text`]:{color:e.colorError}},[`${t}-circle&-status-success`]:{[`${t}-text`]:{color:e.colorSuccess}}},[`${t}-inline-circle`]:{lineHeight:1,[`${t}-inner`]:{verticalAlign:"bottom"}}}},tt=e=>{const{componentCls:t}=e;return{[t]:{[`${t}-steps`]:{display:"inline-block","&-outer":{display:"flex",flexDirection:"row",alignItems:"center"},"&-item":{flexShrink:0,minWidth:e.progressStepMinWidth,marginInlineEnd:e.progressStepMarginInlineEnd,backgroundColor:e.remainingColor,transition:`all ${e.motionDurationSlow}`,"&-active":{backgroundColor:e.defaultColor}}}}}},it=e=>{const{componentCls:t,iconCls:i}=e;return{[t]:{[`${t}-small&-line, ${t}-small&-line ${t}-text ${i}`]:{fontSize:e.fontSizeSM}}}},rt=e=>({circleTextColor:e.colorText,defaultColor:e.colorInfo,remainingColor:e.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:"1em",circleIconFontSize:`${e.fontSize/e.fontSizeSM}em`}),nt=Se("Progress",e=>{const t=e.calc(e.marginXXS).div(2).equal(),i=ve(e,{progressStepMarginInlineEnd:t,progressStepMinWidth:t,progressActiveMotionDuration:"2.4s"});return[ke(i),et(i),tt(i),it(i)]},rt);var ot=function(e,t){var i={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(i[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,r=Object.getOwnPropertySymbols(e);n{let t=[];return Object.keys(e).forEach(i=>{const r=Number.parseFloat(i.replace(/%/g,""));Number.isNaN(r)||t.push({key:r,value:e[i]})}),t=t.sort((i,r)=>i.key-r.key),t.map(({key:i,value:r})=>`${r} ${i}%`).join(", ")},ct=(e,t)=>{const{from:i=ae.blue,to:r=ae.blue,direction:n=t==="rtl"?"to left":"to right"}=e,o=ot(e,["from","to","direction"]);if(Object.keys(o).length!==0){const s=at(o),l=`linear-gradient(${n}, ${s})`;return{background:l,[re]:l}}const a=`linear-gradient(${n}, ${i}, ${r})`;return{background:a,[re]:a}},lt=e=>{const{prefixCls:t,direction:i,percent:r,size:n,strokeWidth:o,strokeColor:a,strokeLinecap:s="round",children:l,trailColor:d=null,percentPosition:m,success:g}=e,{align:h,type:v}=m,b=a&&typeof a!="string"?ct(a,i):{[re]:a,background:a},C=s==="square"||s==="butt"?0:void 0,w=n??[-1,o||(n==="small"?6:8)],[u,S]=ne(w,"line",{strokeWidth:o}),y={backgroundColor:d||void 0,borderRadius:C},P=Object.assign(Object.assign({width:`${Y(r)}%`,height:S,borderRadius:C},b),{[Ie]:Y(r)/100}),x=ie(e),E={width:`${Y(x)}%`,height:S,borderRadius:C,backgroundColor:g==null?void 0:g.strokeColor},N={width:u<0?"100%":u},I=c.createElement("div",{className:`${t}-inner`,style:y},c.createElement("div",{className:F(`${t}-bg`,`${t}-bg-${v}`),style:P},v==="inner"&&l),x!==void 0&&c.createElement("div",{className:`${t}-success-bg`,style:E})),O=v==="outer"&&h==="start",p=v==="outer"&&h==="end";return v==="outer"&&h==="center"?c.createElement("div",{className:`${t}-layout-bottom`},I,l):c.createElement("div",{className:`${t}-outer`,style:N},O&&l,I,p&&l)},st=e=>{const{size:t,steps:i,rounding:r=Math.round,percent:n=0,strokeWidth:o=8,strokeColor:a,trailColor:s=null,prefixCls:l,children:d}=e,m=r(i*(n/100)),h=t??[t==="small"?2:14,o],[v,b]=ne(h,"step",{steps:i,strokeWidth:o}),C=v/i,w=Array.from({length:i});for(let u=0;u{const{prefixCls:i,className:r,rootClassName:n,steps:o,strokeColor:a,percent:s=0,size:l="default",showInfo:d=!0,type:m="line",status:g,format:h,style:v,percentPosition:b={}}=e,C=dt(e,["prefixCls","className","rootClassName","steps","strokeColor","percent","size","showInfo","type","status","format","style","percentPosition"]),{align:w="end",type:u="outer"}=b,S=Array.isArray(a)?a[0]:a,y=typeof a=="string"||Array.isArray(a)?a:void 0,P=c.useMemo(()=>{if(S){const A=typeof S=="string"?S:Object.values(S)[0];return new Ne(A).isLight()}return!1},[a]),x=c.useMemo(()=>{var A,_;const M=ie(e);return Number.parseInt(M!==void 0?(A=M??0)===null||A===void 0?void 0:A.toString():(_=s??0)===null||_===void 0?void 0:_.toString(),10)},[s,e.success,e.successPercent]),E=c.useMemo(()=>!mt.includes(g)&&x>=100?"success":g||"normal",[g,x]),{getPrefixCls:N,direction:I,progress:O}=c.useContext(Oe),p=N("progress",i),[H,B,W]=nt(p),j=m==="line",T=j&&!o,$=c.useMemo(()=>{if(!d)return null;const A=ie(e);let _;const M=h||(G=>`${G}%`),K=j&&P&&u==="inner";return u==="inner"||h||E!=="exception"&&E!=="success"?_=M(Y(s),Y(A)):E==="exception"?_=j?c.createElement(De,null):c.createElement(ye,null):E==="success"&&(_=j?c.createElement(ze,null):c.createElement(Ce,null)),c.createElement("span",{className:F(`${p}-text`,{[`${p}-text-bright`]:K,[`${p}-text-${w}`]:T,[`${p}-text-${u}`]:T}),title:typeof _=="string"?_:void 0},_)},[d,s,x,E,m,p,h]);let D;m==="line"?D=o?c.createElement(st,Object.assign({},e,{strokeColor:y,prefixCls:p,steps:typeof o=="object"?o.count:o}),$):c.createElement(lt,Object.assign({},e,{strokeColor:S,prefixCls:p,direction:I,percentPosition:{align:w,type:u}}),$):(m==="circle"||m==="dashboard")&&(D=c.createElement(Ze,Object.assign({},e,{strokeColor:S,prefixCls:p,progressStatus:E}),$));const q=F(p,`${p}-status-${E}`,{[`${p}-${m==="dashboard"&&"circle"||m}`]:m!=="line",[`${p}-inline-circle`]:m==="circle"&&ne(l,"circle")[0]<=20,[`${p}-line`]:T,[`${p}-line-align-${w}`]:T,[`${p}-line-position-${u}`]:T,[`${p}-steps`]:o,[`${p}-show-info`]:d,[`${p}-${l}`]:typeof l=="string",[`${p}-rtl`]:I==="rtl"},O==null?void 0:O.className,r,n,B,W);return H(c.createElement("div",Object.assign({ref:t,style:Object.assign(Object.assign({},O==null?void 0:O.style),v),className:q,role:"progressbar","aria-valuenow":x,"aria-valuemin":0,"aria-valuemax":100},je(C,["trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"])),D))});var gt=["className","prefixCls","style","active","status","iconPrefix","icon","wrapperStyle","stepNumber","disabled","description","title","subTitle","progressDot","stepIcon","tailContent","icons","stepIndex","onStepClick","onClick","render"];function $e(e){return typeof e=="string"}function xe(e){var t,i=e.className,r=e.prefixCls,n=e.style,o=e.active,a=e.status,s=e.iconPrefix,l=e.icon;e.wrapperStyle;var d=e.stepNumber,m=e.disabled,g=e.description,h=e.title,v=e.subTitle,b=e.progressDot,C=e.stepIcon,w=e.tailContent,u=e.icons,S=e.stepIndex,y=e.onStepClick,P=e.onClick,x=e.render,E=ce(e,gt),N=!!y&&!m,I={};N&&(I.role="button",I.tabIndex=0,I.onClick=function(j){P==null||P(j),y(S)},I.onKeyDown=function(j){var T=j.which;(T===se.ENTER||T===se.SPACE)&&y(S)});var O=function(){var T,$,D=F("".concat(r,"-icon"),"".concat(s,"icon"),(T={},L(T,"".concat(s,"icon-").concat(l),l&&$e(l)),L(T,"".concat(s,"icon-check"),!l&&a==="finish"&&(u&&!u.finish||!u)),L(T,"".concat(s,"icon-cross"),!l&&a==="error"&&(u&&!u.error||!u)),T)),q=c.createElement("span",{className:"".concat(r,"-icon-dot")});return b?typeof b=="function"?$=c.createElement("span",{className:"".concat(r,"-icon")},b(q,{index:d-1,status:a,title:h,description:g})):$=c.createElement("span",{className:"".concat(r,"-icon")},q):l&&!$e(l)?$=c.createElement("span",{className:"".concat(r,"-icon")},l):u&&u.finish&&a==="finish"?$=c.createElement("span",{className:"".concat(r,"-icon")},u.finish):u&&u.error&&a==="error"?$=c.createElement("span",{className:"".concat(r,"-icon")},u.error):l||a==="finish"||a==="error"?$=c.createElement("span",{className:D}):$=c.createElement("span",{className:"".concat(r,"-icon")},d),C&&($=C({index:d-1,status:a,title:h,description:g,node:$})),$},p=a||"wait",H=F("".concat(r,"-item"),"".concat(r,"-item-").concat(p),i,(t={},L(t,"".concat(r,"-item-custom"),l),L(t,"".concat(r,"-item-active"),o),L(t,"".concat(r,"-item-disabled"),m===!0),t)),B=te({},n),W=c.createElement("div",Z({},E,{className:H,style:B}),c.createElement("div",Z({onClick:P},I,{className:"".concat(r,"-item-container")}),c.createElement("div",{className:"".concat(r,"-item-tail")},w),c.createElement("div",{className:"".concat(r,"-item-icon")},O()),c.createElement("div",{className:"".concat(r,"-item-content")},c.createElement("div",{className:"".concat(r,"-item-title")},h,v&&c.createElement("div",{title:typeof v=="string"?v:void 0,className:"".concat(r,"-item-subtitle")},v)),g&&c.createElement("div",{className:"".concat(r,"-item-description")},g))));return x&&(W=x(W)||null),W}var pt=["prefixCls","style","className","children","direction","type","labelPlacement","iconPrefix","status","size","current","progressDot","stepIcon","initial","icons","onChange","itemRender","items"];function le(e){var t,i=e.prefixCls,r=i===void 0?"rc-steps":i,n=e.style,o=n===void 0?{}:n,a=e.className;e.children;var s=e.direction,l=s===void 0?"horizontal":s,d=e.type,m=d===void 0?"default":d,g=e.labelPlacement,h=g===void 0?"horizontal":g,v=e.iconPrefix,b=v===void 0?"rc":v,C=e.status,w=C===void 0?"process":C,u=e.size,S=e.current,y=S===void 0?0:S,P=e.progressDot,x=P===void 0?!1:P,E=e.stepIcon,N=e.initial,I=N===void 0?0:N,O=e.icons,p=e.onChange,H=e.itemRender,B=e.items,W=B===void 0?[]:B,j=ce(e,pt),T=m==="navigation",$=m==="inline",D=$||x,q=$?"horizontal":l,A=$?void 0:u,_=D?"vertical":h,M=F(r,"".concat(r,"-").concat(q),a,(t={},L(t,"".concat(r,"-").concat(A),A),L(t,"".concat(r,"-label-").concat(_),q==="horizontal"),L(t,"".concat(r,"-dot"),!!D),L(t,"".concat(r,"-navigation"),T),L(t,"".concat(r,"-inline"),$),t)),K=function(V){p&&y!==V&&p(V)},G=function(V,U){var z=te({},V),R=I+U;return w==="error"&&U===y-1&&(z.className="".concat(r,"-next-error")),z.status||(R===y?z.status=w:R{const{componentCls:t,customIconTop:i,customIconSize:r,customIconFontSize:n}=e;return{[`${t}-item-custom`]:{[`> ${t}-item-container > ${t}-item-icon`]:{height:"auto",background:"none",border:0,[`> ${t}-icon`]:{top:i,width:r,height:r,fontSize:n,lineHeight:f(r)}}},[`&:not(${t}-vertical)`]:{[`${t}-item-custom`]:{[`${t}-item-icon`]:{width:"auto",background:"none"}}}}},$t=e=>{const{componentCls:t}=e,i=`${t}-item`;return{[`${t}-horizontal`]:{[`${i}-tail`]:{transform:"translateY(-50%)"}}}},ht=e=>{const{componentCls:t,inlineDotSize:i,inlineTitleColor:r,inlineTailColor:n}=e,o=e.calc(e.paddingXS).add(e.lineWidth).equal(),a={[`${t}-item-container ${t}-item-content ${t}-item-title`]:{color:r}};return{[`&${t}-inline`]:{width:"auto",display:"inline-flex",[`${t}-item`]:{flex:"none","&-container":{padding:`${f(o)} ${f(e.paddingXXS)} 0`,margin:`0 ${f(e.calc(e.marginXXS).div(2).equal())}`,borderRadius:e.borderRadiusSM,cursor:"pointer",transition:`background-color ${e.motionDurationMid}`,"&:hover":{background:e.controlItemBgHover},"&[role='button']:hover":{opacity:1}},"&-icon":{width:i,height:i,marginInlineStart:`calc(50% - ${f(e.calc(i).div(2).equal())})`,[`> ${t}-icon`]:{top:0},[`${t}-icon-dot`]:{borderRadius:e.calc(e.fontSizeSM).div(4).equal(),"&::after":{display:"none"}}},"&-content":{width:"auto",marginTop:e.calc(e.marginXS).sub(e.lineWidth).equal()},"&-title":{color:r,fontSize:e.fontSizeSM,lineHeight:e.lineHeightSM,fontWeight:"normal",marginBottom:e.calc(e.marginXXS).div(2).equal()},"&-description":{display:"none"},"&-tail":{marginInlineStart:0,top:e.calc(i).div(2).add(o).equal(),transform:"translateY(-50%)","&:after":{width:"100%",height:e.lineWidth,borderRadius:0,marginInlineStart:0,background:n}},[`&:first-child ${t}-item-tail`]:{width:"50%",marginInlineStart:"50%"},[`&:last-child ${t}-item-tail`]:{display:"block",width:"50%"},"&-wait":Object.assign({[`${t}-item-icon ${t}-icon ${t}-icon-dot`]:{backgroundColor:e.colorBorderBg,border:`${f(e.lineWidth)} ${e.lineType} ${n}`}},a),"&-finish":Object.assign({[`${t}-item-tail::after`]:{backgroundColor:n},[`${t}-item-icon ${t}-icon ${t}-icon-dot`]:{backgroundColor:n,border:`${f(e.lineWidth)} ${e.lineType} ${n}`}},a),"&-error":a,"&-active, &-process":Object.assign({[`${t}-item-icon`]:{width:i,height:i,marginInlineStart:`calc(50% - ${f(e.calc(i).div(2).equal())})`,top:0}},a),[`&:not(${t}-item-active) > ${t}-item-container[role='button']:hover`]:{[`${t}-item-title`]:{color:r}}}}}},St=e=>{const{componentCls:t,iconSize:i,lineHeight:r,iconSizeSM:n}=e;return{[`&${t}-label-vertical`]:{[`${t}-item`]:{overflow:"visible","&-tail":{marginInlineStart:e.calc(i).div(2).add(e.controlHeightLG).equal(),padding:`0 ${f(e.paddingLG)}`},"&-content":{display:"block",width:e.calc(i).div(2).add(e.controlHeightLG).mul(2).equal(),marginTop:e.marginSM,textAlign:"center"},"&-icon":{display:"inline-block",marginInlineStart:e.controlHeightLG},"&-title":{paddingInlineEnd:0,paddingInlineStart:0,"&::after":{display:"none"}},"&-subtitle":{display:"block",marginBottom:e.marginXXS,marginInlineStart:0,lineHeight:r}},[`&${t}-small:not(${t}-dot)`]:{[`${t}-item`]:{"&-icon":{marginInlineStart:e.calc(i).sub(n).div(2).add(e.controlHeightLG).equal()}}}}}},vt=e=>{const{componentCls:t,navContentMaxWidth:i,navArrowColor:r,stepsNavActiveColor:n,motionDurationSlow:o}=e;return{[`&${t}-navigation`]:{paddingTop:e.paddingSM,[`&${t}-small`]:{[`${t}-item`]:{"&-container":{marginInlineStart:e.calc(e.marginSM).mul(-1).equal()}}},[`${t}-item`]:{overflow:"visible",textAlign:"center","&-container":{display:"inline-block",height:"100%",marginInlineStart:e.calc(e.margin).mul(-1).equal(),paddingBottom:e.paddingSM,textAlign:"start",transition:`opacity ${o}`,[`${t}-item-content`]:{maxWidth:i},[`${t}-item-title`]:Object.assign(Object.assign({maxWidth:"100%",paddingInlineEnd:0},We),{"&::after":{display:"none"}})},[`&:not(${t}-item-active)`]:{[`${t}-item-container[role='button']`]:{cursor:"pointer","&:hover":{opacity:.85}}},"&:last-child":{flex:1,"&::after":{display:"none"}},"&::after":{position:"absolute",top:`calc(50% - ${f(e.calc(e.paddingSM).div(2).equal())})`,insetInlineStart:"100%",display:"inline-block",width:e.fontSizeIcon,height:e.fontSizeIcon,borderTop:`${f(e.lineWidth)} ${e.lineType} ${r}`,borderBottom:"none",borderInlineStart:"none",borderInlineEnd:`${f(e.lineWidth)} ${e.lineType} ${r}`,transform:"translateY(-50%) translateX(-50%) rotate(45deg)",content:'""'},"&::before":{position:"absolute",bottom:0,insetInlineStart:"50%",display:"inline-block",width:0,height:e.lineWidthBold,backgroundColor:n,transition:`width ${o}, inset-inline-start ${o}`,transitionTimingFunction:"ease-out",content:'""'}},[`${t}-item${t}-item-active::before`]:{insetInlineStart:0,width:"100%"}},[`&${t}-navigation${t}-vertical`]:{[`> ${t}-item`]:{marginInlineEnd:0,"&::before":{display:"none"},[`&${t}-item-active::before`]:{top:0,insetInlineEnd:0,insetInlineStart:"unset",display:"block",width:e.calc(e.lineWidth).mul(3).equal(),height:`calc(100% - ${f(e.marginLG)})`},"&::after":{position:"relative",insetInlineStart:"50%",display:"block",width:e.calc(e.controlHeight).mul(.25).equal(),height:e.calc(e.controlHeight).mul(.25).equal(),marginBottom:e.marginXS,textAlign:"center",transform:"translateY(-50%) translateX(-50%) rotate(135deg)"},"&:last-child":{"&::after":{display:"none"}},[`> ${t}-item-container > ${t}-item-tail`]:{visibility:"hidden"}}},[`&${t}-navigation${t}-horizontal`]:{[`> ${t}-item > ${t}-item-container > ${t}-item-tail`]:{visibility:"hidden"}}}},bt=e=>{const{antCls:t,componentCls:i,iconSize:r,iconSizeSM:n,processIconColor:o,marginXXS:a,lineWidthBold:s,lineWidth:l,paddingXXS:d}=e,m=e.calc(r).add(e.calc(s).mul(4).equal()).equal(),g=e.calc(n).add(e.calc(e.lineWidth).mul(4).equal()).equal();return{[`&${i}-with-progress`]:{[`${i}-item`]:{paddingTop:d,[`&-process ${i}-item-container ${i}-item-icon ${i}-icon`]:{color:o}},[`&${i}-vertical > ${i}-item `]:{paddingInlineStart:d,[`> ${i}-item-container > ${i}-item-tail`]:{top:a,insetInlineStart:e.calc(r).div(2).sub(l).add(d).equal()}},[`&, &${i}-small`]:{[`&${i}-horizontal ${i}-item:first-child`]:{paddingBottom:d,paddingInlineStart:d}},[`&${i}-small${i}-vertical > ${i}-item > ${i}-item-container > ${i}-item-tail`]:{insetInlineStart:e.calc(n).div(2).sub(l).add(d).equal()},[`&${i}-label-vertical ${i}-item ${i}-item-tail`]:{top:e.calc(r).div(2).add(d).equal()},[`${i}-item-icon`]:{position:"relative",[`${t}-progress`]:{position:"absolute",insetInlineStart:"50%",top:"50%",transform:"translate(-50%, -50%)","&-inner":{width:`${f(m)} !important`,height:`${f(m)} !important`}}},[`&${i}-small`]:{[`&${i}-label-vertical ${i}-item ${i}-item-tail`]:{top:e.calc(n).div(2).add(d).equal()},[`${i}-item-icon ${t}-progress-inner`]:{width:`${f(g)} !important`,height:`${f(g)} !important`}}}}},yt=e=>{const{componentCls:t,descriptionMaxWidth:i,lineHeight:r,dotCurrentSize:n,dotSize:o,motionDurationSlow:a}=e;return{[`&${t}-dot, &${t}-dot${t}-small`]:{[`${t}-item`]:{"&-title":{lineHeight:r},"&-tail":{top:e.calc(e.dotSize).sub(e.calc(e.lineWidth).mul(3).equal()).div(2).equal(),width:"100%",marginTop:0,marginBottom:0,marginInline:`${f(e.calc(i).div(2).equal())} 0`,padding:0,"&::after":{width:`calc(100% - ${f(e.calc(e.marginSM).mul(2).equal())})`,height:e.calc(e.lineWidth).mul(3).equal(),marginInlineStart:e.marginSM}},"&-icon":{width:o,height:o,marginInlineStart:e.calc(e.descriptionMaxWidth).sub(o).div(2).equal(),paddingInlineEnd:0,lineHeight:f(o),background:"transparent",border:0,[`${t}-icon-dot`]:{position:"relative",float:"left",width:"100%",height:"100%",borderRadius:100,transition:`all ${a}`,"&::after":{position:"absolute",top:e.calc(e.marginSM).mul(-1).equal(),insetInlineStart:e.calc(o).sub(e.calc(e.controlHeightLG).mul(1.5).equal()).div(2).equal(),width:e.calc(e.controlHeightLG).mul(1.5).equal(),height:e.controlHeight,background:"transparent",content:'""'}}},"&-content":{width:i},[`&-process ${t}-item-icon`]:{position:"relative",top:e.calc(o).sub(n).div(2).equal(),width:n,height:n,lineHeight:f(n),background:"none",marginInlineStart:e.calc(e.descriptionMaxWidth).sub(n).div(2).equal()},[`&-process ${t}-icon`]:{[`&:first-child ${t}-icon-dot`]:{insetInlineStart:0}}}},[`&${t}-vertical${t}-dot`]:{[`${t}-item-icon`]:{marginTop:e.calc(e.controlHeight).sub(o).div(2).equal(),marginInlineStart:0,background:"none"},[`${t}-item-process ${t}-item-icon`]:{marginTop:e.calc(e.controlHeight).sub(n).div(2).equal(),top:0,insetInlineStart:e.calc(o).sub(n).div(2).equal(),marginInlineStart:0},[`${t}-item > ${t}-item-container > ${t}-item-tail`]:{top:e.calc(e.controlHeight).sub(o).div(2).equal(),insetInlineStart:0,margin:0,padding:`${f(e.calc(o).add(e.paddingXS).equal())} 0 ${f(e.paddingXS)}`,"&::after":{marginInlineStart:e.calc(o).sub(e.lineWidth).div(2).equal()}},[`&${t}-small`]:{[`${t}-item-icon`]:{marginTop:e.calc(e.controlHeightSM).sub(o).div(2).equal()},[`${t}-item-process ${t}-item-icon`]:{marginTop:e.calc(e.controlHeightSM).sub(n).div(2).equal()},[`${t}-item > ${t}-item-container > ${t}-item-tail`]:{top:e.calc(e.controlHeightSM).sub(o).div(2).equal()}},[`${t}-item:first-child ${t}-icon-dot`]:{insetInlineStart:0},[`${t}-item-content`]:{width:"inherit"}}}},Ct=e=>{const{componentCls:t}=e;return{[`&${t}-rtl`]:{direction:"rtl",[`${t}-item`]:{"&-subtitle":{float:"left"}},[`&${t}-navigation`]:{[`${t}-item::after`]:{transform:"rotate(-45deg)"}},[`&${t}-vertical`]:{[`> ${t}-item`]:{"&::after":{transform:"rotate(225deg)"},[`${t}-item-icon`]:{float:"right"}}},[`&${t}-dot`]:{[`${t}-item-icon ${t}-icon-dot, &${t}-small ${t}-item-icon ${t}-icon-dot`]:{float:"right"}}}}},It=e=>{const{componentCls:t,iconSizeSM:i,fontSizeSM:r,fontSize:n,colorTextDescription:o}=e;return{[`&${t}-small`]:{[`&${t}-horizontal:not(${t}-label-vertical) ${t}-item`]:{paddingInlineStart:e.paddingSM,"&:first-child":{paddingInlineStart:0}},[`${t}-item-icon`]:{width:i,height:i,marginTop:0,marginBottom:0,marginInline:`0 ${f(e.marginXS)}`,fontSize:r,lineHeight:f(i),textAlign:"center",borderRadius:i},[`${t}-item-title`]:{paddingInlineEnd:e.paddingSM,fontSize:n,lineHeight:f(i),"&::after":{top:e.calc(i).div(2).equal()}},[`${t}-item-description`]:{color:o,fontSize:n},[`${t}-item-tail`]:{top:e.calc(i).div(2).sub(e.paddingXXS).equal()},[`${t}-item-custom ${t}-item-icon`]:{width:"inherit",height:"inherit",lineHeight:"inherit",background:"none",border:0,borderRadius:0,[`> ${t}-icon`]:{fontSize:i,lineHeight:f(i),transform:"none"}}}}},xt=e=>{const{componentCls:t,iconSizeSM:i,iconSize:r}=e;return{[`&${t}-vertical`]:{display:"flex",flexDirection:"column",[`> ${t}-item`]:{display:"block",flex:"1 0 auto",paddingInlineStart:0,overflow:"visible",[`${t}-item-icon`]:{float:"left",marginInlineEnd:e.margin},[`${t}-item-content`]:{display:"block",minHeight:e.calc(e.controlHeight).mul(1.5).equal(),overflow:"hidden"},[`${t}-item-title`]:{lineHeight:f(r)},[`${t}-item-description`]:{paddingBottom:e.paddingSM}},[`> ${t}-item > ${t}-item-container > ${t}-item-tail`]:{position:"absolute",top:0,insetInlineStart:e.calc(r).div(2).sub(e.lineWidth).equal(),width:e.lineWidth,height:"100%",padding:`${f(e.calc(e.marginXXS).mul(1.5).add(r).equal())} 0 ${f(e.calc(e.marginXXS).mul(1.5).equal())}`,"&::after":{width:e.lineWidth,height:"100%"}},[`> ${t}-item:not(:last-child) > ${t}-item-container > ${t}-item-tail`]:{display:"block"},[` > ${t}-item > ${t}-item-container > ${t}-item-content > ${t}-item-title`]:{"&::after":{display:"none"}},[`&${t}-small ${t}-item-container`]:{[`${t}-item-tail`]:{position:"absolute",top:0,insetInlineStart:e.calc(i).div(2).sub(e.lineWidth).equal(),padding:`${f(e.calc(e.marginXXS).mul(1.5).add(i).equal())} 0 ${f(e.calc(e.marginXXS).mul(1.5).equal())}`},[`${t}-item-title`]:{lineHeight:f(i)}}}}},wt="wait",Et="process",Pt="finish",Tt="error",ee=(e,t)=>{const i=`${t.componentCls}-item`,r=`${e}IconColor`,n=`${e}TitleColor`,o=`${e}DescriptionColor`,a=`${e}TailColor`,s=`${e}IconBgColor`,l=`${e}IconBorderColor`,d=`${e}DotColor`;return{[`${i}-${e} ${i}-icon`]:{backgroundColor:t[s],borderColor:t[l],[`> ${t.componentCls}-icon`]:{color:t[r],[`${t.componentCls}-icon-dot`]:{background:t[d]}}},[`${i}-${e}${i}-custom ${i}-icon`]:{[`> ${t.componentCls}-icon`]:{color:t[d]}},[`${i}-${e} > ${i}-container > ${i}-content > ${i}-title`]:{color:t[n],"&::after":{backgroundColor:t[a]}},[`${i}-${e} > ${i}-container > ${i}-content > ${i}-description`]:{color:t[o]},[`${i}-${e} > ${i}-container > ${i}-tail::after`]:{backgroundColor:t[a]}}},Nt=e=>{const{componentCls:t,motionDurationSlow:i}=e,r=`${t}-item`,n=`${r}-icon`;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[r]:{position:"relative",display:"inline-block",flex:1,overflow:"hidden",verticalAlign:"top","&:last-child":{flex:"none",[`> ${r}-container > ${r}-tail, > ${r}-container > ${r}-content > ${r}-title::after`]:{display:"none"}}},[`${r}-container`]:{outline:"none",[`&:focus-visible ${n}`]:_e(e)},[`${n}, ${r}-content`]:{display:"inline-block",verticalAlign:"top"},[n]:{width:e.iconSize,height:e.iconSize,marginTop:0,marginBottom:0,marginInlineStart:0,marginInlineEnd:e.marginXS,fontSize:e.iconFontSize,fontFamily:e.fontFamily,lineHeight:f(e.iconSize),textAlign:"center",borderRadius:e.iconSize,border:`${f(e.lineWidth)} ${e.lineType} transparent`,transition:`background-color ${i}, border-color ${i}`,[`${t}-icon`]:{position:"relative",top:e.iconTop,color:e.colorPrimary,lineHeight:1}},[`${r}-tail`]:{position:"absolute",top:e.calc(e.iconSize).div(2).equal(),insetInlineStart:0,width:"100%","&::after":{display:"inline-block",width:"100%",height:e.lineWidth,background:e.colorSplit,borderRadius:e.lineWidth,transition:`background ${i}`,content:'""'}},[`${r}-title`]:{position:"relative",display:"inline-block",paddingInlineEnd:e.padding,color:e.colorText,fontSize:e.fontSizeLG,lineHeight:f(e.titleLineHeight),"&::after":{position:"absolute",top:e.calc(e.titleLineHeight).div(2).equal(),insetInlineStart:"100%",display:"block",width:9999,height:e.lineWidth,background:e.processTailColor,content:'""'}},[`${r}-subtitle`]:{display:"inline",marginInlineStart:e.marginXS,color:e.colorTextDescription,fontWeight:"normal",fontSize:e.fontSize},[`${r}-description`]:{color:e.colorTextDescription,fontSize:e.fontSize}},ee(wt,e)),ee(Et,e)),{[`${r}-process > ${r}-container > ${r}-title`]:{fontWeight:e.fontWeightStrong}}),ee(Pt,e)),ee(Tt,e)),{[`${r}${t}-next-error > ${t}-item-title::after`]:{background:e.colorError},[`${r}-disabled`]:{cursor:"not-allowed"}})},Ot=e=>{const{componentCls:t,motionDurationSlow:i}=e;return{[`& ${t}-item`]:{[`&:not(${t}-item-active)`]:{[`& > ${t}-item-container[role='button']`]:{cursor:"pointer",[`${t}-item`]:{[`&-title, &-subtitle, &-description, &-icon ${t}-icon`]:{transition:`color ${i}`}},"&:hover":{[`${t}-item`]:{"&-title, &-subtitle, &-description":{color:e.colorPrimary}}}},[`&:not(${t}-item-process)`]:{[`& > ${t}-item-container[role='button']:hover`]:{[`${t}-item`]:{"&-icon":{borderColor:e.colorPrimary,[`${t}-icon`]:{color:e.colorPrimary}}}}}}},[`&${t}-horizontal:not(${t}-label-vertical)`]:{[`${t}-item`]:{paddingInlineStart:e.padding,whiteSpace:"nowrap","&:first-child":{paddingInlineStart:0},[`&:last-child ${t}-item-title`]:{paddingInlineEnd:0},"&-tail":{display:"none"},"&-description":{maxWidth:e.descriptionMaxWidth,whiteSpace:"normal"}}}}},jt=e=>{const{componentCls:t}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},be(e)),{display:"flex",width:"100%",fontSize:0,textAlign:"initial"}),Nt(e)),Ot(e)),ft(e)),It(e)),xt(e)),$t(e)),St(e)),yt(e)),vt(e)),Ct(e)),bt(e)),ht(e))}},Dt=e=>({titleLineHeight:e.controlHeight,customIconSize:e.controlHeight,customIconTop:0,customIconFontSize:e.controlHeightSM,iconSize:e.controlHeight,iconTop:-.5,iconFontSize:e.fontSize,iconSizeSM:e.fontSizeHeading3,dotSize:e.controlHeight/4,dotCurrentSize:e.controlHeightLG/4,navArrowColor:e.colorTextDisabled,navContentMaxWidth:"unset",descriptionMaxWidth:140,waitIconColor:e.wireframe?e.colorTextDisabled:e.colorTextLabel,waitIconBgColor:e.wireframe?e.colorBgContainer:e.colorFillContent,waitIconBorderColor:e.wireframe?e.colorTextDisabled:"transparent",finishIconBgColor:e.wireframe?e.colorBgContainer:e.controlItemBgActive,finishIconBorderColor:e.wireframe?e.colorPrimary:e.controlItemBgActive}),zt=Se("Steps",e=>{const{colorTextDisabled:t,controlHeightLG:i,colorTextLightSolid:r,colorText:n,colorPrimary:o,colorTextDescription:a,colorTextQuaternary:s,colorError:l,colorBorderSecondary:d,colorSplit:m}=e,g=ve(e,{processIconColor:r,processTitleColor:n,processDescriptionColor:n,processIconBgColor:o,processIconBorderColor:o,processDotColor:o,processTailColor:m,waitTitleColor:a,waitDescriptionColor:a,waitTailColor:m,waitDotColor:t,finishIconColor:o,finishTitleColor:n,finishDescriptionColor:a,finishTailColor:o,finishDotColor:o,errorIconColor:r,errorTitleColor:l,errorDescriptionColor:l,errorTailColor:m,errorIconBgColor:l,errorIconBorderColor:l,errorDotColor:l,stepsNavActiveColor:o,stepsProgressSize:i,inlineDotSize:6,inlineTitleColor:s,inlineTailColor:d});return jt(g)},Dt);function Wt(e){return e.filter(t=>t)}function _t(e,t){if(e)return e;const i=Me(t).map(r=>{if(c.isValidElement(r)){const{props:n}=r;return Object.assign({},n)}return null});return Wt(i)}var Mt=function(e,t){var i={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(i[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,r=Object.getOwnPropertySymbols(e);n{const{percent:t,size:i,className:r,rootClassName:n,direction:o,items:a,responsive:s=!0,current:l=0,children:d,style:m}=e,g=Mt(e,["percent","size","className","rootClassName","direction","items","responsive","current","children","style"]),{xs:h}=qe(s),{getPrefixCls:v,direction:b,className:C,style:w}=Ae("steps"),u=c.useMemo(()=>s&&h?"vertical":o,[s,h,o]),S=He(i),y=v("steps",e.prefixCls),[P,x,E]=zt(y),N=e.type==="inline",I=v("",e.iconPrefix),O=_t(a,d),p=N?void 0:t,H=Object.assign(Object.assign({},w),m),B=F(C,{[`${y}-rtl`]:b==="rtl",[`${y}-with-progress`]:p!==void 0},r,n,x,E),W={finish:c.createElement(Ce,{className:`${y}-finish-icon`}),error:c.createElement(ye,{className:`${y}-error-icon`})},j=({node:$,status:D})=>{if(D==="process"&&p!==void 0){const q=S==="small"?32:40;return c.createElement("div",{className:`${y}-progress-icon`},c.createElement(ut,{type:"circle",percent:p,size:q,strokeWidth:4,format:()=>null}),$)}return $},T=($,D)=>$.description?c.createElement(he,{title:$.description},D):D;return P(c.createElement(le,Object.assign({icons:W},g,{style:H,current:l,size:S,items:O,itemRender:N?T:void 0,stepIcon:j,direction:u,prefixCls:y,iconPrefix:I,className:B})))};qt.Step=le.Step;export{qt as S}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/index-emnzbHoJ.js b/shopops-admin/src/main/resources/static/admin/assets/index-emnzbHoJ.js new file mode 100644 index 0000000..93e95d6 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/index-emnzbHoJ.js @@ -0,0 +1 @@ +import{r,E as H,G as F,H as I,X as _,M as L,am as X,an as B,ao as U,ap as O,W as V}from"./styles-CdbHnvft.js";const A=t=>{const{value:n,formatter:o,precision:e,decimalSeparator:a,groupSeparator:m="",prefixCls:i}=t;let c;if(typeof o=="function")c=o(n);else{const s=String(n),f=s.match(/^(-?)(\d*)(\.(\d+))?$/);if(!f||s==="-")c=s;else{const d=f[1];let p=f[2]||"0",u=f[4]||"";p=p.replace(/\B(?=(\d{3})+(?!\d))/g,m),typeof e=="number"&&(u=u.padEnd(e,"0").slice(0,e>0?e:0)),u&&(u=`${a}${u}`),c=[r.createElement("span",{key:"int",className:`${i}-content-value-int`},d,p),u&&r.createElement("span",{key:"decimal",className:`${i}-content-value-decimal`},u)]}}return r.createElement("span",{className:`${i}-content-value`},c)},G=t=>{const{componentCls:n,marginXXS:o,padding:e,colorTextDescription:a,titleFontSize:m,colorTextHeading:i,contentFontSize:c,fontFamily:s}=t;return{[n]:Object.assign(Object.assign({},I(t)),{[`${n}-title`]:{marginBottom:o,color:a,fontSize:m},[`${n}-skeleton`]:{paddingTop:e},[`${n}-content`]:{color:i,fontSize:c,fontFamily:s,[`${n}-content-value`]:{display:"inline-block",direction:"ltr"},[`${n}-content-prefix, ${n}-content-suffix`]:{display:"inline-block"},[`${n}-content-prefix`]:{marginInlineEnd:o},[`${n}-content-suffix`]:{marginInlineStart:o}}})}},W=t=>{const{fontSizeHeading3:n,fontSize:o}=t;return{titleFontSize:o,contentFontSize:n}},Y=H("Statistic",t=>{const n=F(t,{});return G(n)},W);var q=function(t,n){var o={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(o[e]=t[e]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,e=Object.getOwnPropertySymbols(t);a{const{prefixCls:o,className:e,rootClassName:a,style:m,valueStyle:i,value:c=0,title:s,valueRender:f,prefix:d,suffix:p,loading:u=!1,formatter:l,precision:g,decimalSeparator:S=".",groupSeparator:w=",",onMouseEnter:$,onMouseLeave:C}=t,h=q(t,["prefixCls","className","rootClassName","style","valueStyle","value","title","valueRender","prefix","suffix","loading","formatter","precision","decimalSeparator","groupSeparator","onMouseEnter","onMouseLeave"]),{getPrefixCls:N,direction:j,className:T,style:k}=_("statistic"),v=N("statistic",o),[R,z,M]=Y(v),x=r.createElement(A,{decimalSeparator:S,groupSeparator:w,prefixCls:v,formatter:l,precision:g,value:c}),P=L(v,{[`${v}-rtl`]:j==="rtl"},T,e,a,z,M),b=r.useRef(null);r.useImperativeHandle(n,()=>({nativeElement:b.current}));const D=X(h,{aria:!0,data:!0});return R(r.createElement("div",Object.assign({},D,{ref:b,className:P,style:Object.assign(Object.assign({},k),m),onMouseEnter:$,onMouseLeave:C}),s&&r.createElement("div",{className:`${v}-title`},s),r.createElement(B,{paragraph:!1,loading:u,className:`${v}-skeleton`,active:!0},r.createElement("div",{style:i,className:`${v}-content`},d&&r.createElement("span",{className:`${v}-content-prefix`},d),f?f(x):x,p&&r.createElement("span",{className:`${v}-content-suffix`},p)))))}),J=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]];function K(t,n){let o=t;const e=/\[[^\]]*]/g,a=(n.match(e)||[]).map(s=>s.slice(1,-1)),m=n.replace(e,"[]"),i=J.reduce((s,[f,d])=>{if(s.includes(f)){const p=Math.floor(o/d);return o-=p*d,s.replace(new RegExp(`${f}+`,"g"),u=>{const l=u.length;return p.toString().padStart(l,"0")})}return s},m);let c=0;return i.replace(e,()=>{const s=a[c];return c+=1,s})}function Q(t,n,o){const{format:e=""}=n,a=new Date(t).getTime(),m=Date.now(),i=Math.max(o?a-m:m-a,0);return K(i,e)}var Z=function(t,n){var o={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(o[e]=t[e]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,e=Object.getOwnPropertySymbols(t);a{const{value:n,format:o="HH:mm:ss",onChange:e,onFinish:a,type:m}=t,i=Z(t,["value","format","onChange","onFinish","type"]),c=m==="countdown",[s,f]=r.useState(null),d=U(()=>{const l=Date.now(),g=ee(n);f({});const S=c?g-l:l-g;return e==null||e(S),c&&g{let l;const g=()=>O.cancel(l),S=()=>{l=O(()=>{d()&&S()})};return S(),g},[n,c]),r.useEffect(()=>{f({})},[]);const p=(l,g)=>s?Q(l,Object.assign(Object.assign({},g),{format:o}),c):"-",u=l=>V(l,{title:void 0});return r.createElement(y,Object.assign({},i,{value:n,valueRender:u,formatter:p}))},te=t=>r.createElement(E,Object.assign({},t,{type:"countdown"})),ne=r.memo(te);y.Timer=E;y.Countdown=ne;export{y as S}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/index-rsTaKYdt.js b/shopops-admin/src/main/resources/static/admin/assets/index-rsTaKYdt.js new file mode 100644 index 0000000..33e12ac --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/index-rsTaKYdt.js @@ -0,0 +1 @@ +import{a as u,r,K as V,M as w,W as Se,g as ye,E as ve,G as xe,J as l,H as Ce,X as be,Y as Ee,Z as ze,$ as Pe,N as Y,a0 as Ne,a1 as Z,f as Oe,a2 as Be,a3 as Ie}from"./styles-CdbHnvft.js";const F=u.createContext({});F.Consumer;var Q=function(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(i[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a{var{prefixCls:e,className:i,avatar:n,title:a,description:s}=t,p=Q(t,["prefixCls","className","avatar","title","description"]);const{getPrefixCls:v}=r.useContext(V),c=v("list",e),h=w(`${c}-item-meta`,i),C=u.createElement("div",{className:`${c}-item-meta-content`},a&&u.createElement("h4",{className:`${c}-item-meta-title`},a),s&&u.createElement("div",{className:`${c}-item-meta-description`},s));return u.createElement("div",Object.assign({},p,{className:h}),n&&u.createElement("div",{className:`${c}-item-meta-avatar`},n),(a||s)&&C)},Me=u.forwardRef((t,e)=>{const{prefixCls:i,children:n,actions:a,extra:s,styles:p,className:v,classNames:c,colStyle:h}=t,C=Q(t,["prefixCls","children","actions","extra","styles","className","classNames","colStyle"]),{grid:P,itemLayout:d}=r.useContext(F),{getPrefixCls:N,list:$}=r.useContext(V),b=f=>{var m,E;return w((E=(m=$==null?void 0:$.item)===null||m===void 0?void 0:m.classNames)===null||E===void 0?void 0:E[f],c==null?void 0:c[f])},O=f=>{var m,E;return Object.assign(Object.assign({},(E=(m=$==null?void 0:$.item)===null||m===void 0?void 0:m.styles)===null||E===void 0?void 0:E[f]),p==null?void 0:p[f])},j=()=>{let f=!1;return r.Children.forEach(n,m=>{typeof m=="string"&&(f=!0)}),f&&r.Children.count(n)>1},B=()=>d==="vertical"?!!s:!j(),y=N("list",i),I=a&&a.length>0&&u.createElement("ul",{className:w(`${y}-item-action`,b("actions")),key:"actions",style:O("actions")},a.map((f,m)=>u.createElement("li",{key:`${y}-item-action-${m}`},f,m!==a.length-1&&u.createElement("em",{className:`${y}-item-action-split`})))),H=P?"div":"li",L=u.createElement(H,Object.assign({},C,P?{}:{ref:e},{className:w(`${y}-item`,{[`${y}-item-no-flex`]:!B()},v)}),d==="vertical"&&s?[u.createElement("div",{className:`${y}-item-main`,key:"content"},n,I),u.createElement("div",{className:w(`${y}-item-extra`,b("extra")),key:"extra",style:O("extra")},s)]:[n,I,Se(s,{key:"extra"})]);return P?u.createElement(ye,{ref:e,flex:1,style:h},L):L}),U=Me;U.Meta=Le;const we=t=>{const{listBorderedCls:e,componentCls:i,paddingLG:n,margin:a,itemPaddingSM:s,itemPaddingLG:p,marginLG:v,borderRadiusLG:c}=t,h=l(t.calc(c).sub(t.lineWidth).equal());return{[e]:{border:`${l(t.lineWidth)} ${t.lineType} ${t.colorBorder}`,borderRadius:c,[`${i}-header`]:{borderRadius:`${h} ${h} 0 0`},[`${i}-footer`]:{borderRadius:`0 0 ${h} ${h}`},[`${i}-header,${i}-footer,${i}-item`]:{paddingInline:n},[`${i}-pagination`]:{margin:`${l(a)} ${l(v)}`}},[`${e}${i}-sm`]:{[`${i}-item,${i}-header,${i}-footer`]:{padding:s}},[`${e}${i}-lg`]:{[`${i}-item,${i}-header,${i}-footer`]:{padding:p}}}},je=t=>{const{componentCls:e,screenSM:i,screenMD:n,marginLG:a,marginSM:s,margin:p}=t;return{[`@media screen and (max-width:${n}px)`]:{[e]:{[`${e}-item`]:{[`${e}-item-action`]:{marginInlineStart:a}}},[`${e}-vertical`]:{[`${e}-item`]:{[`${e}-item-extra`]:{marginInlineStart:a}}}},[`@media screen and (max-width: ${i}px)`]:{[e]:{[`${e}-item`]:{flexWrap:"wrap",[`${e}-action`]:{marginInlineStart:s}}},[`${e}-vertical`]:{[`${e}-item`]:{flexWrap:"wrap-reverse",[`${e}-item-main`]:{minWidth:t.contentWidth},[`${e}-item-extra`]:{margin:`auto auto ${l(p)}`}}}}}},He=t=>{const{componentCls:e,antCls:i,controlHeight:n,minHeight:a,paddingSM:s,marginLG:p,padding:v,itemPadding:c,colorPrimary:h,itemPaddingSM:C,itemPaddingLG:P,paddingXS:d,margin:N,colorText:$,colorTextDescription:b,motionDurationSlow:O,lineWidth:j,headerBg:B,footerBg:y,emptyTextPadding:I,metaMarginBottom:H,avatarMarginRight:L,titleMarginBottom:f,descriptionFontSize:m}=t;return{[e]:Object.assign(Object.assign({},Ce(t)),{position:"relative","--rc-virtual-list-scrollbar-bg":t.colorSplit,"*":{outline:"none"},[`${e}-header`]:{background:B},[`${e}-footer`]:{background:y},[`${e}-header, ${e}-footer`]:{paddingBlock:s},[`${e}-pagination`]:{marginBlockStart:p,[`${i}-pagination-options`]:{textAlign:"start"}},[`${e}-spin`]:{minHeight:a,textAlign:"center"},[`${e}-items`]:{margin:0,padding:0,listStyle:"none"},[`${e}-item`]:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:c,color:$,[`${e}-item-meta`]:{display:"flex",flex:1,alignItems:"flex-start",maxWidth:"100%",[`${e}-item-meta-avatar`]:{marginInlineEnd:L},[`${e}-item-meta-content`]:{flex:"1 0",width:0,color:$},[`${e}-item-meta-title`]:{margin:`0 0 ${l(t.marginXXS)} 0`,color:$,fontSize:t.fontSize,lineHeight:t.lineHeight,"> a":{color:$,transition:`all ${O}`,"&:hover":{color:h}}},[`${e}-item-meta-description`]:{color:b,fontSize:m,lineHeight:t.lineHeight}},[`${e}-item-action`]:{flex:"0 0 auto",marginInlineStart:t.marginXXL,padding:0,fontSize:0,listStyle:"none","& > li":{position:"relative",display:"inline-block",padding:`0 ${l(d)}`,color:b,fontSize:t.fontSize,lineHeight:t.lineHeight,textAlign:"center","&:first-child":{paddingInlineStart:0}},[`${e}-item-action-split`]:{position:"absolute",insetBlockStart:"50%",insetInlineEnd:0,width:j,height:t.calc(t.fontHeight).sub(t.calc(t.marginXXS).mul(2)).equal(),transform:"translateY(-50%)",backgroundColor:t.colorSplit}}},[`${e}-empty`]:{padding:`${l(v)} 0`,color:b,fontSize:t.fontSizeSM,textAlign:"center"},[`${e}-empty-text`]:{padding:I,color:t.colorTextDisabled,fontSize:t.fontSize,textAlign:"center"},[`${e}-item-no-flex`]:{display:"block"}}),[`${e}-grid ${i}-col > ${e}-item`]:{display:"block",maxWidth:"100%",marginBlockEnd:N,paddingBlock:0,borderBlockEnd:"none"},[`${e}-vertical ${e}-item`]:{alignItems:"initial",[`${e}-item-main`]:{display:"block",flex:1},[`${e}-item-extra`]:{marginInlineStart:p},[`${e}-item-meta`]:{marginBlockEnd:H,[`${e}-item-meta-title`]:{marginBlockStart:0,marginBlockEnd:f,color:$,fontSize:t.fontSizeLG,lineHeight:t.lineHeightLG}},[`${e}-item-action`]:{marginBlockStart:v,marginInlineStart:"auto","> li":{padding:`0 ${l(v)}`,"&:first-child":{paddingInlineStart:0}}}},[`${e}-split ${e}-item`]:{borderBlockEnd:`${l(t.lineWidth)} ${t.lineType} ${t.colorSplit}`,"&:last-child":{borderBlockEnd:"none"}},[`${e}-split ${e}-header`]:{borderBlockEnd:`${l(t.lineWidth)} ${t.lineType} ${t.colorSplit}`},[`${e}-split${e}-empty ${e}-footer`]:{borderTop:`${l(t.lineWidth)} ${t.lineType} ${t.colorSplit}`},[`${e}-loading ${e}-spin-nested-loading`]:{minHeight:n},[`${e}-split${e}-something-after-last-item ${i}-spin-container > ${e}-items > ${e}-item:last-child`]:{borderBlockEnd:`${l(t.lineWidth)} ${t.lineType} ${t.colorSplit}`},[`${e}-lg ${e}-item`]:{padding:P},[`${e}-sm ${e}-item`]:{padding:C},[`${e}:not(${e}-vertical)`]:{[`${e}-item-no-flex`]:{[`${e}-item-action`]:{float:"right"}}}}},We=t=>({contentWidth:220,itemPadding:`${l(t.paddingContentVertical)} 0`,itemPaddingSM:`${l(t.paddingContentVerticalSM)} ${l(t.paddingContentHorizontal)}`,itemPaddingLG:`${l(t.paddingContentVerticalLG)} ${l(t.paddingContentHorizontalLG)}`,headerBg:"transparent",footerBg:"transparent",emptyTextPadding:t.padding,metaMarginBottom:t.padding,avatarMarginRight:t.padding,titleMarginBottom:t.paddingSM,descriptionFontSize:t.fontSize}),Re=ve("List",t=>{const e=xe(t,{listBorderedCls:`${t.componentCls}-bordered`,minHeight:t.controlHeightLG});return[He(e),we(e),je(e)]},We);var Te=function(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(i[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a(S,z)=>{var D;m(S),k(z),i&&((D=i==null?void 0:i[o])===null||D===void 0||D.call(i,S,z))},re=J("onChange"),oe=J("onShowSizeChange"),le=(o,S)=>{if(!y)return null;let z;return typeof B=="function"?z=B(o):B?z=o[B]:z=o.key,z||(z=`list-item-${S}`),r.createElement(r.Fragment,{key:z},y(o,S))},se=!!(P||i||O),g=ee("list",n),[ce,de,me]=Re(g);let M=j;typeof M=="boolean"&&(M={spinning:M});const _=!!(M!=null&&M.spinning),ge=Ee($);let W="";switch(ge){case"large":W="lg";break;case"small":W="sm";break}const pe=w(g,{[`${g}-vertical`]:C==="vertical",[`${g}-${W}`]:W,[`${g}-split`]:s,[`${g}-bordered`]:a,[`${g}-loading`]:_,[`${g}-grid`]:!!d,[`${g}-something-after-last-item`]:se,[`${g}-rtl`]:te==="rtl"},ie,p,v,de,me),x=ze(ae,{total:N.length,current:f,pageSize:E},i||{}),$e=Math.ceil(x.total/x.pageSize);x.current=Math.min(x.current,$e);const K=i&&r.createElement("div",{className:w(`${g}-pagination`)},r.createElement(Pe,Object.assign({align:"end"},x,{onChange:re,onShowSizeChange:oe})));let A=Y(N);i&&N.length>(x.current-1)*x.pageSize&&(A=Y(N).splice((x.current-1)*x.pageSize,x.pageSize));const fe=Object.keys(d||{}).some(o=>["xs","sm","md","lg","xl","xxl"].includes(o)),q=Ne(fe),R=r.useMemo(()=>{for(let o=0;o{if(!d)return;const o=R&&d[R]?d[R]:d.column;if(o)return{width:`${100/o}%`,maxWidth:`${100/o}%`}},[JSON.stringify(d),R]);let X=_&&r.createElement("div",{style:{minHeight:53}});if(A.length>0){const o=A.map(le);X=d?r.createElement(Oe,{gutter:d.gutter},r.Children.map(o,S=>r.createElement("div",{key:S==null?void 0:S.key,style:ue},S))):r.createElement("ul",{className:`${g}-items`},o)}else!h&&!_&&(X=r.createElement("div",{className:`${g}-empty-text`},(I==null?void 0:I.emptyText)||(G==null?void 0:G("List"))||r.createElement(Be,{componentName:"List"})));const T=x.position,he=r.useMemo(()=>({grid:d,itemLayout:C}),[JSON.stringify(d),C]);return ce(r.createElement(F.Provider,{value:he},r.createElement("div",Object.assign({ref:e,style:Object.assign(Object.assign({},ne),c),className:pe},H),(T==="top"||T==="both")&&K,b&&r.createElement("div",{className:`${g}-header`},b),r.createElement(Ie,Object.assign({},M),X,h),O&&r.createElement("div",{className:`${g}-footer`},O),P||(T==="bottom"||T==="both")&&K)))}const _e=r.forwardRef(Ge),Ae=_e;Ae.Item=U;export{Ae as L}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/prompts-B1OxfpWi.js b/shopops-admin/src/main/resources/static/admin/assets/prompts-B1OxfpWi.js new file mode 100644 index 0000000..61dc57f --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/prompts-B1OxfpWi.js @@ -0,0 +1 @@ +import{L as _,T as fe,R as ye,j as e,a as ge,C as ve,z as Ie,b as we,r as n,c as M,s as m,A as be,S as A,d as u,e as Se,f as V,g as C,h as P,i as ke,F as G,B as h,k as Te,l as Re,q as Z,o as E,n as Ne,D as w,p as B}from"./styles-CdbHnvft.js";import{F as c,a as Y,C as $e}from"./Table-sHSMbx0B.js";import{R as Fe}from"./CheckCircleOutlined-xsXj4p7f.js";import{R as Ae}from"./SaveOutlined-DonLai3u.js";import{R as Ve}from"./PlayCircleOutlined-g8qloYTv.js";import{R as Pe}from"./DashboardOutlined-DhWgz-bD.js";import{R as Ee}from"./AuditOutlined-D7IGVWIo.js";import{R as Le}from"./FileTextOutlined-DR_VCDvU.js";const{Header:Ue,Content:Me}=_,{Paragraph:Be,Text:Oe,Title:De}=fe,W=[{code:"daily_review.plan",name:"日报任务规划",taskType:"daily_review"},{code:"daily_review.report",name:"日报报告生成",taskType:"daily_review"},{code:"daily_review.summary",name:"经营摘要",taskType:"daily_review"}];function _e(){const o=we(),[i]=c.useForm(),[p]=c.useForm(),[I]=c.useForm(),[d,b]=n.useState({tenantId:o.tenantId||"1",shopId:o.shopId||"1",userId:o.userId||"1",roles:o.roles||"ADMIN,OPERATOR"}),[L,ee]=n.useState([]),[z,te]=n.useState([]),[l,U]=n.useState(null),[y,se]=n.useState(null),[ae,re]=n.useState(0),[j,ne]=n.useState(1),[x,oe]=n.useState(20),[ie,q]=n.useState(!1),[J,S]=n.useState(!1),[le,Q]=n.useState(!1),[de,H]=n.useState(!1),[ce,k]=n.useState("Prompt 控制台已就绪。"),me=n.useMemo(()=>L.filter(t=>t.status==="ACTIVE").length,[L]),T=n.useCallback((t=j,s=x)=>{const r=i.getFieldsValue(),a=new URLSearchParams;return a.set("pageNum",String(t)),a.set("pageSize",String(s)),D(a,"promptCode",r.promptCode),D(a,"taskType",r.taskType),D(a,"status",r.status),a},[i,j,x]),R=n.useCallback((t,s)=>{const r=new URLSearchParams(t);s!=null&&s.promptCode&&r.set("promptCode",s.promptCode),s!=null&&s.version&&r.set("version",s.version),window.history.replaceState(null,"",`${window.location.pathname}?${r.toString()}`)},[]),K=n.useCallback(async t=>{H(!0);try{const s=new URLSearchParams;s.set("pageNum","1"),s.set("pageSize","8"),t!=null&&t.promptCode&&s.set("promptCode",t.promptCode),t!=null&&t.version&&s.set("promptVersion",t.version);const r=await M(`/api/admin/model-gateway/call-logs?${s}`,d);te(r.list||[])}catch(s){m.error(v(s))}finally{H(!1)}},[d]),N=n.useCallback(t=>{p.setFieldsValue({promptCode:t.promptCode,promptName:t.promptName,version:t.version,taskType:t.taskType,templateContent:t.templateContent,active:t.status==="ACTIVE"}),I.setFieldsValue({prompt:"关注退款风险和差评原因",variables:JSON.stringify({shopName:"杭州一店",date:"2026-07-20"},null,2)})},[I,p]),g=n.useCallback(async(t,s)=>{if(t)try{const r=s?`?version=${encodeURIComponent(s)}`:"",a=await M(`/api/admin/prompts/${encodeURIComponent(t)}${r}`,d);U(a),N(a),k(`已选中 ${a.promptCode}@${a.version}。`),R(T(),a),K(a)}catch(r){m.error(v(r))}},[T,d,N,K,R]),f=n.useCallback(async(t=j,s=x)=>{var a;q(!0);const r=T(t,s);try{const $=await M(`/api/admin/prompts?${r}`,d),F=$.list||[];ee(F),re($.total||0),ne(t),oe(s),R(r,l),!l&&((a=F[0])!=null&&a.promptCode)&&g(F[0].promptCode,F[0].version)}catch($){m.error(v($))}finally{q(!1)}},[T,d,g,j,x,l,R]),pe=n.useCallback(()=>{const t=new URLSearchParams(window.location.search),s=t.get("promptCode")||"",r=t.get("version")||"";i.setFieldsValue({promptCode:s,taskType:t.get("taskType")||void 0,status:t.get("status")||void 0}),s&&g(s,r)},[i,g]);n.useEffect(()=>{const t=W[1];p.setFieldsValue({promptCode:t.code,promptName:t.name,version:"v1",taskType:t.taskType,templateContent:"请基于以下输入生成中文经营复盘:{{prompt}}",active:!1}),I.setFieldsValue({prompt:"关注退款风险和差评原因",variables:JSON.stringify({shopName:"杭州一店",date:"2026-07-20"},null,2)}),pe(),f(1,x)},[]);async function ue(t){const s=String(t.promptCode||"").trim();if(!s){m.error("请填写 Prompt Code");return}S(!0);try{const r={promptName:t.promptName,taskType:t.taskType,templateContent:t.templateContent,version:t.version,active:!!t.active},a=await B(`/api/admin/prompts/${encodeURIComponent(s)}/versions`,r,d);U(a),N(a),k(`已创建版本 ${a.promptCode}@${a.version}。`),m.success("版本已保存"),await f(1,x)}catch(r){m.error(v(r))}finally{S(!1)}}async function xe(){const t=p.getFieldsValue(),s=String(t.promptCode||"").trim(),r=String(t.version||"").trim();if(!s||!r){m.error("请先选择或填写版本");return}S(!0);try{const a=await B(`/api/admin/prompts/${encodeURIComponent(s)}/enable`,{version:r},d);U(a),N(a),k(`已启用 ${a.promptCode}@${a.version}。`),m.success("版本已启用"),await f(j,x)}catch(a){m.error(v(a))}finally{S(!1)}}async function he(){const t=p.getFieldsValue(),s=I.getFieldsValue(),r=String(t.promptCode||"").trim();if(!r){m.error("请先选择 Prompt");return}Q(!0);try{const a=await B(`/api/admin/prompts/${encodeURIComponent(r)}/render-test`,{version:t.version,prompt:s.prompt,variables:ze(s.variables||"{}")},d);se(a),k(`渲染完成:${a.promptCode}@${a.version}。`),m.success("渲染测试完成")}catch(a){m.error(v(a))}finally{Q(!1)}}function Ce(t){i.setFieldsValue({promptCode:t.code,taskType:t.taskType}),p.setFieldsValue({promptCode:t.code,promptName:t.name,taskType:t.taskType}),g(t.code)}function je(){i.resetFields(),f(1,x)}return e.jsxs(_,{className:"app-shell","data-page-markers":"applyInitialQuery syncUrl navigator.clipboard withBusy",children:[e.jsx(be,{active:"prompts"}),e.jsxs(_,{children:[e.jsxs(Ue,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(De,{level:3,children:"提示词与模型网关"}),e.jsx(Oe,{type:"secondary",children:"管理 Agent Planner / Report Prompt 版本,验证渲染结果并查看模型调用日志"})]}),e.jsxs(A,{wrap:!0,children:[e.jsx(u,{addonBefore:"Tenant",value:d.tenantId,onChange:t=>b({...d,tenantId:t.target.value})}),e.jsx(u,{addonBefore:"Shop",value:d.shopId,onChange:t=>b({...d,shopId:t.target.value})}),e.jsx(u,{addonBefore:"User",value:d.userId,onChange:t=>b({...d,userId:t.target.value})}),e.jsx(u,{addonBefore:"Roles",value:d.roles,onChange:t=>b({...d,roles:t.target.value})})]})]}),e.jsxs(Me,{className:"content",children:[e.jsx(Se,{type:"info",showIcon:!0,message:ce}),e.jsxs(V,{gutter:[16,16],children:[e.jsx(C,{xs:24,xl:14,children:e.jsxs(P,{title:"模板版本",className:"section-card",extra:e.jsxs(Z,{color:"blue",children:["ACTIVE ",E(me)]}),children:[e.jsxs(c,{form:i,layout:"vertical",onFinish:()=>f(1,x),children:[e.jsxs(V,{gutter:12,children:[e.jsx(C,{xs:24,md:8,children:e.jsx(c.Item,{label:"Prompt Code",name:"promptCode",children:e.jsx(u,{placeholder:"daily_review.report"})})}),e.jsx(C,{xs:24,md:8,children:e.jsx(c.Item,{label:"任务类型",name:"taskType",children:e.jsx(u,{placeholder:"daily_review"})})}),e.jsx(C,{xs:24,md:8,children:e.jsx(c.Item,{label:"状态",name:"status",children:e.jsx(ke,{allowClear:!0,options:["ACTIVE","INACTIVE"].map(t=>({value:t,label:t}))})})})]}),e.jsxs(G,{justify:"space-between",wrap:"wrap",gap:12,children:[e.jsxs(A,{wrap:!0,children:[e.jsx(h,{id:"filterSubmit",type:"primary",htmlType:"submit",icon:e.jsx(Te,{}),children:"查询"}),e.jsx(h,{onClick:je,children:"重置"}),W.map(t=>e.jsx(h,{"data-prompt-quick":t.code,onClick:()=>Ce(t),children:t.name},t.code))]}),e.jsx(h,{icon:e.jsx(Re,{}),onClick:()=>f(j,x),children:"刷新"})]})]}),e.jsx(Y,{className:"spaced-table",rowKey:t=>`${t.promptCode}-${t.version}`,loading:ie,dataSource:L,pagination:{current:j,pageSize:x,total:ae,showSizeChanger:!0,onChange:f},onRow:t=>({onClick:()=>g(t.promptCode||"",t.version)}),rowClassName:t=>t.promptCode===(l==null?void 0:l.promptCode)&&t.version===(l==null?void 0:l.version)?"selected-row clickable":"clickable",columns:[{title:"Prompt Code",dataIndex:"promptCode"},{title:"名称",dataIndex:"promptName"},{title:"版本",dataIndex:"version",width:90},{title:"任务类型",dataIndex:"taskType",width:140},{title:"状态",dataIndex:"status",width:110,render:O},{title:"更新时间",dataIndex:"updatedAt",width:170,render:X}]})]})}),e.jsx(C,{xs:24,xl:10,children:e.jsx(P,{title:"版本编辑",className:"section-card",children:e.jsxs(c,{form:p,layout:"vertical",onFinish:ue,children:[e.jsxs(V,{gutter:12,children:[e.jsx(C,{xs:24,md:12,children:e.jsx(c.Item,{label:"Prompt Code",name:"promptCode",rules:[{required:!0}],children:e.jsx(u,{})})}),e.jsx(C,{xs:24,md:12,children:e.jsx(c.Item,{label:"版本",name:"version",rules:[{required:!0}],children:e.jsx(u,{placeholder:"v1"})})})]}),e.jsx(c.Item,{label:"名称",name:"promptName",rules:[{required:!0}],children:e.jsx(u,{})}),e.jsx(c.Item,{label:"任务类型",name:"taskType",children:e.jsx(u,{})}),e.jsx(c.Item,{label:"模板内容",name:"templateContent",rules:[{required:!0}],children:e.jsx(u.TextArea,{rows:8,spellCheck:!1})}),e.jsxs(G,{justify:"space-between",wrap:"wrap",gap:12,children:[e.jsx(c.Item,{name:"active",valuePropName:"checked",className:"inline-form-item",children:e.jsx($e,{children:"创建后立即启用"})}),e.jsxs(A,{wrap:!0,children:[e.jsx(h,{icon:e.jsx(Fe,{}),loading:J,onClick:xe,children:"启用"}),e.jsx(h,{type:"primary",htmlType:"submit",icon:e.jsx(Ae,{}),loading:J,children:"创建版本"})]})]})]})})})]}),e.jsxs(V,{gutter:[16,16],children:[e.jsx(C,{xs:24,xl:12,children:e.jsxs(P,{title:"渲染测试",className:"section-card",extra:e.jsx(h,{id:"copyRendered",icon:e.jsx(Ne,{}),onClick:()=>qe((y==null?void 0:y.renderedPrompt)||""),children:"复制结果"}),children:[e.jsxs(c,{form:I,layout:"vertical",children:[e.jsx(c.Item,{label:"业务输入 prompt",name:"prompt",children:e.jsx(u.TextArea,{rows:4,spellCheck:!1})}),e.jsx(c.Item,{label:"变量 JSON",name:"variables",children:e.jsx(u.TextArea,{rows:4,spellCheck:!1})}),e.jsx(h,{id:"renderTest",type:"primary",icon:e.jsx(Ve,{}),loading:le,onClick:he,children:"渲染测试"})]}),e.jsx(Be,{className:"markdown-preview rendered-preview",children:(y==null?void 0:y.renderedPrompt)||"等待渲染结果。"})]})}),e.jsx(C,{xs:24,xl:12,children:e.jsxs(P,{title:"模型调用日志",className:"section-card",loading:de,extra:e.jsx(h,{href:"/admin/reports.html",icon:e.jsx(Le,{}),children:"报告"}),children:[e.jsxs(w,{size:"small",bordered:!0,column:2,id:"selectedPromptSummary",children:[e.jsx(w.Item,{label:"Prompt",children:(l==null?void 0:l.promptCode)||"-"}),e.jsx(w.Item,{label:"版本",children:(l==null?void 0:l.version)||"-"}),e.jsx(w.Item,{label:"状态",children:O(l==null?void 0:l.status)}),e.jsx(w.Item,{label:"调用数",children:E(z.length)})]}),e.jsx(Y,{className:"spaced-table",rowKey:t=>String(t.callId||`${t.traceId}-${t.createdAt}`),pagination:!1,dataSource:z,columns:[{title:"Call ID",dataIndex:"callId",width:90},{title:"Provider",dataIndex:"providerCode",width:110},{title:"模型",dataIndex:"modelName",width:130},{title:"状态",dataIndex:"status",width:110,render:O},{title:"Token",dataIndex:"totalTokens",width:90,render:E},{title:"耗时",dataIndex:"latencyMs",width:90,render:t=>`${E(t)} ms`},{title:"时间",dataIndex:"createdAt",width:170,render:X}]}),e.jsxs(A,{wrap:!0,children:[e.jsx(h,{href:"/admin/dashboard.html",icon:e.jsx(Pe,{}),children:"Dashboard"}),e.jsx(h,{href:"/admin/audit.html",icon:e.jsx(Ee,{}),children:"审计中心"})]})]})})]})]})]})]})}function O(o){const i=String(o||"-"),p=i==="ACTIVE"||i==="SUCCESS"?"green":i==="FAILED"?"red":"default";return e.jsx(Z,{color:p,children:i})}function D(o,i,p){p&&p.trim()&&o.set(i,p.trim())}function ze(o){return o.trim()?JSON.parse(o):{}}function X(o){return o?String(o).replace("T"," ").slice(0,19):"-"}async function qe(o){try{await navigator.clipboard.writeText(o),m.success("已复制")}catch{const i=document.createElement("textarea");i.dataset.copyMode="fallbackCopy",i.value=o,document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),m.success("已复制")}}function v(o){return o instanceof Error?o.message:String(o)}ye.createRoot(document.getElementById("root")).render(e.jsx(ge.StrictMode,{children:e.jsx(ve,{locale:Ie,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx(_e,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/reports-CqVXp6N-.js b/shopops-admin/src/main/resources/static/admin/assets/reports-CqVXp6N-.js new file mode 100644 index 0000000..e2afaf0 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/reports-CqVXp6N-.js @@ -0,0 +1 @@ +import{r as n,j as e,L as B,T as se,R as re,a as ae,C as ne,z as ie,b as le,w as oe,c as K,s as P,A as ce,S as v,d as f,f as D,g as m,e as de,h as A,i as Q,F as ue,B as j,k as me,l as he,x as xe,D as p,n as pe,q as je,y as fe,o as E,v as Ie}from"./styles-CdbHnvft.js";import{i as ge}from"./index-ClPwX7rX.js";import{F as I,a as ye}from"./Table-sHSMbx0B.js";import{S as L}from"./index-emnzbHoJ.js";import{R as Se}from"./FileTextOutlined-DR_VCDvU.js";import{R as ve}from"./ApiOutlined-CqRwPpT6.js";import{R as Ce}from"./ToolOutlined-MDl_KHZ_.js";function be({success:t,failed:r,other:a}){const c=n.useRef(null);return n.useEffect(()=>{if(!c.current)return;const l=ge(c.current);l.setOption({tooltip:{trigger:"item"},legend:{bottom:0},series:[{type:"pie",radius:["48%","70%"],center:["50%","44%"],avoidLabelOverlap:!0,data:[{name:"成功",value:t,itemStyle:{color:"#52c41a"}},{name:"失败",value:r,itemStyle:{color:"#ff4d4f"}},{name:"其他",value:a,itemStyle:{color:"#1677ff"}}]}]});const h=()=>l.resize();return window.addEventListener("resize",h),()=>{window.removeEventListener("resize",h),l.dispose()}},[t,r,a]),e.jsx("div",{className:"report-status-chart",ref:c})}const{Header:ke,Content:we}=B,{Paragraph:Te,Text:Ne,Title:Re}=se;function $e(){const t=le(),[r]=I.useForm(),[a,c]=n.useState({tenantId:t.tenantId||"1",shopId:t.shopId||"1",userId:t.userId||"1",roles:t.roles||"ADMIN,OPERATOR"}),[l,h]=n.useState(1),[x,C]=n.useState(20),[w,U]=n.useState(0),[T,O]=n.useState([]),[y,V]=n.useState(""),[d,X]=n.useState(null),[_,G]=n.useState(!1),[Z,H]=n.useState(!1),[ee,N]=n.useState("报告中心已就绪。"),b=n.useMemo(()=>oe(d==null?void 0:d.evidence),[d]),R=n.useMemo(()=>De(T,w),[T,w]),q=n.useCallback((s=l,i=x)=>{const u=r.getFieldsValue(),o=new URLSearchParams;return o.set("pageNum",String(s)),o.set("pageSize",String(i)),g(o,"status",u.status),g(o,"reportType",u.reportType),g(o,"reportNo",u.reportNo),g(o,"taskId",u.taskId),g(o,"traceId",u.traceId),g(o,"createdBy",u.createdBy),g(o,"reportId",y),o},[r,l,x,y]),J=n.useCallback(s=>{window.history.replaceState(null,"",`${window.location.pathname}?${s.toString()}`)},[]),$=n.useCallback(async s=>{H(!0);try{const i=await K(`/api/reports/${encodeURIComponent(s)}`,a);X(i),V(String(i.reportId||s)),N(`已加载报告 ${i.reportNo||i.reportId}`)}catch(i){P.error(M(i)),N(`报告详情加载失败:${M(i)}`)}finally{H(!1)}},[a]),k=n.useCallback(async(s=l,i=x)=>{var o;G(!0);const u=q(s,i);J(u);try{const S=await K(`/api/reports?${u.toString()}`,a),F=S.list||[];O(F),U(Number(S.total||0)),h(Number(S.pageNum||s)),C(Number(S.pageSize||i)),N("报告列表已刷新。"),y?$(y):(o=F[0])!=null&&o.reportId&&$(F[0].reportId)}catch(S){O([]),U(0),N(`报告加载失败:${M(S)}`)}finally{G(!1)}},[q,a,$,l,x,y,J]);n.useEffect(()=>{const s=new URLSearchParams(window.location.search);r.setFieldsValue({status:s.get("status")||void 0,reportType:s.get("reportType")||void 0,reportNo:s.get("reportNo")||void 0,taskId:s.get("taskId")||void 0,traceId:s.get("traceId")||void 0,createdBy:s.get("createdBy")||void 0});const i=s.get("reportId")||"",u=W(s.get("pageNum"),1),o=W(s.get("pageSize"),20);V(i),h(u),C(o),k(u,o)},[]);function te(){h(1),k(1,x)}function z(s){s==="clear"?r.resetFields():s==="success"?r.setFieldsValue({status:"SUCCESS",reportType:void 0}):s==="daily"&&r.setFieldsValue({reportType:"daily_review",status:void 0}),h(1),k(1,x)}return e.jsxs(B,{className:"app-shell",children:[e.jsx(ce,{active:"reports"}),e.jsxs(B,{children:[e.jsxs(ke,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Re,{level:3,children:"报告中心"}),e.jsx(Ne,{type:"secondary",children:"查看 Agent 产出的运营日报、证据快照、数据来源和配置快照。"})]}),e.jsxs(v,{wrap:!0,children:[e.jsx(f,{addonBefore:"租户",value:a.tenantId,onChange:s=>c({...a,tenantId:s.target.value})}),e.jsx(f,{addonBefore:"店铺",value:a.shopId,onChange:s=>c({...a,shopId:s.target.value})}),e.jsx(f,{addonBefore:"用户",value:a.userId,onChange:s=>c({...a,userId:s.target.value})}),e.jsx(f,{addonBefore:"角色",value:a.roles,onChange:s=>c({...a,roles:s.target.value})})]})]}),e.jsx(we,{className:"content",children:e.jsxs(D,{gutter:[16,16],children:[e.jsx(m,{xs:24,xl:15,children:e.jsxs(v,{direction:"vertical",className:"full",size:16,children:[e.jsx(de,{showIcon:!0,type:"info",message:ee}),e.jsx(A,{title:"报告筛选",extra:e.jsx(j,{icon:e.jsx(he,{}),loading:_,onClick:()=>k(),children:"刷新"}),children:e.jsxs(I,{form:r,layout:"vertical",onFinish:te,children:[e.jsxs(D,{gutter:10,children:[e.jsx(m,{xs:24,md:8,children:e.jsx(I.Item,{name:"status",label:"状态",children:e.jsx(Q,{allowClear:!0,options:[{value:"SUCCESS"},{value:"FAILED"},{value:"DEGRADED"}]})})}),e.jsx(m,{xs:24,md:8,children:e.jsx(I.Item,{name:"reportType",label:"报告类型",children:e.jsx(Q,{allowClear:!0,options:[{value:"daily_review"},{value:"comment_risk"},{value:"product_optimization"},{value:"ad_anomaly"}]})})}),e.jsx(m,{xs:24,md:8,children:e.jsx(I.Item,{name:"reportNo",label:"报告编号",children:e.jsx(f,{placeholder:"REPORT-"})})}),e.jsx(m,{xs:24,md:8,children:e.jsx(I.Item,{name:"taskId",label:"任务 ID",children:e.jsx(f,{})})}),e.jsx(m,{xs:24,md:8,children:e.jsx(I.Item,{name:"traceId",label:"Trace ID",children:e.jsx(f,{})})}),e.jsx(m,{xs:24,md:8,children:e.jsx(I.Item,{name:"createdBy",label:"创建人",children:e.jsx(f,{})})})]}),e.jsxs(ue,{justify:"space-between",gap:8,wrap:"wrap",children:[e.jsxs(v,{wrap:!0,children:[e.jsx(j,{"data-quick-filter":"daily",onClick:()=>z("daily"),children:"日报"}),e.jsx(j,{onClick:()=>z("success"),children:"成功报告"}),e.jsx(j,{onClick:()=>z("clear"),children:"清空"})]}),e.jsx(j,{id:"reportFilterSubmit",type:"primary",htmlType:"submit",icon:e.jsx(me,{}),children:"查询"})]})]})}),e.jsx(A,{title:"报告列表",children:e.jsx(ye,{rowKey:s=>String(s.reportId),loading:_,dataSource:T,pagination:{current:l,pageSize:x,total:w,showSizeChanger:!0,onChange:(s,i)=>k(s,i)},onRow:s=>({onClick:()=>s.reportId&&$(s.reportId)}),rowClassName:s=>String(s.reportId)===String(y)?"selected-row":"clickable",columns:[{title:"报告编号",dataIndex:"reportNo",render:(s,i)=>s||i.reportId},{title:"标题",dataIndex:"title",ellipsis:!0},{title:"类型",dataIndex:"reportType",width:150},{title:"状态",dataIndex:"status",width:110,render:s=>e.jsx(Y,{status:s})},{title:"任务",dataIndex:"taskId",width:100},{title:"Trace",dataIndex:"traceId",ellipsis:!0},{title:"创建时间",dataIndex:"createdAt",width:180}]})})]})}),e.jsx(m,{xs:24,xl:9,children:e.jsxs(v,{direction:"vertical",className:"full",size:16,children:[e.jsxs(A,{title:"报告概览",children:[e.jsxs(D,{gutter:[12,12],children:[e.jsx(m,{span:8,children:e.jsx(L,{title:"总数",value:w})}),e.jsx(m,{span:8,children:e.jsx(L,{title:"本页",value:T.length})}),e.jsx(m,{span:8,children:e.jsx(L,{title:"成功",value:R.success})})]}),e.jsx(be,{success:R.success,failed:R.failed,other:R.other})]}),e.jsx(A,{title:"报告详情",loading:Z,extra:e.jsxs(v,{children:[e.jsx(j,{id:"openTask",href:d!=null&&d.taskId?`/admin/tasks.html?taskId=${d.taskId}`:"/admin/tasks.html",icon:e.jsx(Se,{}),children:"任务"}),e.jsx(j,{id:"openAudit",href:Le(d),icon:e.jsx(ve,{}),children:"审计"}),e.jsx(j,{id:"openToolLogs",href:Me(d),icon:e.jsx(Ce,{}),children:"工具"})]}),children:d?e.jsx(xe,{items:[{key:"preview",label:"报告预览",children:e.jsx(Te,{className:"markdown-preview",children:d.markdown||d.summary||"暂无 Markdown"})},{key:"evidence",label:"证据",children:e.jsxs(v,{direction:"vertical",className:"full",children:[e.jsx(p,{size:"small",column:1,bordered:!0,items:ze(d,b)}),e.jsx(Ae,{dataSources:b.dataSources}),e.jsx(Ee,{snapshot:b.shopConfig}),e.jsx(j,{id:"copyEvidence",icon:e.jsx(pe,{}),onClick:()=>Pe(JSON.stringify(b,null,2)),children:"复制证据"}),e.jsx("pre",{className:"json-box",children:JSON.stringify(b,null,2)})]})}]}):e.jsxs("div",{className:"empty-state",children:[e.jsx("strong",{children:"暂无报告"}),e.jsx("span",{children:"选择左侧报告,或从 Agent 工作台生成一份新的运营日报。"})]})})]})})]})})]})]})}function Ae({dataSources:t}){var l,h,x,C;if(!t)return null;const r=t.orderSummary||{},a=t.negativeComments||{},c=t.productCandidates||{};return e.jsxs(p,{title:"数据来源",size:"small",column:1,bordered:!0,children:[e.jsx(p.Item,{label:"订单 Connector",children:`${r.connectorCode||"-"} / GMV ${fe((l=r.metrics)==null?void 0:l.gmv)} / 订单 ${E((h=r.metrics)==null?void 0:h.orderCount)}`}),e.jsx(p.Item,{label:"评价 Connector",children:`${a.connectorCode||"-"} / 风险评价 ${E((x=a.metrics)==null?void 0:x.negativeCount)}`}),e.jsx(p.Item,{label:"商品 Connector",children:`${c.connectorCode||"-"} / 商品候选 ${E((C=c.metrics)==null?void 0:C.candidateCount)}`})]})}function Ee({snapshot:t}){return t?e.jsxs(p,{title:"店铺配置快照",size:"small",column:1,bordered:!0,children:[e.jsx(p.Item,{label:"退款率阈值",children:Ie(t.refundRateWarnThreshold)}),e.jsx(p.Item,{label:"差评阈值",children:E(t.negativeCommentWarnThreshold)}),e.jsx(p.Item,{label:"高风险工具审批",children:Be(t.agentToolApprovalEnabled)}),e.jsx(p.Item,{label:"模型策略",children:String(t.agentModelPolicy||"-")})]}):null}function ze(t,r){return[{key:"report",label:"报告",children:t.reportNo||t.reportId||"-"},{key:"status",label:"状态",children:e.jsx(Y,{status:t.status})},{key:"task",label:"任务",children:t.taskId||"-"},{key:"trace",label:"Trace",children:t.traceId||"-"},{key:"type",label:"类型",children:t.reportType||"-"},{key:"evidence",label:"证据",children:Fe(r)}]}function Fe(t){const r=[];return Array.isArray(t.toolCodes)&&r.push(`${t.toolCodes.length} 个工具`),Array.isArray(t.productIds)&&r.push(`${t.productIds.length} 个商品`),Array.isArray(t.riskCommentIds)&&r.push(`${t.riskCommentIds.length} 条风险评价`),r.join(" / ")||"可用"}function Y({status:t}){const r=String(t||"-").toUpperCase(),a=r==="SUCCESS"?"success":r==="FAILED"||r==="DEGRADED"?"error":r==="-"?"default":"processing";return e.jsx(je,{color:a,children:r})}function De(t,r){const a=t.filter(l=>l.status==="SUCCESS").length,c=t.filter(l=>l.status==="FAILED").length;return{success:a,failed:c,other:Math.max(r-a-c,0)}}function Le(t){return t!=null&&t.taskId?`/admin/audit.html?source=TASK&taskId=${t.taskId}`:t!=null&&t.traceId?`/admin/audit.html?traceId=${t.traceId}`:"/admin/audit.html"}function Me(t){return t!=null&&t.taskId?`/admin/tools.html?taskId=${t.taskId}`:t!=null&&t.traceId?`/admin/tools.html?traceId=${t.traceId}`:"/admin/tools.html"}function Be(t){return t===!0||t==="true"?"需要审批":t===!1||t==="false"?"配置关闭":"-"}function g(t,r,a){a!=null&&String(a).trim()!==""&&t.set(r,String(a).trim())}function W(t,r){const a=Number(t);return Number.isInteger(a)&&a>0?a:r}async function Pe(t){try{await navigator.clipboard.writeText(t),P.success("已复制")}catch{P.error("复制失败")}}function M(t){return t instanceof Error?t.message:String(t)}re.createRoot(document.getElementById("root")).render(e.jsx(ae.StrictMode,{children:e.jsx(ne,{locale:ie,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx($e,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/styles-BvvqRcSH.css b/shopops-admin/src/main/resources/static/admin/assets/styles-BvvqRcSH.css new file mode 100644 index 0000000..4009ea0 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/styles-BvvqRcSH.css @@ -0,0 +1 @@ +*{box-sizing:border-box}body{margin:0;min-width:320px;background:#f3f6fb;color:#1f2937;letter-spacing:0}.app-shell{min-height:100vh}.sidebar,.side-nav{background:#20242b!important;color:#f8fafc;padding:22px 18px}.brand{display:flex;gap:10px;align-items:center;margin-bottom:24px}.brand svg{width:26px;height:26px}.brand strong,.brand span{display:block}.brand strong{font-size:18px}.brand span{color:#b8c0cc;font-size:12px}.nav,.side-nav nav{display:grid;gap:6px}.nav a,.side-nav nav a{color:#cdd5df;border-radius:6px;padding:9px 10px;text-decoration:none}.nav a.active,.side-nav nav a.active{background:#343a44;color:#fff}.topbar{height:auto;min-height:76px;padding:16px 24px;background:#fff;border-bottom:1px solid #d8dee8;display:flex;align-items:center;justify-content:space-between;gap:18px}.topbar h3{margin:0 0 4px}.topbar .ant-input-group-wrapper{width:142px}.context-summary{justify-content:flex-end}.context-summary .ant-tag{margin-inline-end:0;padding:4px 10px;border-radius:6px;font-size:13px}.content{padding:20px 24px 24px}.full{width:100%}.quick-button{height:76px;display:grid;gap:3px;text-align:left;white-space:normal}.quick-button strong,.quick-button span{display:block;overflow:hidden;text-overflow:ellipsis}.quick-button span{color:#667085;font-size:12px;line-height:1.35}.clickable{cursor:pointer}.clickable:hover{background:#f7f9fc}.metrics-chart{width:100%;height:260px;margin-top:16px}.report-status-chart{width:100%;height:230px;margin-top:10px}.task-metrics-chart{width:100%;height:240px;margin-top:10px}.audit-risk-chart,.tool-status-chart{width:100%;height:260px}.dashboard-task-chart{width:100%;height:260px;margin-bottom:16px}.full-width{width:100%}.result-tables{margin-top:8px}.markdown-preview{max-height:340px;overflow:auto;white-space:pre-wrap;line-height:1.62}.json-box{max-height:280px;overflow:auto;margin:0;padding:12px;border:1px solid #d8dee8;border-radius:6px;background:#f7f9fc;font-size:12px;line-height:1.5}.json-block{max-height:280px;overflow:auto;margin:8px 0 0;padding:12px;border:1px solid #d8dee8;border-radius:6px;background:#f7f9fc;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.section-card{margin-top:16px}.status-alert{margin-bottom:16px}.timeline-column{max-width:100%}.form-stack,.spaced-table{margin-top:16px}.compact-list{margin-top:12px}.module-link{min-height:92px;display:grid;grid-template-columns:28px 1fr;grid-template-rows:auto auto;gap:4px 10px;align-items:start;padding:14px;border:1px solid #d8dee8;border-radius:8px;background:#fff;color:#1f2937;text-decoration:none}.module-link span:first-child{grid-row:1 / span 2;color:#2f6fbb;font-size:22px}.module-link strong{line-height:1.3}.empty-state{display:grid;gap:6px;min-height:150px;place-content:center;text-align:center;color:#667085}.empty-state strong{color:#1f2937}.selected-row td{background:#eef6ff!important}.ant-card{border-radius:8px}@media(max-width:960px){.app-shell{display:block}.sidebar{width:100%!important;max-width:none!important;min-width:0!important}.nav{grid-template-columns:repeat(2,minmax(0,1fr))}.topbar{display:grid}.topbar .ant-input-group-wrapper{width:100%}} diff --git a/shopops-admin/src/main/resources/static/admin/assets/styles-CdbHnvft.js b/shopops-admin/src/main/resources/static/admin/assets/styles-CdbHnvft.js new file mode 100644 index 0000000..f38215e --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/styles-CdbHnvft.js @@ -0,0 +1,321 @@ +function Ix(e,t){for(var r=0;ra[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))a(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const c of s.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function r(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function a(i){if(i.ep)return;i.ep=!0;const s=r(i);fetch(i.href,s)}})();function Ml(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var wv={exports:{}},Ms={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var mS;function GR(){if(mS)return Ms;mS=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(a,i,s){var c=null;if(s!==void 0&&(c=""+s),i.key!==void 0&&(c=""+i.key),"key"in i){s={};for(var d in i)d!=="key"&&(s[d]=i[d])}else s=i;return i=s.ref,{$$typeof:e,type:a,key:c,ref:i!==void 0?i:null,props:s}}return Ms.Fragment=t,Ms.jsx=r,Ms.jsxs=r,Ms}var vS;function WR(){return vS||(vS=1,wv.exports=GR()),wv.exports}var No=WR(),Ov={exports:{}},Dt={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var gS;function KR(){if(gS)return Dt;gS=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),c=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),v=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),h=Symbol.for("react.activity"),y=Symbol.iterator;function C(D){return D===null||typeof D!="object"?null:(D=y&&D[y]||D["@@iterator"],typeof D=="function"?D:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},x=Object.assign,S={};function E(D,U,G){this.props=D,this.context=U,this.refs=S,this.updater=G||w}E.prototype.isReactComponent={},E.prototype.setState=function(D,U){if(typeof D!="object"&&typeof D!="function"&&D!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,D,U,"setState")},E.prototype.forceUpdate=function(D){this.updater.enqueueForceUpdate(this,D,"forceUpdate")};function O(){}O.prototype=E.prototype;function R(D,U,G){this.props=D,this.context=U,this.refs=S,this.updater=G||w}var _=R.prototype=new O;_.constructor=R,x(_,E.prototype),_.isPureReactComponent=!0;var T=Array.isArray;function M(){}var N={H:null,A:null,T:null,S:null},A=Object.prototype.hasOwnProperty;function j(D,U,G){var W=G.ref;return{$$typeof:e,type:D,key:U,ref:W!==void 0?W:null,props:G}}function I(D,U){return j(D.type,U,D.props)}function L(D){return typeof D=="object"&&D!==null&&D.$$typeof===e}function B(D){var U={"=":"=0",":":"=2"};return"$"+D.replace(/[=:]/g,function(G){return U[G]})}var V=/\/+/g;function H(D,U){return typeof D=="object"&&D!==null&&D.key!=null?B(""+D.key):U.toString(36)}function Q(D){switch(D.status){case"fulfilled":return D.value;case"rejected":throw D.reason;default:switch(typeof D.status=="string"?D.then(M,M):(D.status="pending",D.then(function(U){D.status==="pending"&&(D.status="fulfilled",D.value=U)},function(U){D.status==="pending"&&(D.status="rejected",D.reason=U)})),D.status){case"fulfilled":return D.value;case"rejected":throw D.reason}}throw D}function z(D,U,G,W,X){var Y=typeof D;(Y==="undefined"||Y==="boolean")&&(D=null);var ie=!1;if(D===null)ie=!0;else switch(Y){case"bigint":case"string":case"number":ie=!0;break;case"object":switch(D.$$typeof){case e:case t:ie=!0;break;case p:return ie=D._init,z(ie(D._payload),U,G,W,X)}}if(ie)return X=X(D),ie=W===""?"."+H(D,0):W,T(X)?(G="",ie!=null&&(G=ie.replace(V,"$&/")+"/"),z(X,U,G,"",function(Te){return Te})):X!=null&&(L(X)&&(X=I(X,G+(X.key==null||D&&D.key===X.key?"":(""+X.key).replace(V,"$&/")+"/")+ie)),U.push(X)),1;ie=0;var ce=W===""?".":W+":";if(T(D))for(var fe=0;fe>>1,Z=z[ee];if(0>>1;eei(G,q))Wi(X,G)?(z[ee]=X,z[W]=q,ee=W):(z[ee]=G,z[U]=q,ee=U);else if(Wi(X,q))z[ee]=X,z[W]=q,ee=W;else break e}}return F}function i(z,F){var q=z.sortIndex-F.sortIndex;return q!==0?q:z.id-F.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var s=performance;e.unstable_now=function(){return s.now()}}else{var c=Date,d=c.now();e.unstable_now=function(){return c.now()-d}}var m=[],v=[],p=1,h=null,y=3,C=!1,w=!1,x=!1,S=!1,E=typeof setTimeout=="function"?setTimeout:null,O=typeof clearTimeout=="function"?clearTimeout:null,R=typeof setImmediate<"u"?setImmediate:null;function _(z){for(var F=r(v);F!==null;){if(F.callback===null)a(v);else if(F.startTime<=z)a(v),F.sortIndex=F.expirationTime,t(m,F);else break;F=r(v)}}function T(z){if(x=!1,_(z),!w)if(r(m)!==null)w=!0,M||(M=!0,B());else{var F=r(v);F!==null&&Q(T,F.startTime-z)}}var M=!1,N=-1,A=5,j=-1;function I(){return S?!0:!(e.unstable_now()-jz&&I());){var ee=h.callback;if(typeof ee=="function"){h.callback=null,y=h.priorityLevel;var Z=ee(h.expirationTime<=z);if(z=e.unstable_now(),typeof Z=="function"){h.callback=Z,_(z),F=!0;break t}h===r(m)&&a(m),_(z)}else a(m);h=r(m)}if(h!==null)F=!0;else{var D=r(v);D!==null&&Q(T,D.startTime-z),F=!1}}break e}finally{h=null,y=q,C=!1}F=void 0}}finally{F?B():M=!1}}}var B;if(typeof R=="function")B=function(){R(L)};else if(typeof MessageChannel<"u"){var V=new MessageChannel,H=V.port2;V.port1.onmessage=L,B=function(){H.postMessage(null)}}else B=function(){E(L,0)};function Q(z,F){N=E(function(){z(e.unstable_now())},F)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(z){z.callback=null},e.unstable_forceFrameRate=function(z){0>z||125ee?(z.sortIndex=q,t(v,z),r(m)===null&&z===r(v)&&(x?(O(N),N=-1):x=!0,Q(T,q-ee))):(z.sortIndex=Z,t(m,z),w||C||(w=!0,M||(M=!0,B()))),z},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(z){var F=y;return function(){var q=y;y=F;try{return z.apply(this,arguments)}finally{y=q}}}})(Tv)),Tv}var bS;function YR(){return bS||(bS=1,Rv.exports=XR()),Rv.exports}var _v={exports:{}},br={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var yS;function QR(){if(yS)return br;yS=1;var e=Vp();function t(m){var v="https://react.dev/errors/"+m;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),_v.exports=QR(),_v.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var CS;function ZR(){if(CS)return Ns;CS=1;var e=YR(),t=Vp(),r=Px();function a(n){var o="https://react.dev/errors/"+n;if(1Z||(n.current=ee[Z],ee[Z]=null,Z--)}function G(n,o){Z++,ee[Z]=n.current,n.current=o}var W=D(null),X=D(null),Y=D(null),ie=D(null);function ce(n,o){switch(G(Y,o),G(X,n),G(W,null),o.nodeType){case 9:case 11:n=(n=o.documentElement)&&(n=n.namespaceURI)?Iy(n):0;break;default:if(n=o.tagName,o=o.namespaceURI)o=Iy(o),n=Py(o,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}U(W),G(W,n)}function fe(){U(W),U(X),U(Y)}function Te(n){n.memoizedState!==null&&G(ie,n);var o=W.current,l=Py(o,n.type);o!==l&&(G(X,n),G(W,l))}function he(n){X.current===n&&(U(W),U(X)),ie.current===n&&(U(ie),$s._currentValue=q)}var se,ye;function be(n){if(se===void 0)try{throw Error()}catch(l){var o=l.stack.trim().match(/\n( *(at )?)/);se=o&&o[1]||"",ye=-1)":-1g||k[u]!==ve[g]){var we=` +`+k[u].replace(" at new "," at ");return n.displayName&&we.includes("")&&(we=we.replace("",n.displayName)),we}while(1<=u&&0<=g);break}}}finally{ge=!1,Error.prepareStackTrace=l}return(l=n?n.displayName||n.name:"")?be(l):""}function xe(n,o){switch(n.tag){case 26:case 27:case 5:return be(n.type);case 16:return be("Lazy");case 13:return n.child!==o&&o!==null?be("Suspense Fallback"):be("Suspense");case 19:return be("SuspenseList");case 0:case 15:return te(n.type,!1);case 11:return te(n.type.render,!1);case 1:return te(n.type,!0);case 31:return be("Activity");default:return""}}function Ee(n){try{var o="",l=null;do o+=xe(n,l),l=n,n=n.return;while(n);return o}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var _e=Object.prototype.hasOwnProperty,je=e.unstable_scheduleCallback,Ae=e.unstable_cancelCallback,He=e.unstable_shouldYield,Ie=e.unstable_requestPaint,Ce=e.unstable_now,Xe=e.unstable_getCurrentPriorityLevel,at=e.unstable_ImmediatePriority,mt=e.unstable_UserBlockingPriority,ke=e.unstable_NormalPriority,We=e.unstable_LowPriority,ct=e.unstable_IdlePriority,Qe=e.log,ut=e.unstable_setDisableYieldValue,Ye=null,ze=null;function Ke(n){if(typeof Qe=="function"&&ut(n),ze&&typeof ze.setStrictMode=="function")try{ze.setStrictMode(Ye,n)}catch{}}var Ne=Math.clz32?Math.clz32:gt,Ge=Math.log,_t=Math.LN2;function gt(n){return n>>>=0,n===0?32:31-(Ge(n)/_t|0)|0}var Ht=256,qt=262144,fn=4194304;function en(n){var o=n&42;if(o!==0)return o;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function Ft(n,o,l){var u=n.pendingLanes;if(u===0)return 0;var g=0,b=n.suspendedLanes,$=n.pingedLanes;n=n.warmLanes;var P=u&134217727;return P!==0?(u=P&~b,u!==0?g=en(u):($&=P,$!==0?g=en($):l||(l=P&~n,l!==0&&(g=en(l))))):(P=u&~b,P!==0?g=en(P):$!==0?g=en($):l||(l=u&~n,l!==0&&(g=en(l)))),g===0?0:o!==0&&o!==g&&(o&b)===0&&(b=g&-g,l=o&-o,b>=l||b===32&&(l&4194048)!==0)?o:g}function Rt(n,o){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&o)===0}function xt(n,o){switch(n){case 1:case 2:case 4:case 8:case 64:return o+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Gt(){var n=fn;return fn<<=1,(fn&62914560)===0&&(fn=4194304),n}function Bt(n){for(var o=[],l=0;31>l;l++)o.push(n);return o}function Ze(n,o){n.pendingLanes|=o,o!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Et(n,o,l,u,g,b){var $=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var P=n.entanglements,k=n.expirationTimes,ve=n.hiddenUpdates;for(l=$&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var it=/[\n"\\]/g;function jt(n){return n.replace(it,function(o){return"\\"+o.charCodeAt(0).toString(16)+" "})}function Xt(n,o,l,u,g,b,$,P){n.name="",$!=null&&typeof $!="function"&&typeof $!="symbol"&&typeof $!="boolean"?n.type=$:n.removeAttribute("type"),o!=null?$==="number"?(o===0&&n.value===""||n.value!=o)&&(n.value=""+Rn(o)):n.value!==""+Rn(o)&&(n.value=""+Rn(o)):$!=="submit"&&$!=="reset"||n.removeAttribute("value"),o!=null?gn(n,$,Rn(o)):l!=null?gn(n,$,Rn(l)):u!=null&&n.removeAttribute("value"),g==null&&b!=null&&(n.defaultChecked=!!b),g!=null&&(n.checked=g&&typeof g!="function"&&typeof g!="symbol"),P!=null&&typeof P!="function"&&typeof P!="symbol"&&typeof P!="boolean"?n.name=""+Rn(P):n.removeAttribute("name")}function ln(n,o,l,u,g,b,$,P){if(b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(n.type=b),o!=null||l!=null){if(!(b!=="submit"&&b!=="reset"||o!=null)){Mr(n);return}l=l!=null?""+Rn(l):"",o=o!=null?""+Rn(o):l,P||o===n.value||(n.value=o),n.defaultValue=o}u=u??g,u=typeof u!="function"&&typeof u!="symbol"&&!!u,n.checked=P?n.checked:!!u,n.defaultChecked=!!u,$!=null&&typeof $!="function"&&typeof $!="symbol"&&typeof $!="boolean"&&(n.name=$),Mr(n)}function gn(n,o,l){o==="number"&&ot(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function Bn(n,o,l,u){if(n=n.options,o){o={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Sn=!1;if(St)try{var zn={};Object.defineProperty(zn,"passive",{get:function(){Sn=!0}}),window.addEventListener("test",zn,zn),window.removeEventListener("test",zn,zn)}catch{Sn=!1}var sn=null,io=null,lo=null;function ql(){if(lo)return lo;var n,o=io,l=o.length,u,g="value"in sn?sn.value:sn.textContent,b=g.length;for(n=0;n=Kl),Uh=" ",qh=!1;function Gh(n,o){switch(n){case"keyup":return m2.indexOf(o.keyCode)!==-1;case"keydown":return o.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wh(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var $i=!1;function g2(n,o){switch(n){case"compositionend":return Wh(o);case"keypress":return o.which!==32?null:(qh=!0,Uh);case"textInput":return n=o.data,n===Uh&&qh?null:n;default:return null}}function p2(n,o){if($i)return n==="compositionend"||!Md&&Gh(n,o)?(n=ql(),lo=io=sn=null,$i=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(o.ctrlKey||o.altKey||o.metaKey)||o.ctrlKey&&o.altKey){if(o.char&&1=o)return{node:l,offset:o-n};n=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=e0(l)}}function n0(n,o){return n&&o?n===o?!0:n&&n.nodeType===3?!1:o&&o.nodeType===3?n0(n,o.parentNode):"contains"in n?n.contains(o):n.compareDocumentPosition?!!(n.compareDocumentPosition(o)&16):!1:!1}function r0(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var o=ot(n.document);o instanceof n.HTMLIFrameElement;){try{var l=typeof o.contentWindow.location.href=="string"}catch{l=!1}if(l)n=o.contentWindow;else break;o=ot(n.document)}return o}function zd(n){var o=n&&n.nodeName&&n.nodeName.toLowerCase();return o&&(o==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||o==="textarea"||n.contentEditable==="true")}var w2=St&&"documentMode"in document&&11>=document.documentMode,Ri=null,jd=null,Zl=null,Dd=!1;function a0(n,o,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Dd||Ri==null||Ri!==ot(u)||(u=Ri,"selectionStart"in u&&zd(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Zl&&Ql(Zl,u)||(Zl=u,u=Eu(jd,"onSelect"),0>=$,g-=$,Ma=1<<32-Ne(o)+g|l<Lt?(Qt=ht,ht=null):Qt=ht.sibling;var on=pe(le,ht,me[Lt],Oe);if(on===null){ht===null&&(ht=Qt);break}n&&ht&&on.alternate===null&&o(le,ht),ne=b(on,ne,Lt),an===null?wt=on:an.sibling=on,an=on,ht=Qt}if(Lt===me.length)return l(le,ht),kt&&Va(le,Lt),wt;if(ht===null){for(;LtLt?(Qt=ht,ht=null):Qt=ht.sibling;var Mo=pe(le,ht,on.value,Oe);if(Mo===null){ht===null&&(ht=Qt);break}n&&ht&&Mo.alternate===null&&o(le,ht),ne=b(Mo,ne,Lt),an===null?wt=Mo:an.sibling=Mo,an=Mo,ht=Qt}if(on.done)return l(le,ht),kt&&Va(le,Lt),wt;if(ht===null){for(;!on.done;Lt++,on=me.next())on=Me(le,on.value,Oe),on!==null&&(ne=b(on,ne,Lt),an===null?wt=on:an.sibling=on,an=on);return kt&&Va(le,Lt),wt}for(ht=u(ht);!on.done;Lt++,on=me.next())on=Se(ht,le,Lt,on.value,Oe),on!==null&&(n&&on.alternate!==null&&ht.delete(on.key===null?Lt:on.key),ne=b(on,ne,Lt),an===null?wt=on:an.sibling=on,an=on);return n&&ht.forEach(function(qR){return o(le,qR)}),kt&&Va(le,Lt),wt}function En(le,ne,me,Oe){if(typeof me=="object"&&me!==null&&me.type===x&&me.key===null&&(me=me.props.children),typeof me=="object"&&me!==null){switch(me.$$typeof){case C:e:{for(var wt=me.key;ne!==null;){if(ne.key===wt){if(wt=me.type,wt===x){if(ne.tag===7){l(le,ne.sibling),Oe=g(ne,me.props.children),Oe.return=le,le=Oe;break e}}else if(ne.elementType===wt||typeof wt=="object"&&wt!==null&&wt.$$typeof===A&&Jo(wt)===ne.type){l(le,ne.sibling),Oe=g(ne,me.props),rs(Oe,me),Oe.return=le,le=Oe;break e}l(le,ne);break}else o(le,ne);ne=ne.sibling}me.type===x?(Oe=Ko(me.props.children,le.mode,Oe,me.key),Oe.return=le,le=Oe):(Oe=Hc(me.type,me.key,me.props,null,le.mode,Oe),rs(Oe,me),Oe.return=le,le=Oe)}return $(le);case w:e:{for(wt=me.key;ne!==null;){if(ne.key===wt)if(ne.tag===4&&ne.stateNode.containerInfo===me.containerInfo&&ne.stateNode.implementation===me.implementation){l(le,ne.sibling),Oe=g(ne,me.children||[]),Oe.return=le,le=Oe;break e}else{l(le,ne);break}else o(le,ne);ne=ne.sibling}Oe=Vd(me,le.mode,Oe),Oe.return=le,le=Oe}return $(le);case A:return me=Jo(me),En(le,ne,me,Oe)}if(Q(me))return dt(le,ne,me,Oe);if(B(me)){if(wt=B(me),typeof wt!="function")throw Error(a(150));return me=wt.call(me),Tt(le,ne,me,Oe)}if(typeof me.then=="function")return En(le,ne,Kc(me),Oe);if(me.$$typeof===R)return En(le,ne,Uc(le,me),Oe);Xc(le,me)}return typeof me=="string"&&me!==""||typeof me=="number"||typeof me=="bigint"?(me=""+me,ne!==null&&ne.tag===6?(l(le,ne.sibling),Oe=g(ne,me),Oe.return=le,le=Oe):(l(le,ne),Oe=Fd(me,le.mode,Oe),Oe.return=le,le=Oe),$(le)):l(le,ne)}return function(le,ne,me,Oe){try{ns=0;var wt=En(le,ne,me,Oe);return Bi=null,wt}catch(ht){if(ht===Pi||ht===Gc)throw ht;var an=Ur(29,ht,null,le.mode);return an.lanes=Oe,an.return=le,an}finally{}}}var ei=R0(!0),T0=R0(!1),mo=!1;function em(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function tm(n,o){n=n.updateQueue,o.updateQueue===n&&(o.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function vo(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function go(n,o,l){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(cn&2)!==0){var g=u.pending;return g===null?o.next=o:(o.next=g.next,g.next=o),u.pending=o,o=Lc(n),f0(n,null,l),o}return Bc(n,u,o,l),Lc(n)}function as(n,o,l){if(o=o.updateQueue,o!==null&&(o=o.shared,(l&4194048)!==0)){var u=o.lanes;u&=n.pendingLanes,l|=u,o.lanes=l,De(n,l)}}function nm(n,o){var l=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var g=null,b=null;if(l=l.firstBaseUpdate,l!==null){do{var $={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};b===null?g=b=$:b=b.next=$,l=l.next}while(l!==null);b===null?g=b=o:b=b.next=o}else g=b=o;l={baseState:u.baseState,firstBaseUpdate:g,lastBaseUpdate:b,shared:u.shared,callbacks:u.callbacks},n.updateQueue=l;return}n=l.lastBaseUpdate,n===null?l.firstBaseUpdate=o:n.next=o,l.lastBaseUpdate=o}var rm=!1;function os(){if(rm){var n=Ii;if(n!==null)throw n}}function is(n,o,l,u){rm=!1;var g=n.updateQueue;mo=!1;var b=g.firstBaseUpdate,$=g.lastBaseUpdate,P=g.shared.pending;if(P!==null){g.shared.pending=null;var k=P,ve=k.next;k.next=null,$===null?b=ve:$.next=ve,$=k;var we=n.alternate;we!==null&&(we=we.updateQueue,P=we.lastBaseUpdate,P!==$&&(P===null?we.firstBaseUpdate=ve:P.next=ve,we.lastBaseUpdate=k))}if(b!==null){var Me=g.baseState;$=0,we=ve=k=null,P=b;do{var pe=P.lane&-536870913,Se=pe!==P.lane;if(Se?(Yt&pe)===pe:(u&pe)===pe){pe!==0&&pe===Di&&(rm=!0),we!==null&&(we=we.next={lane:0,tag:P.tag,payload:P.payload,callback:null,next:null});e:{var dt=n,Tt=P;pe=o;var En=l;switch(Tt.tag){case 1:if(dt=Tt.payload,typeof dt=="function"){Me=dt.call(En,Me,pe);break e}Me=dt;break e;case 3:dt.flags=dt.flags&-65537|128;case 0:if(dt=Tt.payload,pe=typeof dt=="function"?dt.call(En,Me,pe):dt,pe==null)break e;Me=h({},Me,pe);break e;case 2:mo=!0}}pe=P.callback,pe!==null&&(n.flags|=64,Se&&(n.flags|=8192),Se=g.callbacks,Se===null?g.callbacks=[pe]:Se.push(pe))}else Se={lane:pe,tag:P.tag,payload:P.payload,callback:P.callback,next:null},we===null?(ve=we=Se,k=Me):we=we.next=Se,$|=pe;if(P=P.next,P===null){if(P=g.shared.pending,P===null)break;Se=P,P=Se.next,Se.next=null,g.lastBaseUpdate=Se,g.shared.pending=null}}while(!0);we===null&&(k=Me),g.baseState=k,g.firstBaseUpdate=ve,g.lastBaseUpdate=we,b===null&&(g.shared.lanes=0),So|=$,n.lanes=$,n.memoizedState=Me}}function _0(n,o){if(typeof n!="function")throw Error(a(191,n));n.call(o)}function M0(n,o){var l=n.callbacks;if(l!==null)for(n.callbacks=null,n=0;nb?b:8;var $=z.T,P={};z.T=P,xm(n,!1,o,l);try{var k=g(),ve=z.S;if(ve!==null&&ve(P,k),k!==null&&typeof k=="object"&&typeof k.then=="function"){var we=z2(k,u);cs(n,o,we,Xr(n))}else cs(n,o,u,Xr(n))}catch(Me){cs(n,o,{then:function(){},status:"rejected",reason:Me},Xr())}finally{F.p=b,$!==null&&P.types!==null&&($.types=P.types),z.T=$}}function L2(){}function Sm(n,o,l,u){if(n.tag!==5)throw Error(a(476));var g=sb(n).queue;lb(n,g,o,q,l===null?L2:function(){return cb(n),l(u)})}function sb(n){var o=n.memoizedState;if(o!==null)return o;o={memoizedState:q,baseState:q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:q},next:null};var l={};return o.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:l},next:null},n.memoizedState=o,n=n.alternate,n!==null&&(n.memoizedState=o),o}function cb(n){var o=sb(n);o.next===null&&(o=n.alternate.memoizedState),cs(n,o.next.queue,{},Xr())}function Cm(){return vr($s)}function ub(){return Un().memoizedState}function fb(){return Un().memoizedState}function H2(n){for(var o=n.return;o!==null;){switch(o.tag){case 24:case 3:var l=Xr();n=vo(l);var u=go(o,n,l);u!==null&&(Pr(u,o,l),as(u,o,l)),o={cache:Qd()},n.payload=o;return}o=o.return}}function F2(n,o,l){var u=Xr();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},au(n)?mb(o,l):(l=Ld(n,o,l,u),l!==null&&(Pr(l,n,u),vb(l,o,u)))}function db(n,o,l){var u=Xr();cs(n,o,l,u)}function cs(n,o,l,u){var g={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(au(n))mb(o,g);else{var b=n.alternate;if(n.lanes===0&&(b===null||b.lanes===0)&&(b=o.lastRenderedReducer,b!==null))try{var $=o.lastRenderedState,P=b($,l);if(g.hasEagerState=!0,g.eagerState=P,Vr(P,$))return Bc(n,o,g,0),Tn===null&&Pc(),!1}catch{}finally{}if(l=Ld(n,o,g,u),l!==null)return Pr(l,n,u),vb(l,o,u),!0}return!1}function xm(n,o,l,u){if(u={lane:2,revertLane:ev(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},au(n)){if(o)throw Error(a(479))}else o=Ld(n,l,u,2),o!==null&&Pr(o,n,2)}function au(n){var o=n.alternate;return n===Pt||o!==null&&o===Pt}function mb(n,o){Hi=Zc=!0;var l=n.pending;l===null?o.next=o:(o.next=l.next,l.next=o),n.pending=o}function vb(n,o,l){if((l&4194048)!==0){var u=o.lanes;u&=n.pendingLanes,l|=u,o.lanes=l,De(n,l)}}var us={readContext:vr,use:eu,useCallback:Ln,useContext:Ln,useEffect:Ln,useImperativeHandle:Ln,useLayoutEffect:Ln,useInsertionEffect:Ln,useMemo:Ln,useReducer:Ln,useRef:Ln,useState:Ln,useDebugValue:Ln,useDeferredValue:Ln,useTransition:Ln,useSyncExternalStore:Ln,useId:Ln,useHostTransitionStatus:Ln,useFormState:Ln,useActionState:Ln,useOptimistic:Ln,useMemoCache:Ln,useCacheRefresh:Ln};us.useEffectEvent=Ln;var gb={readContext:vr,use:eu,useCallback:function(n,o){return $r().memoizedState=[n,o===void 0?null:o],n},useContext:vr,useEffect:J0,useImperativeHandle:function(n,o,l){l=l!=null?l.concat([n]):null,nu(4194308,4,nb.bind(null,o,n),l)},useLayoutEffect:function(n,o){return nu(4194308,4,n,o)},useInsertionEffect:function(n,o){nu(4,2,n,o)},useMemo:function(n,o){var l=$r();o=o===void 0?null:o;var u=n();if(ti){Ke(!0);try{n()}finally{Ke(!1)}}return l.memoizedState=[u,o],u},useReducer:function(n,o,l){var u=$r();if(l!==void 0){var g=l(o);if(ti){Ke(!0);try{l(o)}finally{Ke(!1)}}}else g=o;return u.memoizedState=u.baseState=g,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:g},u.queue=n,n=n.dispatch=F2.bind(null,Pt,n),[u.memoizedState,n]},useRef:function(n){var o=$r();return n={current:n},o.memoizedState=n},useState:function(n){n=gm(n);var o=n.queue,l=db.bind(null,Pt,o);return o.dispatch=l,[n.memoizedState,l]},useDebugValue:bm,useDeferredValue:function(n,o){var l=$r();return ym(l,n,o)},useTransition:function(){var n=gm(!1);return n=lb.bind(null,Pt,n.queue,!0,!1),$r().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,o,l){var u=Pt,g=$r();if(kt){if(l===void 0)throw Error(a(407));l=l()}else{if(l=o(),Tn===null)throw Error(a(349));(Yt&127)!==0||I0(u,o,l)}g.memoizedState=l;var b={value:l,getSnapshot:o};return g.queue=b,J0(B0.bind(null,u,b,n),[n]),u.flags|=2048,Vi(9,{destroy:void 0},P0.bind(null,u,b,l,o),null),l},useId:function(){var n=$r(),o=Tn.identifierPrefix;if(kt){var l=Na,u=Ma;l=(u&~(1<<32-Ne(u)-1)).toString(32)+l,o="_"+o+"R_"+l,l=Jc++,0<\/script>",b=b.removeChild(b.firstChild);break;case"select":b=typeof u.is=="string"?$.createElement("select",{is:u.is}):$.createElement("select"),u.multiple?b.multiple=!0:u.size&&(b.size=u.size);break;default:b=typeof u.is=="string"?$.createElement(g,{is:u.is}):$.createElement(g)}}b[bt]=o,b[vt]=u;e:for($=o.child;$!==null;){if($.tag===5||$.tag===6)b.appendChild($.stateNode);else if($.tag!==4&&$.tag!==27&&$.child!==null){$.child.return=$,$=$.child;continue}if($===o)break e;for(;$.sibling===null;){if($.return===null||$.return===o)break e;$=$.return}$.sibling.return=$.return,$=$.sibling}o.stateNode=b;e:switch(pr(b,g,u),g){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&Xa(o)}}return Dn(o),Im(o,o.type,n===null?null:n.memoizedProps,o.pendingProps,l),null;case 6:if(n&&o.stateNode!=null)n.memoizedProps!==u&&Xa(o);else{if(typeof u!="string"&&o.stateNode===null)throw Error(a(166));if(n=Y.current,zi(o)){if(n=o.stateNode,l=o.memoizedProps,u=null,g=mr,g!==null)switch(g.tag){case 27:case 5:u=g.memoizedProps}n[bt]=o,n=!!(n.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||jy(n.nodeValue,l)),n||uo(o,!0)}else n=wu(n).createTextNode(u),n[bt]=o,o.stateNode=n}return Dn(o),null;case 31:if(l=o.memoizedState,n===null||n.memoizedState!==null){if(u=zi(o),l!==null){if(n===null){if(!u)throw Error(a(318));if(n=o.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(a(557));n[bt]=o}else Xo(),(o.flags&128)===0&&(o.memoizedState=null),o.flags|=4;Dn(o),n=!1}else l=Wd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=l),n=!0;if(!n)return o.flags&256?(Gr(o),o):(Gr(o),null);if((o.flags&128)!==0)throw Error(a(558))}return Dn(o),null;case 13:if(u=o.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(g=zi(o),u!==null&&u.dehydrated!==null){if(n===null){if(!g)throw Error(a(318));if(g=o.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(a(317));g[bt]=o}else Xo(),(o.flags&128)===0&&(o.memoizedState=null),o.flags|=4;Dn(o),g=!1}else g=Wd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=g),g=!0;if(!g)return o.flags&256?(Gr(o),o):(Gr(o),null)}return Gr(o),(o.flags&128)!==0?(o.lanes=l,o):(l=u!==null,n=n!==null&&n.memoizedState!==null,l&&(u=o.child,g=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(g=u.alternate.memoizedState.cachePool.pool),b=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(b=u.memoizedState.cachePool.pool),b!==g&&(u.flags|=2048)),l!==n&&l&&(o.child.flags|=8192),cu(o,o.updateQueue),Dn(o),null);case 4:return fe(),n===null&&av(o.stateNode.containerInfo),Dn(o),null;case 10:return qa(o.type),Dn(o),null;case 19:if(U(Vn),u=o.memoizedState,u===null)return Dn(o),null;if(g=(o.flags&128)!==0,b=u.rendering,b===null)if(g)ds(u,!1);else{if(Hn!==0||n!==null&&(n.flags&128)!==0)for(n=o.child;n!==null;){if(b=Qc(n),b!==null){for(o.flags|=128,ds(u,!1),n=b.updateQueue,o.updateQueue=n,cu(o,n),o.subtreeFlags=0,n=l,l=o.child;l!==null;)d0(l,n),l=l.sibling;return G(Vn,Vn.current&1|2),kt&&Va(o,u.treeForkCount),o.child}n=n.sibling}u.tail!==null&&Ce()>vu&&(o.flags|=128,g=!0,ds(u,!1),o.lanes=4194304)}else{if(!g)if(n=Qc(b),n!==null){if(o.flags|=128,g=!0,n=n.updateQueue,o.updateQueue=n,cu(o,n),ds(u,!0),u.tail===null&&u.tailMode==="hidden"&&!b.alternate&&!kt)return Dn(o),null}else 2*Ce()-u.renderingStartTime>vu&&l!==536870912&&(o.flags|=128,g=!0,ds(u,!1),o.lanes=4194304);u.isBackwards?(b.sibling=o.child,o.child=b):(n=u.last,n!==null?n.sibling=b:o.child=b,u.last=b)}return u.tail!==null?(n=u.tail,u.rendering=n,u.tail=n.sibling,u.renderingStartTime=Ce(),n.sibling=null,l=Vn.current,G(Vn,g?l&1|2:l&1),kt&&Va(o,u.treeForkCount),n):(Dn(o),null);case 22:case 23:return Gr(o),om(),u=o.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(o.flags|=8192):u&&(o.flags|=8192),u?(l&536870912)!==0&&(o.flags&128)===0&&(Dn(o),o.subtreeFlags&6&&(o.flags|=8192)):Dn(o),l=o.updateQueue,l!==null&&cu(o,l.retryQueue),l=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(l=n.memoizedState.cachePool.pool),u=null,o.memoizedState!==null&&o.memoizedState.cachePool!==null&&(u=o.memoizedState.cachePool.pool),u!==l&&(o.flags|=2048),n!==null&&U(Zo),null;case 24:return l=null,n!==null&&(l=n.memoizedState.cache),o.memoizedState.cache!==l&&(o.flags|=2048),qa(Qn),Dn(o),null;case 25:return null;case 30:return null}throw Error(a(156,o.tag))}function W2(n,o){switch(qd(o),o.tag){case 1:return n=o.flags,n&65536?(o.flags=n&-65537|128,o):null;case 3:return qa(Qn),fe(),n=o.flags,(n&65536)!==0&&(n&128)===0?(o.flags=n&-65537|128,o):null;case 26:case 27:case 5:return he(o),null;case 31:if(o.memoizedState!==null){if(Gr(o),o.alternate===null)throw Error(a(340));Xo()}return n=o.flags,n&65536?(o.flags=n&-65537|128,o):null;case 13:if(Gr(o),n=o.memoizedState,n!==null&&n.dehydrated!==null){if(o.alternate===null)throw Error(a(340));Xo()}return n=o.flags,n&65536?(o.flags=n&-65537|128,o):null;case 19:return U(Vn),null;case 4:return fe(),null;case 10:return qa(o.type),null;case 22:case 23:return Gr(o),om(),n!==null&&U(Zo),n=o.flags,n&65536?(o.flags=n&-65537|128,o):null;case 24:return qa(Qn),null;case 25:return null;default:return null}}function Lb(n,o){switch(qd(o),o.tag){case 3:qa(Qn),fe();break;case 26:case 27:case 5:he(o);break;case 4:fe();break;case 31:o.memoizedState!==null&&Gr(o);break;case 13:Gr(o);break;case 19:U(Vn);break;case 10:qa(o.type);break;case 22:case 23:Gr(o),om(),n!==null&&U(Zo);break;case 24:qa(Qn)}}function ms(n,o){try{var l=o.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var g=u.next;l=g;do{if((l.tag&n)===n){u=void 0;var b=l.create,$=l.inst;u=b(),$.destroy=u}l=l.next}while(l!==g)}}catch(P){hn(o,o.return,P)}}function bo(n,o,l){try{var u=o.updateQueue,g=u!==null?u.lastEffect:null;if(g!==null){var b=g.next;u=b;do{if((u.tag&n)===n){var $=u.inst,P=$.destroy;if(P!==void 0){$.destroy=void 0,g=o;var k=l,ve=P;try{ve()}catch(we){hn(g,k,we)}}}u=u.next}while(u!==b)}}catch(we){hn(o,o.return,we)}}function Hb(n){var o=n.updateQueue;if(o!==null){var l=n.stateNode;try{M0(o,l)}catch(u){hn(n,n.return,u)}}}function Fb(n,o,l){l.props=ni(n.type,n.memoizedProps),l.state=n.memoizedState;try{l.componentWillUnmount()}catch(u){hn(n,o,u)}}function vs(n,o){try{var l=n.ref;if(l!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:u=n.stateNode;break;default:u=n.stateNode}typeof l=="function"?n.refCleanup=l(u):l.current=u}}catch(g){hn(n,o,g)}}function Aa(n,o){var l=n.ref,u=n.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(g){hn(n,o,g)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(g){hn(n,o,g)}else l.current=null}function Vb(n){var o=n.type,l=n.memoizedProps,u=n.stateNode;try{e:switch(o){case"button":case"input":case"select":case"textarea":l.autoFocus&&u.focus();break e;case"img":l.src?u.src=l.src:l.srcSet&&(u.srcset=l.srcSet)}}catch(g){hn(n,n.return,g)}}function Pm(n,o,l){try{var u=n.stateNode;vR(u,n.type,l,o),u[vt]=o}catch(g){hn(n,n.return,g)}}function Ub(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&Oo(n.type)||n.tag===4}function Bm(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||Ub(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&Oo(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Lm(n,o,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,o?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(n,o):(o=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,o.appendChild(n),l=l._reactRootContainer,l!=null||o.onclick!==null||(o.onclick=Or));else if(u!==4&&(u===27&&Oo(n.type)&&(l=n.stateNode,o=null),n=n.child,n!==null))for(Lm(n,o,l),n=n.sibling;n!==null;)Lm(n,o,l),n=n.sibling}function uu(n,o,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,o?l.insertBefore(n,o):l.appendChild(n);else if(u!==4&&(u===27&&Oo(n.type)&&(l=n.stateNode),n=n.child,n!==null))for(uu(n,o,l),n=n.sibling;n!==null;)uu(n,o,l),n=n.sibling}function qb(n){var o=n.stateNode,l=n.memoizedProps;try{for(var u=n.type,g=o.attributes;g.length;)o.removeAttributeNode(g[0]);pr(o,u,l),o[bt]=n,o[vt]=l}catch(b){hn(n,n.return,b)}}var Ya=!1,kn=!1,Hm=!1,Gb=typeof WeakSet=="function"?WeakSet:Set,sr=null;function K2(n,o){if(n=n.containerInfo,lv=Nu,n=r0(n),zd(n)){if("selectionStart"in n)var l={start:n.selectionStart,end:n.selectionEnd};else e:{l=(l=n.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var g=u.anchorOffset,b=u.focusNode;u=u.focusOffset;try{l.nodeType,b.nodeType}catch{l=null;break e}var $=0,P=-1,k=-1,ve=0,we=0,Me=n,pe=null;t:for(;;){for(var Se;Me!==l||g!==0&&Me.nodeType!==3||(P=$+g),Me!==b||u!==0&&Me.nodeType!==3||(k=$+u),Me.nodeType===3&&($+=Me.nodeValue.length),(Se=Me.firstChild)!==null;)pe=Me,Me=Se;for(;;){if(Me===n)break t;if(pe===l&&++ve===g&&(P=$),pe===b&&++we===u&&(k=$),(Se=Me.nextSibling)!==null)break;Me=pe,pe=Me.parentNode}Me=Se}l=P===-1||k===-1?null:{start:P,end:k}}else l=null}l=l||{start:0,end:0}}else l=null;for(sv={focusedElem:n,selectionRange:l},Nu=!1,sr=o;sr!==null;)if(o=sr,n=o.child,(o.subtreeFlags&1028)!==0&&n!==null)n.return=o,sr=n;else for(;sr!==null;){switch(o=sr,b=o.alternate,n=o.flags,o.tag){case 0:if((n&4)!==0&&(n=o.updateQueue,n=n!==null?n.events:null,n!==null))for(l=0;l title"))),pr(b,u,l),b[bt]=n,Ve(b),u=b;break e;case"link":var $=Zy("link","href",g).get(u+(l.href||""));if($){for(var P=0;P<$.length;P++)if(b=$[P],b.getAttribute("href")===(l.href==null||l.href===""?null:l.href)&&b.getAttribute("rel")===(l.rel==null?null:l.rel)&&b.getAttribute("title")===(l.title==null?null:l.title)&&b.getAttribute("crossorigin")===(l.crossOrigin==null?null:l.crossOrigin)){$.splice(P,1);break t}}b=g.createElement(u),pr(b,u,l),g.head.appendChild(b);break;case"meta":if($=Zy("meta","content",g).get(u+(l.content||""))){for(P=0;P<$.length;P++)if(b=$[P],b.getAttribute("content")===(l.content==null?null:""+l.content)&&b.getAttribute("name")===(l.name==null?null:l.name)&&b.getAttribute("property")===(l.property==null?null:l.property)&&b.getAttribute("http-equiv")===(l.httpEquiv==null?null:l.httpEquiv)&&b.getAttribute("charset")===(l.charSet==null?null:l.charSet)){$.splice(P,1);break t}}b=g.createElement(u),pr(b,u,l),g.head.appendChild(b);break;default:throw Error(a(468,u))}b[bt]=n,Ve(b),u=b}n.stateNode=u}else Jy(g,n.type,n.stateNode);else n.stateNode=Qy(g,u,n.memoizedProps);else b!==u?(b===null?l.stateNode!==null&&(l=l.stateNode,l.parentNode.removeChild(l)):b.count--,u===null?Jy(g,n.type,n.stateNode):Qy(g,u,n.memoizedProps)):u===null&&n.stateNode!==null&&Pm(n,n.memoizedProps,l.memoizedProps)}break;case 27:jr(o,n),Dr(n),u&512&&(kn||l===null||Aa(l,l.return)),l!==null&&u&4&&Pm(n,n.memoizedProps,l.memoizedProps);break;case 5:if(jr(o,n),Dr(n),u&512&&(kn||l===null||Aa(l,l.return)),n.flags&32){g=n.stateNode;try{Pn(g,"")}catch(dt){hn(n,n.return,dt)}}u&4&&n.stateNode!=null&&(g=n.memoizedProps,Pm(n,g,l!==null?l.memoizedProps:g)),u&1024&&(Hm=!0);break;case 6:if(jr(o,n),Dr(n),u&4){if(n.stateNode===null)throw Error(a(162));u=n.memoizedProps,l=n.stateNode;try{l.nodeValue=u}catch(dt){hn(n,n.return,dt)}}break;case 3:if(Ru=null,g=Ca,Ca=Ou(o.containerInfo),jr(o,n),Ca=g,Dr(n),u&4&&l!==null&&l.memoizedState.isDehydrated)try{el(o.containerInfo)}catch(dt){hn(n,n.return,dt)}Hm&&(Hm=!1,Jb(n));break;case 4:u=Ca,Ca=Ou(n.stateNode.containerInfo),jr(o,n),Dr(n),Ca=u;break;case 12:jr(o,n),Dr(n);break;case 31:jr(o,n),Dr(n),u&4&&(u=n.updateQueue,u!==null&&(n.updateQueue=null,fu(n,u)));break;case 13:jr(o,n),Dr(n),n.child.flags&8192&&n.memoizedState!==null!=(l!==null&&l.memoizedState!==null)&&(mu=Ce()),u&4&&(u=n.updateQueue,u!==null&&(n.updateQueue=null,fu(n,u)));break;case 22:g=n.memoizedState!==null;var k=l!==null&&l.memoizedState!==null,ve=Ya,we=kn;if(Ya=ve||g,kn=we||k,jr(o,n),kn=we,Ya=ve,Dr(n),u&8192)e:for(o=n.stateNode,o._visibility=g?o._visibility&-2:o._visibility|1,g&&(l===null||k||Ya||kn||ri(n)),l=null,o=n;;){if(o.tag===5||o.tag===26){if(l===null){k=l=o;try{if(b=k.stateNode,g)$=b.style,typeof $.setProperty=="function"?$.setProperty("display","none","important"):$.display="none";else{P=k.stateNode;var Me=k.memoizedProps.style,pe=Me!=null&&Me.hasOwnProperty("display")?Me.display:null;P.style.display=pe==null||typeof pe=="boolean"?"":(""+pe).trim()}}catch(dt){hn(k,k.return,dt)}}}else if(o.tag===6){if(l===null){k=o;try{k.stateNode.nodeValue=g?"":k.memoizedProps}catch(dt){hn(k,k.return,dt)}}}else if(o.tag===18){if(l===null){k=o;try{var Se=k.stateNode;g?Fy(Se,!0):Fy(k.stateNode,!1)}catch(dt){hn(k,k.return,dt)}}}else if((o.tag!==22&&o.tag!==23||o.memoizedState===null||o===n)&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===n)break e;for(;o.sibling===null;){if(o.return===null||o.return===n)break e;l===o&&(l=null),o=o.return}l===o&&(l=null),o.sibling.return=o.return,o=o.sibling}u&4&&(u=n.updateQueue,u!==null&&(l=u.retryQueue,l!==null&&(u.retryQueue=null,fu(n,l))));break;case 19:jr(o,n),Dr(n),u&4&&(u=n.updateQueue,u!==null&&(n.updateQueue=null,fu(n,u)));break;case 30:break;case 21:break;default:jr(o,n),Dr(n)}}function Dr(n){var o=n.flags;if(o&2){try{for(var l,u=n.return;u!==null;){if(Ub(u)){l=u;break}u=u.return}if(l==null)throw Error(a(160));switch(l.tag){case 27:var g=l.stateNode,b=Bm(n);uu(n,b,g);break;case 5:var $=l.stateNode;l.flags&32&&(Pn($,""),l.flags&=-33);var P=Bm(n);uu(n,P,$);break;case 3:case 4:var k=l.stateNode.containerInfo,ve=Bm(n);Lm(n,ve,k);break;default:throw Error(a(161))}}catch(we){hn(n,n.return,we)}n.flags&=-3}o&4096&&(n.flags&=-4097)}function Jb(n){if(n.subtreeFlags&1024)for(n=n.child;n!==null;){var o=n;Jb(o),o.tag===5&&o.flags&1024&&o.stateNode.reset(),n=n.sibling}}function Za(n,o){if(o.subtreeFlags&8772)for(o=o.child;o!==null;)Wb(n,o.alternate,o),o=o.sibling}function ri(n){for(n=n.child;n!==null;){var o=n;switch(o.tag){case 0:case 11:case 14:case 15:bo(4,o,o.return),ri(o);break;case 1:Aa(o,o.return);var l=o.stateNode;typeof l.componentWillUnmount=="function"&&Fb(o,o.return,l),ri(o);break;case 27:Es(o.stateNode);case 26:case 5:Aa(o,o.return),ri(o);break;case 22:o.memoizedState===null&&ri(o);break;case 30:ri(o);break;default:ri(o)}n=n.sibling}}function Ja(n,o,l){for(l=l&&(o.subtreeFlags&8772)!==0,o=o.child;o!==null;){var u=o.alternate,g=n,b=o,$=b.flags;switch(b.tag){case 0:case 11:case 15:Ja(g,b,l),ms(4,b);break;case 1:if(Ja(g,b,l),u=b,g=u.stateNode,typeof g.componentDidMount=="function")try{g.componentDidMount()}catch(ve){hn(u,u.return,ve)}if(u=b,g=u.updateQueue,g!==null){var P=u.stateNode;try{var k=g.shared.hiddenCallbacks;if(k!==null)for(g.shared.hiddenCallbacks=null,g=0;gEn&&($=En,En=Tt,Tt=$);var le=t0(P,Tt),ne=t0(P,En);if(le&&ne&&(Se.rangeCount!==1||Se.anchorNode!==le.node||Se.anchorOffset!==le.offset||Se.focusNode!==ne.node||Se.focusOffset!==ne.offset)){var me=Me.createRange();me.setStart(le.node,le.offset),Se.removeAllRanges(),Tt>En?(Se.addRange(me),Se.extend(ne.node,ne.offset)):(me.setEnd(ne.node,ne.offset),Se.addRange(me))}}}}for(Me=[],Se=P;Se=Se.parentNode;)Se.nodeType===1&&Me.push({element:Se,left:Se.scrollLeft,top:Se.scrollTop});for(typeof P.focus=="function"&&P.focus(),P=0;Pl?32:l,z.T=null,l=Km,Km=null;var b=xo,$=eo;if(rr=0,Ki=xo=null,eo=0,(cn&6)!==0)throw Error(a(331));var P=cn;if(cn|=4,ny(b.current),kb(b,b.current,$,l),cn=P,Ss(0,!1),ze&&typeof ze.onPostCommitFiberRoot=="function")try{ze.onPostCommitFiberRoot(Ye,b)}catch{}return!0}finally{F.p=g,z.T=u,Sy(n,o)}}function xy(n,o,l){o=oa(l,o),o=$m(n.stateNode,o,2),n=go(n,o,2),n!==null&&(Ze(n,2),za(n))}function hn(n,o,l){if(n.tag===3)xy(n,n,l);else for(;o!==null;){if(o.tag===3){xy(o,n,l);break}else if(o.tag===1){var u=o.stateNode;if(typeof o.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Co===null||!Co.has(u))){n=oa(l,n),l=Eb(2),u=go(o,l,2),u!==null&&(wb(l,u,o,n),Ze(u,2),za(u));break}}o=o.return}}function Zm(n,o,l){var u=n.pingCache;if(u===null){u=n.pingCache=new Q2;var g=new Set;u.set(o,g)}else g=u.get(o),g===void 0&&(g=new Set,u.set(o,g));g.has(l)||(Um=!0,g.add(l),n=tR.bind(null,n,o,l),o.then(n,n))}function tR(n,o,l){var u=n.pingCache;u!==null&&u.delete(o),n.pingedLanes|=n.suspendedLanes&l,n.warmLanes&=~l,Tn===n&&(Yt&l)===l&&(Hn===4||Hn===3&&(Yt&62914560)===Yt&&300>Ce()-mu?(cn&2)===0&&Xi(n,0):qm|=l,Wi===Yt&&(Wi=0)),za(n)}function Ey(n,o){o===0&&(o=Gt()),n=Wo(n,o),n!==null&&(Ze(n,o),za(n))}function nR(n){var o=n.memoizedState,l=0;o!==null&&(l=o.retryLane),Ey(n,l)}function rR(n,o){var l=0;switch(n.tag){case 31:case 13:var u=n.stateNode,g=n.memoizedState;g!==null&&(l=g.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(o),Ey(n,l)}function aR(n,o){return je(n,o)}var Su=null,Qi=null,Jm=!1,Cu=!1,km=!1,wo=0;function za(n){n!==Qi&&n.next===null&&(Qi===null?Su=Qi=n:Qi=Qi.next=n),Cu=!0,Jm||(Jm=!0,iR())}function Ss(n,o){if(!km&&Cu){km=!0;do for(var l=!1,u=Su;u!==null;){if(n!==0){var g=u.pendingLanes;if(g===0)var b=0;else{var $=u.suspendedLanes,P=u.pingedLanes;b=(1<<31-Ne(42|n)+1)-1,b&=g&~($&~P),b=b&201326741?b&201326741|1:b?b|2:0}b!==0&&(l=!0,Ry(u,b))}else b=Yt,b=Ft(u,u===Tn?b:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(b&3)===0||Rt(u,b)||(l=!0,Ry(u,b));u=u.next}while(l);km=!1}}function oR(){wy()}function wy(){Cu=Jm=!1;var n=0;wo!==0&&pR()&&(n=wo);for(var o=Ce(),l=null,u=Su;u!==null;){var g=u.next,b=Oy(u,o);b===0?(u.next=null,l===null?Su=g:l.next=g,g===null&&(Qi=l)):(l=u,(n!==0||(b&3)!==0)&&(Cu=!0)),u=g}rr!==0&&rr!==5||Ss(n),wo!==0&&(wo=0)}function Oy(n,o){for(var l=n.suspendedLanes,u=n.pingedLanes,g=n.expirationTimes,b=n.pendingLanes&-62914561;0P)break;var we=k.transferSize,Me=k.initiatorType;we&&Dy(Me)&&(k=k.responseEnd,$+=we*(k"u"?null:document;function Ky(n,o,l){var u=Zi;if(u&&typeof o=="string"&&o){var g=jt(o);g='link[rel="'+n+'"][href="'+g+'"]',typeof l=="string"&&(g+='[crossorigin="'+l+'"]'),Wy.has(g)||(Wy.add(g),n={rel:n,crossOrigin:l,href:o},u.querySelector(g)===null&&(o=u.createElement("link"),pr(o,"link",n),Ve(o),u.head.appendChild(o)))}}function OR(n){to.D(n),Ky("dns-prefetch",n,null)}function $R(n,o){to.C(n,o),Ky("preconnect",n,o)}function RR(n,o,l){to.L(n,o,l);var u=Zi;if(u&&n&&o){var g='link[rel="preload"][as="'+jt(o)+'"]';o==="image"&&l&&l.imageSrcSet?(g+='[imagesrcset="'+jt(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(g+='[imagesizes="'+jt(l.imageSizes)+'"]')):g+='[href="'+jt(n)+'"]';var b=g;switch(o){case"style":b=Ji(n);break;case"script":b=ki(n)}fa.has(b)||(n=h({rel:"preload",href:o==="image"&&l&&l.imageSrcSet?void 0:n,as:o},l),fa.set(b,n),u.querySelector(g)!==null||o==="style"&&u.querySelector(ws(b))||o==="script"&&u.querySelector(Os(b))||(o=u.createElement("link"),pr(o,"link",n),Ve(o),u.head.appendChild(o)))}}function TR(n,o){to.m(n,o);var l=Zi;if(l&&n){var u=o&&typeof o.as=="string"?o.as:"script",g='link[rel="modulepreload"][as="'+jt(u)+'"][href="'+jt(n)+'"]',b=g;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":b=ki(n)}if(!fa.has(b)&&(n=h({rel:"modulepreload",href:n},o),fa.set(b,n),l.querySelector(g)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Os(b)))return}u=l.createElement("link"),pr(u,"link",n),Ve(u),l.head.appendChild(u)}}}function _R(n,o,l){to.S(n,o,l);var u=Zi;if(u&&n){var g=$t(u).hoistableStyles,b=Ji(n);o=o||"default";var $=g.get(b);if(!$){var P={loading:0,preload:null};if($=u.querySelector(ws(b)))P.loading=5;else{n=h({rel:"stylesheet",href:n,"data-precedence":o},l),(l=fa.get(b))&&gv(n,l);var k=$=u.createElement("link");Ve(k),pr(k,"link",n),k._p=new Promise(function(ve,we){k.onload=ve,k.onerror=we}),k.addEventListener("load",function(){P.loading|=1}),k.addEventListener("error",function(){P.loading|=2}),P.loading|=4,$u($,o,u)}$={type:"stylesheet",instance:$,count:1,state:P},g.set(b,$)}}}function MR(n,o){to.X(n,o);var l=Zi;if(l&&n){var u=$t(l).hoistableScripts,g=ki(n),b=u.get(g);b||(b=l.querySelector(Os(g)),b||(n=h({src:n,async:!0},o),(o=fa.get(g))&&pv(n,o),b=l.createElement("script"),Ve(b),pr(b,"link",n),l.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function NR(n,o){to.M(n,o);var l=Zi;if(l&&n){var u=$t(l).hoistableScripts,g=ki(n),b=u.get(g);b||(b=l.querySelector(Os(g)),b||(n=h({src:n,async:!0,type:"module"},o),(o=fa.get(g))&&pv(n,o),b=l.createElement("script"),Ve(b),pr(b,"link",n),l.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function Xy(n,o,l,u){var g=(g=Y.current)?Ou(g):null;if(!g)throw Error(a(446));switch(n){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(o=Ji(l.href),l=$t(g).hoistableStyles,u=l.get(o),u||(u={type:"style",instance:null,count:0,state:null},l.set(o,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){n=Ji(l.href);var b=$t(g).hoistableStyles,$=b.get(n);if($||(g=g.ownerDocument||g,$={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},b.set(n,$),(b=g.querySelector(ws(n)))&&!b._p&&($.instance=b,$.state.loading=5),fa.has(n)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},fa.set(n,l),b||AR(g,n,l,$.state))),o&&u===null)throw Error(a(528,""));return $}if(o&&u!==null)throw Error(a(529,""));return null;case"script":return o=l.async,l=l.src,typeof l=="string"&&o&&typeof o!="function"&&typeof o!="symbol"?(o=ki(l),l=$t(g).hoistableScripts,u=l.get(o),u||(u={type:"script",instance:null,count:0,state:null},l.set(o,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,n))}}function Ji(n){return'href="'+jt(n)+'"'}function ws(n){return'link[rel="stylesheet"]['+n+"]"}function Yy(n){return h({},n,{"data-precedence":n.precedence,precedence:null})}function AR(n,o,l,u){n.querySelector('link[rel="preload"][as="style"]['+o+"]")?u.loading=1:(o=n.createElement("link"),u.preload=o,o.addEventListener("load",function(){return u.loading|=1}),o.addEventListener("error",function(){return u.loading|=2}),pr(o,"link",l),Ve(o),n.head.appendChild(o))}function ki(n){return'[src="'+jt(n)+'"]'}function Os(n){return"script[async]"+n}function Qy(n,o,l){if(o.count++,o.instance===null)switch(o.type){case"style":var u=n.querySelector('style[data-href~="'+jt(l.href)+'"]');if(u)return o.instance=u,Ve(u),u;var g=h({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),Ve(u),pr(u,"style",g),$u(u,l.precedence,n),o.instance=u;case"stylesheet":g=Ji(l.href);var b=n.querySelector(ws(g));if(b)return o.state.loading|=4,o.instance=b,Ve(b),b;u=Yy(l),(g=fa.get(g))&&gv(u,g),b=(n.ownerDocument||n).createElement("link"),Ve(b);var $=b;return $._p=new Promise(function(P,k){$.onload=P,$.onerror=k}),pr(b,"link",u),o.state.loading|=4,$u(b,l.precedence,n),o.instance=b;case"script":return b=ki(l.src),(g=n.querySelector(Os(b)))?(o.instance=g,Ve(g),g):(u=l,(g=fa.get(b))&&(u=h({},l),pv(u,g)),n=n.ownerDocument||n,g=n.createElement("script"),Ve(g),pr(g,"link",u),n.head.appendChild(g),o.instance=g);case"void":return null;default:throw Error(a(443,o.type))}else o.type==="stylesheet"&&(o.state.loading&4)===0&&(u=o.instance,o.state.loading|=4,$u(u,l.precedence,n));return o.instance}function $u(n,o,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=u.length?u[u.length-1]:null,b=g,$=0;$ title"):null)}function zR(n,o,l){if(l===1||o.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof o.precedence!="string"||typeof o.href!="string"||o.href==="")break;return!0;case"link":if(typeof o.rel!="string"||typeof o.href!="string"||o.href===""||o.onLoad||o.onError)break;switch(o.rel){case"stylesheet":return n=o.disabled,typeof o.precedence=="string"&&n==null;default:return!0}case"script":if(o.async&&typeof o.async!="function"&&typeof o.async!="symbol"&&!o.onLoad&&!o.onError&&o.src&&typeof o.src=="string")return!0}return!1}function ky(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function jR(n,o,l,u){if(l.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var g=Ji(u.href),b=o.querySelector(ws(g));if(b){o=b._p,o!==null&&typeof o=="object"&&typeof o.then=="function"&&(n.count++,n=Tu.bind(n),o.then(n,n)),l.state.loading|=4,l.instance=b,Ve(b);return}b=o.ownerDocument||o,u=Yy(u),(g=fa.get(g))&&gv(u,g),b=b.createElement("link"),Ve(b);var $=b;$._p=new Promise(function(P,k){$.onload=P,$.onerror=k}),pr(b,"link",u),l.instance=b}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(l,o),(o=l.state.preload)&&(l.state.loading&3)===0&&(n.count++,l=Tu.bind(n),o.addEventListener("load",l),o.addEventListener("error",l))}}var hv=0;function DR(n,o){return n.stylesheets&&n.count===0&&Mu(n,n.stylesheets),0hv?50:800)+o);return n.unsuspend=l,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(g)}}:null}function Tu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Mu(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var _u=null;function Mu(n,o){n.stylesheets=null,n.unsuspend!==null&&(n.count++,_u=new Map,o.forEach(IR,n),_u=null,Tu.call(n))}function IR(n,o){if(!(o.state.loading&4)){var l=_u.get(n);if(l)var u=l.get(null);else{l=new Map,_u.set(n,l);for(var g=n.querySelectorAll("link[data-precedence],style[data-precedence]"),b=0;b"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),$v.exports=ZR(),$v.exports}var kR=JR();const l9=Ml(kR);var Mv={exports:{}};/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/var ES;function eT(){return ES||(ES=1,(function(e){(function(){var t={}.hasOwnProperty;function r(){for(var s="",c=0;c1&&arguments[1]!==void 0?arguments[1]:{},r=[];return ue.Children.forEach(e,function(a){a==null&&!t.keepEmpty||(Array.isArray(a)?r=r.concat(kr(a)):Bx(a)&&a.props?r=r.concat(kr(a.props.children,t)):r.push(a))}),r}var jg={},oT=function(t){};function iT(e,t){}function lT(e,t){}function sT(){jg={}}function Lx(e,t,r){!t&&!jg[r]&&(e(!1,r),jg[r]=!0)}function xr(e,t){Lx(iT,e,t)}function cT(e,t){Lx(lT,e,t)}xr.preMessage=oT;xr.resetWarned=sT;xr.noteOnce=cT;function uT(e,t){if(pt(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var a=r.call(e,t);if(pt(a)!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Hx(e){var t=uT(e,"string");return pt(t)=="symbol"?t:t+""}function K(e,t,r){return(t=Hx(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function wS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,a)}return r}function J(e){for(var t=1;t=19)return!0;var i=Av.isMemo(t)?t.type.type:t.type;return!(typeof i=="function"&&!((r=i.prototype)!==null&&r!==void 0&&r.render)&&i.$$typeof!==Av.ForwardRef||typeof t=="function"&&!((a=t.prototype)!==null&&a!==void 0&&a.render)&&t.$$typeof!==Av.ForwardRef)};function qp(e){return f.isValidElement(e)&&!Bx(e)}var s9=function(t){return qp(t)&&Ho(t)},Nl=function(t){if(t&&qp(t)){var r=t;return r.props.propertyIsEnumerable("ref")?r.props.ref:r.ref}return null},Ig=f.createContext(null);function pT(e){var t=e.children,r=e.onBatchResize,a=f.useRef(0),i=f.useRef([]),s=f.useContext(Ig),c=f.useCallback(function(d,m,v){a.current+=1;var p=a.current;i.current.push({size:d,element:m,data:v}),Promise.resolve().then(function(){p===a.current&&(r==null||r(i.current),i.current=[])}),s==null||s(d,m,v)},[r,s]);return f.createElement(Ig.Provider,{value:c},t)}var Fx=(function(){if(typeof Map<"u")return Map;function e(t,r){var a=-1;return t.some(function(i,s){return i[0]===r?(a=s,!0):!1}),a}return(function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var a=e(this.__entries__,r),i=this.__entries__[a];return i&&i[1]},t.prototype.set=function(r,a){var i=e(this.__entries__,r);~i?this.__entries__[i][1]=a:this.__entries__.push([r,a])},t.prototype.delete=function(r){var a=this.__entries__,i=e(a,r);~i&&a.splice(i,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,a){a===void 0&&(a=null);for(var i=0,s=this.__entries__;i0},e.prototype.connect_=function(){!Pg||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),xT?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Pg||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,a=r===void 0?"":r,i=CT.some(function(s){return!!~a.indexOf(s)});i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e})(),Vx=(function(e,t){for(var r=0,a=Object.keys(t);r"u"||!(Element instanceof Object))){if(!(t instanceof Sl(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(t)||(r.set(t,new NT(t)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof Sl(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(t)&&(r.delete(t),r.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(r){r.isActive()&&t.activeObservations_.push(r)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,r=this.activeObservations_.map(function(a){return new AT(a.target,a.broadcastRect())});this.callback_.call(t,r,t),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e})(),qx=typeof WeakMap<"u"?new WeakMap:new Fx,Gx=(function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ET.getInstance(),a=new zT(t,r,this);qx.set(this,a)}return e})();["observe","unobserve","disconnect"].forEach(function(e){Gx.prototype[e]=function(){var t;return(t=qx.get(this))[e].apply(t,arguments)}});var jT=(function(){return typeof pf.ResizeObserver<"u"?pf.ResizeObserver:Gx})(),Do=new Map;function DT(e){e.forEach(function(t){var r,a=t.target;(r=Do.get(a))===null||r===void 0||r.forEach(function(i){return i(a)})})}var Wx=new jT(DT);function IT(e,t){Do.has(e)||(Do.set(e,new Set),Wx.observe(e)),Do.get(e).add(t)}function PT(e,t){Do.has(e)&&(Do.get(e).delete(t),Do.get(e).size||(Wx.unobserve(e),Do.delete(e)))}function Kn(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function TS(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,a=Array(t);r1&&arguments[1]!==void 0?arguments[1]:1;_S+=1;var a=_S;function i(s){if(s===0)Zx(a),t();else{var c=Yx(function(){i(s-1)});Wp.set(a,c)}}return i(r),a};bn.cancel=function(e){var t=Wp.get(e);return Zx(e),Qx(t)};function Jx(e){if(Array.isArray(e))return e}function GT(e,t){var r=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(r!=null){var a,i,s,c,d=[],m=!0,v=!1;try{if(s=(r=r.call(e)).next,t===0){if(Object(r)!==r)return;m=!1}else for(;!(m=(a=s.call(r)).done)&&(d.push(a.value),d.length!==t);m=!0);}catch(p){v=!0,i=p}finally{try{if(!m&&r.return!=null&&(c=r.return(),Object(c)!==c))return}finally{if(v)throw i}}return d}}function kx(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function oe(e,t){return Jx(e)||GT(e,t)||Gp(e,t)||kx()}function tc(e){for(var t=0,r,a=0,i=e.length;i>=4;++a,i-=4)r=e.charCodeAt(a)&255|(e.charCodeAt(++a)&255)<<8|(e.charCodeAt(++a)&255)<<16|(e.charCodeAt(++a)&255)<<24,r=(r&65535)*1540483477+((r>>>16)*59797<<16),r^=r>>>24,t=(r&65535)*1540483477+((r>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(i){case 3:t^=(e.charCodeAt(a+2)&255)<<16;case 2:t^=(e.charCodeAt(a+1)&255)<<8;case 1:t^=e.charCodeAt(a)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}function Rr(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}function WT(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}var MS="data-rc-order",NS="data-rc-priority",KT="rc-util-key",Lg=new Map;function eE(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=e.mark;return t?t.startsWith("data-")?t:"data-".concat(t):KT}function Vf(e){if(e.attachTo)return e.attachTo;var t=document.querySelector("head");return t||document.body}function XT(e){return e==="queue"?"prependQueue":e?"prepend":"append"}function Kp(e){return Array.from((Lg.get(e)||e).children).filter(function(t){return t.tagName==="STYLE"})}function tE(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!Rr())return null;var r=t.csp,a=t.prepend,i=t.priority,s=i===void 0?0:i,c=XT(a),d=c==="prependQueue",m=document.createElement("style");m.setAttribute(MS,c),d&&s&&m.setAttribute(NS,"".concat(s)),r!=null&&r.nonce&&(m.nonce=r==null?void 0:r.nonce),m.innerHTML=e;var v=Vf(t),p=v.firstChild;if(a){if(d){var h=(t.styles||Kp(v)).filter(function(y){if(!["prepend","prependQueue"].includes(y.getAttribute(MS)))return!1;var C=Number(y.getAttribute(NS)||0);return s>=C});if(h.length)return v.insertBefore(m,h[h.length-1].nextSibling),m}v.insertBefore(m,p)}else v.appendChild(m);return m}function nE(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=Vf(t);return(t.styles||Kp(r)).find(function(a){return a.getAttribute(eE(t))===e})}function nc(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=nE(e,t);if(r){var a=Vf(t);a.removeChild(r)}}function YT(e,t){var r=Lg.get(e);if(!r||!WT(document,r)){var a=tE("",t),i=a.parentNode;Lg.set(e,i),e.removeChild(a)}}function no(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=Vf(r),i=Kp(a),s=J(J({},r),{},{styles:i});YT(a,s);var c=nE(t,s);if(c){var d,m;if((d=s.csp)!==null&&d!==void 0&&d.nonce&&c.nonce!==((m=s.csp)===null||m===void 0?void 0:m.nonce)){var v;c.nonce=(v=s.csp)===null||v===void 0?void 0:v.nonce}return c.innerHTML!==e&&(c.innerHTML=e),c}var p=tE(e,s);return p.setAttribute(eE(s),t),p}function QT(e,t){if(e==null)return{};var r={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(t.indexOf(a)!==-1)continue;r[a]=e[a]}return r}function zt(e,t){if(e==null)return{};var r,a,i=QT(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a2&&arguments[2]!==void 0?arguments[2]:!1,a=new Set;function i(s,c){var d=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,m=a.has(s);if(xr(!m,"Warning: There may be circular references"),m)return!1;if(s===c)return!0;if(r&&d>1)return!1;a.add(s);var v=d+1;if(Array.isArray(s)){if(!Array.isArray(c)||s.length!==c.length)return!1;for(var p=0;p1&&arguments[1]!==void 0?arguments[1]:!1,c={map:this.cache};return r.forEach(function(d){if(!c)c=void 0;else{var m;c=(m=c)===null||m===void 0||(m=m.map)===null||m===void 0?void 0:m.get(d)}}),(a=c)!==null&&a!==void 0&&a.value&&s&&(c.value[1]=this.cacheCallTimes++),(i=c)===null||i===void 0?void 0:i.value}},{key:"get",value:function(r){var a;return(a=this.internalGet(r,!0))===null||a===void 0?void 0:a[0]}},{key:"has",value:function(r){return!!this.internalGet(r)}},{key:"set",value:function(r,a){var i=this;if(!this.has(r)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var s=this.keys.reduce(function(v,p){var h=oe(v,2),y=h[1];return i.internalGet(p)[1]0,void 0),AS+=1}return Xn(e,[{key:"getDerivativeToken",value:function(r){return this.derivatives.reduce(function(a,i){return i(r,a)},void 0)}}]),e})(),zv=new Xp;function Fg(e){var t=Array.isArray(e)?e:[e];return zv.has(t)||zv.set(t,new rE(t)),zv.get(t)}var t_=new WeakMap,jv={};function n_(e,t){for(var r=t_,a=0;a3&&arguments[3]!==void 0?arguments[3]:{},i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;if(i)return e;var s=J(J({},a),{},K(K({},Cl,t),Oa,r)),c=Object.keys(s).map(function(d){var m=s[d];return m?"".concat(d,'="').concat(m,'"'):null}).filter(function(d){return d}).join(" ");return"")}var nf=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return"--".concat(r?"".concat(r,"-"):"").concat(t).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,"$1-$2").replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase()},r_=function(t,r,a){return Object.keys(t).length?".".concat(r).concat(a!=null&&a.scope?".".concat(a.scope):"","{").concat(Object.entries(t).map(function(i){var s=oe(i,2),c=s[0],d=s[1];return"".concat(c,":").concat(d,";")}).join(""),"}"):""},aE=function(t,r,a){var i={},s={};return Object.entries(t).forEach(function(c){var d,m,v=oe(c,2),p=v[0],h=v[1];if(a!=null&&(d=a.preserve)!==null&&d!==void 0&&d[p])s[p]=h;else if((typeof h=="string"||typeof h=="number")&&!(a!=null&&(m=a.ignore)!==null&&m!==void 0&&m[p])){var y,C=nf(p,a==null?void 0:a.prefix);i[C]=typeof h=="number"&&!(a!=null&&(y=a.unitless)!==null&&y!==void 0&&y[p])?"".concat(h,"px"):String(h),s[p]="var(".concat(C,")")}}),[s,r_(i,r,{scope:a==null?void 0:a.scope})]},DS=Rr()?f.useLayoutEffect:f.useEffect,nn=function(t,r){var a=f.useRef(!0);DS(function(){return t(a.current)},r),DS(function(){return a.current=!1,function(){a.current=!0}},[])},Ug=function(t,r){nn(function(a){if(!a)return t()},r)},a_=J({},Lf),IS=a_.useInsertionEffect,o_=function(t,r,a){f.useMemo(t,a),nn(function(){return r(!0)},a)},i_=IS?function(e,t,r){return IS(function(){return e(),t()},r)}:o_,l_=J({},Lf),s_=l_.useInsertionEffect,c_=function(t){var r=[],a=!1;function i(s){a||r.push(s)}return f.useEffect(function(){return a=!1,function(){a=!0,r.length&&r.forEach(function(s){return s()})}},t),i},u_=function(){return function(t){t()}},f_=typeof s_<"u"?c_:u_;function Yp(e,t,r,a,i){var s=f.useContext(hc),c=s.cache,d=[e].concat(Ue(t)),m=Hg(d),v=f_([m]),p=function(w){c.opUpdate(m,function(x){var S=x||[void 0,void 0],E=oe(S,2),O=E[0],R=O===void 0?0:O,_=E[1],T=_,M=T||r(),N=[R,M];return w?w(N):N})};f.useMemo(function(){p()},[m]);var h=c.opGet(m),y=h[1];return i_(function(){i==null||i(y)},function(C){return p(function(w){var x=oe(w,2),S=x[0],E=x[1];return C&&S===0&&(i==null||i(y)),[S+1,E]}),function(){c.opUpdate(m,function(w){var x=w||[],S=oe(x,2),E=S[0],O=E===void 0?0:E,R=S[1],_=O-1;return _===0?(v(function(){(C||!c.opGet(m))&&(a==null||a(R,!1))}),null):[O-1,R]})}},[m]),y}var d_={},m_="css",li=new Map;function v_(e){li.set(e,(li.get(e)||0)+1)}function g_(e,t){if(typeof document<"u"){var r=document.querySelectorAll("style[".concat(Cl,'="').concat(e,'"]'));r.forEach(function(a){if(a[Io]===t){var i;(i=a.parentNode)===null||i===void 0||i.removeChild(a)}})}}var p_=0;function h_(e,t){li.set(e,(li.get(e)||0)-1);var r=new Set;li.forEach(function(a,i){a<=0&&r.add(i)}),li.size-r.size>p_&&r.forEach(function(a){g_(a,t),li.delete(a)})}var b_=function(t,r,a,i){var s=a.getDerivativeToken(t),c=J(J({},s),r);return i&&(c=i(c)),c},oE="token";function y_(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=f.useContext(hc),i=a.cache.instanceId,s=a.container,c=r.salt,d=c===void 0?"":c,m=r.override,v=m===void 0?d_:m,p=r.formatToken,h=r.getComputedToken,y=r.cssVar,C=n_(function(){return Object.assign.apply(Object,[{}].concat(Ue(t)))},t),w=Ys(C),x=Ys(v),S=y?Ys(y):"",E=Yp(oE,[d,e.id,w,x,S],function(){var O,R=h?h(C,v,e):b_(C,v,e,p),_=J({},R),T="";if(y){var M=aE(R,y.key,{prefix:y.prefix,ignore:y.ignore,unitless:y.unitless,preserve:y.preserve}),N=oe(M,2);R=N[0],T=N[1]}var A=jS(R,d);R._tokenKey=A,_._tokenKey=jS(_,d);var j=(O=y==null?void 0:y.key)!==null&&O!==void 0?O:A;R._themeKey=j,v_(j);var I="".concat(m_,"-").concat(tc(A));return R._hashId=I,[R,I,_,T,(y==null?void 0:y.key)||""]},function(O){h_(O[0]._themeKey,i)},function(O){var R=oe(O,4),_=R[0],T=R[3];if(y&&T){var M=no(T,tc("css-variables-".concat(_._themeKey)),{mark:Oa,prepend:"queue",attachTo:s,priority:-999});M[Io]=i,M.setAttribute(Cl,_._themeKey)}});return E}var S_=function(t,r,a){var i=oe(t,5),s=i[2],c=i[3],d=i[4],m=a||{},v=m.plain;if(!c)return null;var p=s._tokenKey,h=-999,y={"data-rc-order":"prependQueue","data-rc-priority":"".concat(h)},C=bf(c,d,p,y,v);return[h,p,C]},C_={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},iE="comm",lE="rule",sE="decl",x_="@import",E_="@namespace",w_="@keyframes",O_="@layer",$_=Math.abs,Qs=String.fromCharCode;function cE(e){return e.trim()}function qg(e,t,r){return e.replace(t,r)}function hl(e,t){return e.charCodeAt(t)|0}function xl(e,t,r){return e.slice(t,r)}function ja(e){return e.length}function R_(e){return e.length}function Bu(e,t){return t.push(e),e}var Uf=1,El=1,uE=0,ha=0,er=0,Al="";function Qp(e,t,r,a,i,s,c,d){return{value:e,root:t,parent:r,type:a,props:i,children:s,line:Uf,column:El,length:c,return:"",siblings:d}}function T_(){return er}function __(){return er=ha>0?hl(Al,--ha):0,El--,er===10&&(El=1,Uf--),er}function $a(){return er=ha2||ac(er)>3?"":" "}function z_(e,t){for(;--t&&$a()&&!(er<48||er>102||er>57&&er<65||er>70&&er<97););return qf(e,rf()+(t<6&&Po()==32&&$a()==32))}function Gg(e){for(;$a();)switch(er){case e:return ha;case 34:case 39:e!==34&&e!==39&&Gg(er);break;case 40:e===41&&Gg(e);break;case 92:$a();break}return ha}function j_(e,t){for(;$a()&&e+er!==57;)if(e+er===84&&Po()===47)break;return"/*"+qf(t,ha-1)+"*"+Qs(e===47?e:$a())}function D_(e){for(;!ac(Po());)$a();return qf(e,ha)}function I_(e){return N_(af("",null,null,null,[""],e=M_(e),0,[0],e))}function af(e,t,r,a,i,s,c,d,m){for(var v=0,p=0,h=c,y=0,C=0,w=0,x=1,S=1,E=1,O=0,R=0,_="",T=i,M=s,N=a,A=_;S;)switch(w=R,R=$a()){case 40:w!=108&&hl(A,h-1)==58?(O++,A+="("):A+=Dv(R);break;case 41:O--,A+=")";break;case 34:case 39:case 91:A+=Dv(R);break;case 9:case 10:case 13:case 32:if(O>0){A+=Qs(R);break}A+=A_(w);break;case 92:A+=z_(rf()-1,7);continue;case 47:switch(Po()){case 42:case 47:Bu(P_(j_($a(),rf()),t,r,m),m),(ac(w||1)==5||ac(Po()||1)==5)&&ja(A)&&xl(A,-1,void 0)!==" "&&(A+=" ");break;default:A+="/"}break;case 123*x:d[v++]=ja(A)*E;case 125*x:case 59:case 0:if(O>0&&R){A+=Qs(R);break}switch(R){case 0:case 125:S=0;case 59+p:E==-1&&(A=qg(A,/\f/g,"")),C>0&&(ja(A)-h||x===0)&&Bu(C>32?BS(A+";",a,r,h-1,m):BS(qg(A," ","")+";",a,r,h-2,m),m);break;case 59:A+=";";default:if(Bu(N=PS(A,t,r,v,p,i,d,_,T=[],M=[],h,s),s),R===123)if(p===0)af(A,t,N,N,T,s,h,d,M);else{switch(y){case 99:if(hl(A,3)===110)break;case 108:if(hl(A,2)===97)break;default:p=0;case 100:case 109:case 115:}p?af(e,N,N,a&&Bu(PS(e,N,N,0,0,i,d,_,i,T=[],h,M),M),i,M,h,d,a?T:M):af(A,N,N,N,[""],M,0,d,M)}}v=p=C=0,x=E=1,_=A="",h=c;break;case 58:h=1+ja(A),C=w;default:if(x<1){if(R==123)--x;else if(R==125&&x++==0&&__()==125)continue}switch(A+=Qs(R),R*x){case 38:E=p>0?1:(A+="\f",-1);break;case 44:if(O>0)break;d[v++]=(ja(A)-1)*E,E=1;break;case 64:Po()===45&&(A+=Dv($a())),y=Po(),p=h=ja(_=A+=D_(rf())),R++;break;case 45:w===45&&ja(A)==2&&(x=0)}}return s}function PS(e,t,r,a,i,s,c,d,m,v,p,h){for(var y=i-1,C=i===0?s:[""],w=R_(C),x=0,S=0,E=0;x0?C[O]+" "+R:qg(R,/&\f/g,C[O])))&&(m[E++]=_);return Qp(e,t,r,i===0?lE:d,m,v,p,h)}function P_(e,t,r,a){return Qp(e,t,r,iE,Qs(T_()),xl(e,2,-2),0,a)}function BS(e,t,r,a,i){return Qp(e,t,r,sE,xl(e,0,a),xl(e,a+1,-1),a,i)}function Wg(e,t){for(var r="",a=0;a1&&arguments[1]!==void 0?arguments[1]:{},a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{root:!0,parentSelectors:[]},i=a.root,s=a.injectHash,c=a.parentSelectors,d=r.hashId,m=r.layer;r.path;var v=r.hashPriority,p=r.transformers,h=p===void 0?[]:p;r.linters;var y="",C={};function w(E){var O=E.getName(d);if(!C[O]){var R=e(E.style,r,{root:!1,parentSelectors:c}),_=oe(R,1),T=_[0];C[O]="@keyframes ".concat(E.getName(d)).concat(T)}}function x(E){var O=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return E.forEach(function(R){Array.isArray(R)?x(R,O):R&&O.push(R)}),O}var S=x(Array.isArray(t)?t:[t]);return S.forEach(function(E){var O=typeof E=="string"&&!i?{}:E;if(typeof O=="string")y+="".concat(O,` +`);else if(O._keyframe)w(O);else{var R=h.reduce(function(_,T){var M;return(T==null||(M=T.visit)===null||M===void 0?void 0:M.call(T,_))||_},O);Object.keys(R).forEach(function(_){var T=R[_];if(pt(T)==="object"&&T&&(_!=="animationName"||!T._keyframe)&&!U_(T)){var M=!1,N=_.trim(),A=!1;(i||s)&&d?N.startsWith("@")?M=!0:N==="&"?N=HS("",d,v):N=HS(_,d,v):i&&!d&&(N==="&"||N==="")&&(N="",A=!0);var j=e(T,r,{root:A,injectHash:M,parentSelectors:[].concat(Ue(c),[N])}),I=oe(j,2),L=I[0],B=I[1];C=J(J({},C),B),y+="".concat(N).concat(L)}else{let Q=function(z,F){var q=z.replace(/[A-Z]/g,function(Z){return"-".concat(Z.toLowerCase())}),ee=F;!C_[z]&&typeof ee=="number"&&ee!==0&&(ee="".concat(ee,"px")),z==="animationName"&&F!==null&&F!==void 0&&F._keyframe&&(w(F),ee=F.getName(d)),y+="".concat(q,":").concat(ee,";")};var V,H=(V=T==null?void 0:T.value)!==null&&V!==void 0?V:T;pt(T)==="object"&&T!==null&&T!==void 0&&T[mE]&&Array.isArray(H)?H.forEach(function(z){Q(_,z)}):Q(_,H)}})}}),i?m&&(y&&(y="@layer ".concat(m.name," {").concat(y,"}")),m.dependencies&&(C["@layer ".concat(m.name)]=m.dependencies.map(function(E){return"@layer ".concat(E,", ").concat(m.name,";")}).join(` +`))):y="{".concat(y,"}"),[y,C]};function vE(e,t){return tc("".concat(e.join("%")).concat(t))}function G_(){return null}var gE="style";function Kg(e,t){var r=e.token,a=e.path,i=e.hashId,s=e.layer,c=e.nonce,d=e.clientOnly,m=e.order,v=m===void 0?0:m,p=f.useContext(hc),h=p.autoClear;p.mock;var y=p.defaultCache,C=p.hashPriority,w=p.container,x=p.ssrInline,S=p.transformers,E=p.linters,O=p.cache,R=p.layer,_=r._tokenKey,T=[_];R&&T.push("layer"),T.push.apply(T,Ue(a));var M=Vg,N=Yp(gE,T,function(){var B=T.join("|");if(H_(B)){var V=F_(B),H=oe(V,2),Q=H[0],z=H[1];if(Q)return[Q,_,z,{},d,v]}var F=t(),q=q_(F,{hashId:i,hashPriority:C,layer:R?s:void 0,path:a.join("-"),transformers:S,linters:E}),ee=oe(q,2),Z=ee[0],D=ee[1],U=of(Z),G=vE(T,U);return[U,_,G,D,d,v]},function(B,V){var H=oe(B,3),Q=H[2];(V||h)&&Vg&&nc(Q,{mark:Oa,attachTo:w})},function(B){var V=oe(B,4),H=V[0];V[1];var Q=V[2],z=V[3];if(M&&H!==fE){var F={mark:Oa,prepend:R?!1:"queue",attachTo:w,priority:v},q=typeof c=="function"?c():c;q&&(F.csp={nonce:q});var ee=[],Z=[];Object.keys(z).forEach(function(U){U.startsWith("@layer")?ee.push(U):Z.push(U)}),ee.forEach(function(U){no(of(z[U]),"_layer-".concat(U),J(J({},F),{},{prepend:!0}))});var D=no(H,Q,F);D[Io]=O.instanceId,D.setAttribute(Cl,_),Z.forEach(function(U){no(of(z[U]),"_effect-".concat(U),F)})}}),A=oe(N,3),j=A[0],I=A[1],L=A[2];return function(B){var V;return!x||M||!y?V=f.createElement(G_,null):V=f.createElement("style",Le({},K(K({},Cl,I),Oa,L),{dangerouslySetInnerHTML:{__html:j}})),f.createElement(f.Fragment,null,V,B)}}var W_=function(t,r,a){var i=oe(t,6),s=i[0],c=i[1],d=i[2],m=i[3],v=i[4],p=i[5],h=a||{},y=h.plain;if(v)return null;var C=s,w={"data-rc-order":"prependQueue","data-rc-priority":"".concat(p)};return C=bf(s,c,d,w,y),m&&Object.keys(m).forEach(function(x){if(!r[x]){r[x]=!0;var S=of(m[x]),E=bf(S,c,"_effect-".concat(x),w,y);x.startsWith("@layer")?C=E+C:C+=E}}),[p,d,C]},pE="cssVar",K_=function(t,r){var a=t.key,i=t.prefix,s=t.unitless,c=t.ignore,d=t.token,m=t.scope,v=m===void 0?"":m,p=f.useContext(hc),h=p.cache.instanceId,y=p.container,C=d._tokenKey,w=[].concat(Ue(t.path),[a,v,C]),x=Yp(pE,w,function(){var S=r(),E=aE(S,a,{prefix:i,unitless:s,ignore:c,scope:v}),O=oe(E,2),R=O[0],_=O[1],T=vE(w,_);return[R,_,T,a]},function(S){var E=oe(S,3),O=E[2];Vg&&nc(O,{mark:Oa,attachTo:y})},function(S){var E=oe(S,3),O=E[1],R=E[2];if(O){var _=no(O,R,{mark:Oa,prepend:"queue",attachTo:y,priority:-999});_[Io]=h,_.setAttribute(Cl,a)}});return x},X_=function(t,r,a){var i=oe(t,4),s=i[1],c=i[2],d=i[3],m=a||{},v=m.plain;if(!s)return null;var p=-999,h={"data-rc-order":"prependQueue","data-rc-priority":"".concat(p)},y=bf(s,d,c,h,v);return[p,c,y]};K(K(K({},gE,W_),oE,S_),pE,X_);var rn=(function(){function e(t,r){Kn(this,e),K(this,"name",void 0),K(this,"style",void 0),K(this,"_keyframe",!0),this.name=t,this.style=r}return Xn(e,[{key:"getName",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return r?"".concat(r,"-").concat(this.name):this.name}}]),e})();function tl(e){return e.notSplit=!0,e}tl(["borderTop","borderBottom"]),tl(["borderTop"]),tl(["borderBottom"]),tl(["borderLeft","borderRight"]),tl(["borderLeft"]),tl(["borderRight"]);var Zp=f.createContext({});function hE(e){return Jx(e)||Xx(e)||Gp(e)||kx()}function Da(e,t){for(var r=e,a=0;a3&&arguments[3]!==void 0?arguments[3]:!1;return t.length&&a&&r===void 0&&!Da(e,t.slice(0,-1))?e:bE(e,t,r,a)}function Y_(e){return pt(e)==="object"&&e!==null&&Object.getPrototypeOf(e)===Object.prototype}function FS(e){return Array.isArray(e)?[]:{}}var Q_=typeof Reflect>"u"?Object.keys:Reflect.ownKeys;function ml(){for(var e=arguments.length,t=new Array(e),r=0;r{const e=()=>{};return e.deprecated=Z_,e},k_=f.createContext(void 0);var yE={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"Page",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages",page_size:"Page Size"},eM={yearFormat:"YYYY",dayFormat:"D",cellMeridiemFormat:"A",monthBeforeYear:!0},tM=J(J({},eM),{},{locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"OK",clear:"Clear",week:"Week",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",dateFormat:"M/D/YYYY",dateTimeFormat:"M/D/YYYY HH:mm:ss",previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"});const SE={placeholder:"Select time",rangePlaceholder:["Start time","End time"]},VS={lang:Object.assign({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},tM),timePickerLocale:Object.assign({},SE)},Yr="${label} is not a valid ${type}",gi={locale:"en",Pagination:yE,DatePicker:VS,TimePicker:SE,Calendar:VS,global:{placeholder:"Please select",close:"Close"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckAll:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Tour:{Next:"Next",Previous:"Previous",Finish:"Finish"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",deselectAll:"Deselect all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand",collapse:"Collapse"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:Yr,method:Yr,array:Yr,object:Yr,number:Yr,date:Yr,boolean:Yr,integer:Yr,float:Yr,regexp:Yr,email:Yr,url:Yr,hex:Yr},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"},QRCode:{expired:"QR code expired",refresh:"Refresh",scanned:"Scanned"},ColorPicker:{presetEmpty:"Empty",transparent:"Transparent",singleColor:"Single",gradientColor:"Gradient"}};Object.assign({},gi.Modal);let lf=[];const US=()=>lf.reduce((e,t)=>Object.assign(Object.assign({},e),t),gi.Modal);function nM(e){if(e){const t=Object.assign({},e);return lf.push(t),US(),()=>{lf=lf.filter(r=>r!==t),US()}}Object.assign({},gi.Modal)}const kp=f.createContext(void 0),zl=(e,t)=>{const r=f.useContext(kp),a=f.useMemo(()=>{var s;const c=t||gi[e],d=(s=r==null?void 0:r[e])!==null&&s!==void 0?s:{};return Object.assign(Object.assign({},typeof c=="function"?c():c),d||{})},[e,t,r]),i=f.useMemo(()=>{const s=r==null?void 0:r.locale;return r!=null&&r.exist&&!s?gi.locale:s},[r]);return[a,i]},rM="internalMark",aM=e=>{const{locale:t={},children:r,_ANT_MARK__:a}=e;f.useEffect(()=>nM(t==null?void 0:t.Modal),[t]);const i=f.useMemo(()=>Object.assign(Object.assign({},t),{exist:!0}),[t]);return f.createElement(kp.Provider,{value:i},r)},CE={blue:"#1677FF",purple:"#722ED1",cyan:"#13C2C2",green:"#52C41A",magenta:"#EB2F96",pink:"#EB2F96",red:"#F5222D",orange:"#FA8C16",yellow:"#FADB14",volcano:"#FA541C",geekblue:"#2F54EB",gold:"#FAAD14",lime:"#A0D911"},oc=Object.assign(Object.assign({},CE),{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",colorLink:"",colorTextBase:"",colorBgBase:"",fontFamily:`-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, +'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', +'Noto Color Emoji'`,fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace",fontSize:14,lineWidth:1,lineType:"solid",motionUnit:.1,motionBase:0,motionEaseOutCirc:"cubic-bezier(0.08, 0.82, 0.17, 1)",motionEaseInOutCirc:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",motionEaseOut:"cubic-bezier(0.215, 0.61, 0.355, 1)",motionEaseInOut:"cubic-bezier(0.645, 0.045, 0.355, 1)",motionEaseOutBack:"cubic-bezier(0.12, 0.4, 0.29, 1.46)",motionEaseInBack:"cubic-bezier(0.71, -0.46, 0.88, 0.6)",motionEaseInQuint:"cubic-bezier(0.755, 0.05, 0.855, 0.06)",motionEaseOutQuint:"cubic-bezier(0.23, 1, 0.32, 1)",borderRadius:6,sizeUnit:4,sizeStep:4,sizePopupArrow:16,controlHeight:32,zIndexBase:0,zIndexPopupBase:1e3,opacityImage:1,wireframe:!1,motion:!0}),cr=Math.round;function Iv(e,t){const r=e.replace(/^[^(]*\((.*)/,"$1").replace(/\).*/,"").match(/\d*\.?\d+%?/g)||[],a=r.map(i=>parseFloat(i));for(let i=0;i<3;i+=1)a[i]=t(a[i]||0,r[i]||"",i);return r[3]?a[3]=r[3].includes("%")?a[3]/100:a[3]:a[3]=1,a}const qS=(e,t,r)=>r===0?e:e/100;function As(e,t){const r=t||255;return e>r?r:e<0?0:e}class On{constructor(t){K(this,"isValid",!0),K(this,"r",0),K(this,"g",0),K(this,"b",0),K(this,"a",1),K(this,"_h",void 0),K(this,"_s",void 0),K(this,"_l",void 0),K(this,"_v",void 0),K(this,"_max",void 0),K(this,"_min",void 0),K(this,"_brightness",void 0);function r(a){return a[0]in t&&a[1]in t&&a[2]in t}if(t)if(typeof t=="string"){let i=function(s){return a.startsWith(s)};const a=t.trim();/^#?[A-F\d]{3,8}$/i.test(a)?this.fromHexString(a):i("rgb")?this.fromRgbString(a):i("hsl")?this.fromHslString(a):(i("hsv")||i("hsb"))&&this.fromHsvString(a)}else if(t instanceof On)this.r=t.r,this.g=t.g,this.b=t.b,this.a=t.a,this._h=t._h,this._s=t._s,this._l=t._l,this._v=t._v;else if(r("rgb"))this.r=As(t.r),this.g=As(t.g),this.b=As(t.b),this.a=typeof t.a=="number"?As(t.a,1):1;else if(r("hsl"))this.fromHsl(t);else if(r("hsv"))this.fromHsv(t);else throw new Error("@ant-design/fast-color: unsupported input "+JSON.stringify(t))}setR(t){return this._sc("r",t)}setG(t){return this._sc("g",t)}setB(t){return this._sc("b",t)}setA(t){return this._sc("a",t,1)}setHue(t){const r=this.toHsv();return r.h=t,this._c(r)}getLuminance(){function t(s){const c=s/255;return c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4)}const r=t(this.r),a=t(this.g),i=t(this.b);return .2126*r+.7152*a+.0722*i}getHue(){if(typeof this._h>"u"){const t=this.getMax()-this.getMin();t===0?this._h=0:this._h=cr(60*(this.r===this.getMax()?(this.g-this.b)/t+(this.g"u"){const t=this.getMax()-this.getMin();t===0?this._s=0:this._s=t/this.getMax()}return this._s}getLightness(){return typeof this._l>"u"&&(this._l=(this.getMax()+this.getMin())/510),this._l}getValue(){return typeof this._v>"u"&&(this._v=this.getMax()/255),this._v}getBrightness(){return typeof this._brightness>"u"&&(this._brightness=(this.r*299+this.g*587+this.b*114)/1e3),this._brightness}darken(t=10){const r=this.getHue(),a=this.getSaturation();let i=this.getLightness()-t/100;return i<0&&(i=0),this._c({h:r,s:a,l:i,a:this.a})}lighten(t=10){const r=this.getHue(),a=this.getSaturation();let i=this.getLightness()+t/100;return i>1&&(i=1),this._c({h:r,s:a,l:i,a:this.a})}mix(t,r=50){const a=this._c(t),i=r/100,s=d=>(a[d]-this[d])*i+this[d],c={r:cr(s("r")),g:cr(s("g")),b:cr(s("b")),a:cr(s("a")*100)/100};return this._c(c)}tint(t=10){return this.mix({r:255,g:255,b:255,a:1},t)}shade(t=10){return this.mix({r:0,g:0,b:0,a:1},t)}onBackground(t){const r=this._c(t),a=this.a+r.a*(1-this.a),i=s=>cr((this[s]*this.a+r[s]*r.a*(1-this.a))/a);return this._c({r:i("r"),g:i("g"),b:i("b"),a})}isDark(){return this.getBrightness()<128}isLight(){return this.getBrightness()>=128}equals(t){return this.r===t.r&&this.g===t.g&&this.b===t.b&&this.a===t.a}clone(){return this._c(this)}toHexString(){let t="#";const r=(this.r||0).toString(16);t+=r.length===2?r:"0"+r;const a=(this.g||0).toString(16);t+=a.length===2?a:"0"+a;const i=(this.b||0).toString(16);if(t+=i.length===2?i:"0"+i,typeof this.a=="number"&&this.a>=0&&this.a<1){const s=cr(this.a*255).toString(16);t+=s.length===2?s:"0"+s}return t}toHsl(){return{h:this.getHue(),s:this.getSaturation(),l:this.getLightness(),a:this.a}}toHslString(){const t=this.getHue(),r=cr(this.getSaturation()*100),a=cr(this.getLightness()*100);return this.a!==1?`hsla(${t},${r}%,${a}%,${this.a})`:`hsl(${t},${r}%,${a}%)`}toHsv(){return{h:this.getHue(),s:this.getSaturation(),v:this.getValue(),a:this.a}}toRgb(){return{r:this.r,g:this.g,b:this.b,a:this.a}}toRgbString(){return this.a!==1?`rgba(${this.r},${this.g},${this.b},${this.a})`:`rgb(${this.r},${this.g},${this.b})`}toString(){return this.toRgbString()}_sc(t,r,a){const i=this.clone();return i[t]=As(r,a),i}_c(t){return new this.constructor(t)}getMax(){return typeof this._max>"u"&&(this._max=Math.max(this.r,this.g,this.b)),this._max}getMin(){return typeof this._min>"u"&&(this._min=Math.min(this.r,this.g,this.b)),this._min}fromHexString(t){const r=t.replace("#","");function a(i,s){return parseInt(r[i]+r[s||i],16)}r.length<6?(this.r=a(0),this.g=a(1),this.b=a(2),this.a=r[3]?a(3)/255:1):(this.r=a(0,1),this.g=a(2,3),this.b=a(4,5),this.a=r[6]?a(6,7)/255:1)}fromHsl({h:t,s:r,l:a,a:i}){if(this._h=t%360,this._s=r,this._l=a,this.a=typeof i=="number"?i:1,r<=0){const y=cr(a*255);this.r=y,this.g=y,this.b=y}let s=0,c=0,d=0;const m=t/60,v=(1-Math.abs(2*a-1))*r,p=v*(1-Math.abs(m%2-1));m>=0&&m<1?(s=v,c=p):m>=1&&m<2?(s=p,c=v):m>=2&&m<3?(c=v,d=p):m>=3&&m<4?(c=p,d=v):m>=4&&m<5?(s=p,d=v):m>=5&&m<6&&(s=v,d=p);const h=a-v/2;this.r=cr((s+h)*255),this.g=cr((c+h)*255),this.b=cr((d+h)*255)}fromHsv({h:t,s:r,v:a,a:i}){this._h=t%360,this._s=r,this._v=a,this.a=typeof i=="number"?i:1;const s=cr(a*255);if(this.r=s,this.g=s,this.b=s,r<=0)return;const c=t/60,d=Math.floor(c),m=c-d,v=cr(a*(1-r)*255),p=cr(a*(1-r*m)*255),h=cr(a*(1-r*(1-m))*255);switch(d){case 0:this.g=h,this.b=v;break;case 1:this.r=p,this.b=v;break;case 2:this.r=v,this.b=h;break;case 3:this.r=v,this.g=p;break;case 4:this.r=h,this.g=v;break;case 5:default:this.g=v,this.b=p;break}}fromHsvString(t){const r=Iv(t,qS);this.fromHsv({h:r[0],s:r[1],v:r[2],a:r[3]})}fromHslString(t){const r=Iv(t,qS);this.fromHsl({h:r[0],s:r[1],l:r[2],a:r[3]})}fromRgbString(t){const r=Iv(t,(a,i)=>i.includes("%")?cr(a/100*255):a);this.r=r[0],this.g=r[1],this.b=r[2],this.a=r[3]}}var Lu=2,GS=.16,oM=.05,iM=.05,lM=.15,xE=5,EE=4,sM=[{index:7,amount:15},{index:6,amount:25},{index:5,amount:30},{index:5,amount:45},{index:5,amount:65},{index:5,amount:85},{index:4,amount:90},{index:3,amount:95},{index:2,amount:97},{index:1,amount:98}];function WS(e,t,r){var a;return Math.round(e.h)>=60&&Math.round(e.h)<=240?a=r?Math.round(e.h)-Lu*t:Math.round(e.h)+Lu*t:a=r?Math.round(e.h)+Lu*t:Math.round(e.h)-Lu*t,a<0?a+=360:a>=360&&(a-=360),a}function KS(e,t,r){if(e.h===0&&e.s===0)return e.s;var a;return r?a=e.s-GS*t:t===EE?a=e.s+GS:a=e.s+oM*t,a>1&&(a=1),r&&t===xE&&a>.1&&(a=.1),a<.06&&(a=.06),Math.round(a*100)/100}function XS(e,t,r){var a;return r?a=e.v+iM*t:a=e.v-lM*t,a=Math.max(0,Math.min(1,a)),Math.round(a*100)/100}function ic(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=[],a=new On(e),i=a.toHsv(),s=xE;s>0;s-=1){var c=new On({h:WS(i,s,!0),s:KS(i,s,!0),v:XS(i,s,!0)});r.push(c)}r.push(a);for(var d=1;d<=EE;d+=1){var m=new On({h:WS(i,d),s:KS(i,d),v:XS(i,d)});r.push(m)}return t.theme==="dark"?sM.map(function(v){var p=v.index,h=v.amount;return new On(t.backgroundColor||"#141414").mix(r[p],h).toHexString()}):r.map(function(v){return v.toHexString()})}var Pv={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1677FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},Xg=["#fff1f0","#ffccc7","#ffa39e","#ff7875","#ff4d4f","#f5222d","#cf1322","#a8071a","#820014","#5c0011"];Xg.primary=Xg[5];var Yg=["#fff2e8","#ffd8bf","#ffbb96","#ff9c6e","#ff7a45","#fa541c","#d4380d","#ad2102","#871400","#610b00"];Yg.primary=Yg[5];var Qg=["#fff7e6","#ffe7ba","#ffd591","#ffc069","#ffa940","#fa8c16","#d46b08","#ad4e00","#873800","#612500"];Qg.primary=Qg[5];var yf=["#fffbe6","#fff1b8","#ffe58f","#ffd666","#ffc53d","#faad14","#d48806","#ad6800","#874d00","#613400"];yf.primary=yf[5];var Zg=["#feffe6","#ffffb8","#fffb8f","#fff566","#ffec3d","#fadb14","#d4b106","#ad8b00","#876800","#614700"];Zg.primary=Zg[5];var Jg=["#fcffe6","#f4ffb8","#eaff8f","#d3f261","#bae637","#a0d911","#7cb305","#5b8c00","#3f6600","#254000"];Jg.primary=Jg[5];var kg=["#f6ffed","#d9f7be","#b7eb8f","#95de64","#73d13d","#52c41a","#389e0d","#237804","#135200","#092b00"];kg.primary=kg[5];var ep=["#e6fffb","#b5f5ec","#87e8de","#5cdbd3","#36cfc9","#13c2c2","#08979c","#006d75","#00474f","#002329"];ep.primary=ep[5];var Sf=["#e6f4ff","#bae0ff","#91caff","#69b1ff","#4096ff","#1677ff","#0958d9","#003eb3","#002c8c","#001d66"];Sf.primary=Sf[5];var tp=["#f0f5ff","#d6e4ff","#adc6ff","#85a5ff","#597ef7","#2f54eb","#1d39c4","#10239e","#061178","#030852"];tp.primary=tp[5];var np=["#f9f0ff","#efdbff","#d3adf7","#b37feb","#9254de","#722ed1","#531dab","#391085","#22075e","#120338"];np.primary=np[5];var rp=["#fff0f6","#ffd6e7","#ffadd2","#ff85c0","#f759ab","#eb2f96","#c41d7f","#9e1068","#780650","#520339"];rp.primary=rp[5];var ap=["#a6a6a6","#999999","#8c8c8c","#808080","#737373","#666666","#404040","#1a1a1a","#000000","#000000"];ap.primary=ap[5];var Bv={red:Xg,volcano:Yg,orange:Qg,gold:yf,yellow:Zg,lime:Jg,green:kg,cyan:ep,blue:Sf,geekblue:tp,purple:np,magenta:rp,grey:ap};function cM(e,{generateColorPalettes:t,generateNeutralColorPalettes:r}){const{colorSuccess:a,colorWarning:i,colorError:s,colorInfo:c,colorPrimary:d,colorBgBase:m,colorTextBase:v}=e,p=t(d),h=t(a),y=t(i),C=t(s),w=t(c),x=r(m,v),S=e.colorLink||e.colorInfo,E=t(S),O=new On(C[1]).mix(new On(C[3]),50).toHexString();return Object.assign(Object.assign({},x),{colorPrimaryBg:p[1],colorPrimaryBgHover:p[2],colorPrimaryBorder:p[3],colorPrimaryBorderHover:p[4],colorPrimaryHover:p[5],colorPrimary:p[6],colorPrimaryActive:p[7],colorPrimaryTextHover:p[8],colorPrimaryText:p[9],colorPrimaryTextActive:p[10],colorSuccessBg:h[1],colorSuccessBgHover:h[2],colorSuccessBorder:h[3],colorSuccessBorderHover:h[4],colorSuccessHover:h[4],colorSuccess:h[6],colorSuccessActive:h[7],colorSuccessTextHover:h[8],colorSuccessText:h[9],colorSuccessTextActive:h[10],colorErrorBg:C[1],colorErrorBgHover:C[2],colorErrorBgFilledHover:O,colorErrorBgActive:C[3],colorErrorBorder:C[3],colorErrorBorderHover:C[4],colorErrorHover:C[5],colorError:C[6],colorErrorActive:C[7],colorErrorTextHover:C[8],colorErrorText:C[9],colorErrorTextActive:C[10],colorWarningBg:y[1],colorWarningBgHover:y[2],colorWarningBorder:y[3],colorWarningBorderHover:y[4],colorWarningHover:y[4],colorWarning:y[6],colorWarningActive:y[7],colorWarningTextHover:y[8],colorWarningText:y[9],colorWarningTextActive:y[10],colorInfoBg:w[1],colorInfoBgHover:w[2],colorInfoBorder:w[3],colorInfoBorderHover:w[4],colorInfoHover:w[4],colorInfo:w[6],colorInfoActive:w[7],colorInfoTextHover:w[8],colorInfoText:w[9],colorInfoTextActive:w[10],colorLinkHover:E[4],colorLink:E[6],colorLinkActive:E[7],colorBgMask:new On("#000").setA(.45).toRgbString(),colorWhite:"#fff"})}const uM=e=>{let t=e,r=e,a=e,i=e;return e<6&&e>=5?t=e+1:e<16&&e>=6?t=e+2:e>=16&&(t=16),e<7&&e>=5?r=4:e<8&&e>=7?r=5:e<14&&e>=8?r=6:e<16&&e>=14?r=7:e>=16&&(r=8),e<6&&e>=2?a=1:e>=6&&(a=2),e>4&&e<8?i=4:e>=8&&(i=6),{borderRadius:e,borderRadiusXS:a,borderRadiusSM:r,borderRadiusLG:t,borderRadiusOuter:i}};function fM(e){const{motionUnit:t,motionBase:r,borderRadius:a,lineWidth:i}=e;return Object.assign({motionDurationFast:`${(r+t).toFixed(1)}s`,motionDurationMid:`${(r+t*2).toFixed(1)}s`,motionDurationSlow:`${(r+t*3).toFixed(1)}s`,lineWidthBold:i+1},uM(a))}const dM=e=>{const{controlHeight:t}=e;return{controlHeightSM:t*.75,controlHeightXS:t*.5,controlHeightLG:t*1.25}};function sf(e){return(e+8)/e}function mM(e){const t=Array.from({length:10}).map((r,a)=>{const i=a-1,s=e*Math.pow(Math.E,i/5),c=a>1?Math.floor(s):Math.ceil(s);return Math.floor(c/2)*2});return t[1]=e,t.map(r=>({size:r,lineHeight:sf(r)}))}const vM=e=>{const t=mM(e),r=t.map(p=>p.size),a=t.map(p=>p.lineHeight),i=r[1],s=r[0],c=r[2],d=a[1],m=a[0],v=a[2];return{fontSizeSM:s,fontSize:i,fontSizeLG:c,fontSizeXL:r[3],fontSizeHeading1:r[6],fontSizeHeading2:r[5],fontSizeHeading3:r[4],fontSizeHeading4:r[3],fontSizeHeading5:r[2],lineHeight:d,lineHeightLG:v,lineHeightSM:m,fontHeight:Math.round(d*i),fontHeightLG:Math.round(v*c),fontHeightSM:Math.round(m*s),lineHeightHeading1:a[6],lineHeightHeading2:a[5],lineHeightHeading3:a[4],lineHeightHeading4:a[3],lineHeightHeading5:a[2]}};function gM(e){const{sizeUnit:t,sizeStep:r}=e;return{sizeXXL:t*(r+8),sizeXL:t*(r+4),sizeLG:t*(r+2),sizeMD:t*(r+1),sizeMS:t*r,size:t*r,sizeSM:t*(r-1),sizeXS:t*(r-2),sizeXXS:t*(r-3)}}const da=(e,t)=>new On(e).setA(t).toRgbString(),zs=(e,t)=>new On(e).darken(t).toHexString(),pM=e=>{const t=ic(e);return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[4],6:t[5],7:t[6],8:t[4],9:t[5],10:t[6]}},hM=(e,t)=>{const r=e||"#fff",a=t||"#000";return{colorBgBase:r,colorTextBase:a,colorText:da(a,.88),colorTextSecondary:da(a,.65),colorTextTertiary:da(a,.45),colorTextQuaternary:da(a,.25),colorFill:da(a,.15),colorFillSecondary:da(a,.06),colorFillTertiary:da(a,.04),colorFillQuaternary:da(a,.02),colorBgSolid:da(a,1),colorBgSolidHover:da(a,.75),colorBgSolidActive:da(a,.95),colorBgLayout:zs(r,4),colorBgContainer:zs(r,0),colorBgElevated:zs(r,0),colorBgSpotlight:da(a,.85),colorBgBlur:"transparent",colorBorder:zs(r,15),colorBorderSecondary:zs(r,6)}};function bM(e){Pv.pink=Pv.magenta,Bv.pink=Bv.magenta;const t=Object.keys(CE).map(r=>{const a=e[r]===Pv[r]?Bv[r]:ic(e[r]);return Array.from({length:10},()=>1).reduce((i,s,c)=>(i[`${r}-${c+1}`]=a[c],i[`${r}${c+1}`]=a[c],i),{})}).reduce((r,a)=>(r=Object.assign(Object.assign({},r),a),r),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},e),t),cM(e,{generateColorPalettes:pM,generateNeutralColorPalettes:hM})),vM(e.fontSize)),gM(e)),dM(e)),fM(e))}const wE=Fg(bM),op={token:oc,override:{override:oc},hashed:!0},OE=ue.createContext(op),lc="ant",Gf="anticon",yM=["outlined","borderless","filled","underlined"],SM=(e,t)=>t||(e?`${lc}-${e}`:lc),It=f.createContext({getPrefixCls:SM,iconPrefixCls:Gf}),{Consumer:c9}=It,YS={};function Lr(e){const t=f.useContext(It),{getPrefixCls:r,direction:a,getPopupContainer:i}=t,s=t[e];return Object.assign(Object.assign({classNames:YS,styles:YS},s),{getPrefixCls:r,direction:a,getPopupContainer:i})}const CM=`-ant-${Date.now()}-${Math.random()}`;function xM(e,t){const r={},a=(c,d)=>{let m=c.clone();return m=(d==null?void 0:d(m))||m,m.toRgbString()},i=(c,d)=>{const m=new On(c),v=ic(m.toRgbString());r[`${d}-color`]=a(m),r[`${d}-color-disabled`]=v[1],r[`${d}-color-hover`]=v[4],r[`${d}-color-active`]=v[6],r[`${d}-color-outline`]=m.clone().setA(.2).toRgbString(),r[`${d}-color-deprecated-bg`]=v[0],r[`${d}-color-deprecated-border`]=v[2]};if(t.primaryColor){i(t.primaryColor,"primary");const c=new On(t.primaryColor),d=ic(c.toRgbString());d.forEach((v,p)=>{r[`primary-${p+1}`]=v}),r["primary-color-deprecated-l-35"]=a(c,v=>v.lighten(35)),r["primary-color-deprecated-l-20"]=a(c,v=>v.lighten(20)),r["primary-color-deprecated-t-20"]=a(c,v=>v.tint(20)),r["primary-color-deprecated-t-50"]=a(c,v=>v.tint(50)),r["primary-color-deprecated-f-12"]=a(c,v=>v.setA(v.a*.12));const m=new On(d[0]);r["primary-color-active-deprecated-f-30"]=a(m,v=>v.setA(v.a*.3)),r["primary-color-active-deprecated-d-02"]=a(m,v=>v.darken(2))}return t.successColor&&i(t.successColor,"success"),t.warningColor&&i(t.warningColor,"warning"),t.errorColor&&i(t.errorColor,"error"),t.infoColor&&i(t.infoColor,"info"),` + :root { + ${Object.keys(r).map(c=>`--${e}-${c}: ${r[c]};`).join(` +`)} + } + `.trim()}function EM(e,t){const r=xM(e,t);Rr()&&no(r,`${CM}-dynamic-theme`)}const Lo=f.createContext(!1),wM=({children:e,disabled:t})=>{const r=f.useContext(Lo);return f.createElement(Lo.Provider,{value:t??r},e)},wl=f.createContext(void 0),OM=({children:e,size:t})=>{const r=f.useContext(wl);return f.createElement(wl.Provider,{value:t||r},e)};function $M(){const e=f.useContext(Lo),t=f.useContext(wl);return{componentDisabled:e,componentSize:t}}var $E=Xn(function e(){Kn(this,e)}),RE="CALC_UNIT",RM=new RegExp(RE,"g");function Lv(e){return typeof e=="number"?"".concat(e).concat(RE):e}var TM=(function(e){Ba(r,e);var t=oo(r);function r(a,i){var s;Kn(this,r),s=t.call(this),K(Ut(s),"result",""),K(Ut(s),"unitlessCssVar",void 0),K(Ut(s),"lowPriority",void 0);var c=pt(a);return s.unitlessCssVar=i,a instanceof r?s.result="(".concat(a.result,")"):c==="number"?s.result=Lv(a):c==="string"&&(s.result=a),s}return Xn(r,[{key:"add",value:function(i){return i instanceof r?this.result="".concat(this.result," + ").concat(i.getResult()):(typeof i=="number"||typeof i=="string")&&(this.result="".concat(this.result," + ").concat(Lv(i))),this.lowPriority=!0,this}},{key:"sub",value:function(i){return i instanceof r?this.result="".concat(this.result," - ").concat(i.getResult()):(typeof i=="number"||typeof i=="string")&&(this.result="".concat(this.result," - ").concat(Lv(i))),this.lowPriority=!0,this}},{key:"mul",value:function(i){return this.lowPriority&&(this.result="(".concat(this.result,")")),i instanceof r?this.result="".concat(this.result," * ").concat(i.getResult(!0)):(typeof i=="number"||typeof i=="string")&&(this.result="".concat(this.result," * ").concat(i)),this.lowPriority=!1,this}},{key:"div",value:function(i){return this.lowPriority&&(this.result="(".concat(this.result,")")),i instanceof r?this.result="".concat(this.result," / ").concat(i.getResult(!0)):(typeof i=="number"||typeof i=="string")&&(this.result="".concat(this.result," / ").concat(i)),this.lowPriority=!1,this}},{key:"getResult",value:function(i){return this.lowPriority||i?"(".concat(this.result,")"):this.result}},{key:"equal",value:function(i){var s=this,c=i||{},d=c.unit,m=!0;return typeof d=="boolean"?m=d:Array.from(this.unitlessCssVar).some(function(v){return s.result.includes(v)})&&(m=!1),this.result=this.result.replace(RM,m?"px":""),typeof this.lowPriority<"u"?"calc(".concat(this.result,")"):this.result}}]),r})($E),_M=(function(e){Ba(r,e);var t=oo(r);function r(a){var i;return Kn(this,r),i=t.call(this),K(Ut(i),"result",0),a instanceof r?i.result=a.result:typeof a=="number"&&(i.result=a),i}return Xn(r,[{key:"add",value:function(i){return i instanceof r?this.result+=i.result:typeof i=="number"&&(this.result+=i),this}},{key:"sub",value:function(i){return i instanceof r?this.result-=i.result:typeof i=="number"&&(this.result-=i),this}},{key:"mul",value:function(i){return i instanceof r?this.result*=i.result:typeof i=="number"&&(this.result*=i),this}},{key:"div",value:function(i){return i instanceof r?this.result/=i.result:typeof i=="number"&&(this.result/=i),this}},{key:"equal",value:function(){return this.result}}]),r})($E),MM=function(t,r){var a=t==="css"?TM:_M;return function(i){return new a(i,r)}},QS=function(t,r){return"".concat([r,t.replace(/([A-Z]+)([A-Z][a-z]+)/g,"$1-$2").replace(/([a-z])([A-Z])/g,"$1-$2")].filter(Boolean).join("-"))};function Gn(e){var t=f.useRef();t.current=e;var r=f.useCallback(function(){for(var a,i=arguments.length,s=new Array(i),c=0;c1e4){var a=Date.now();this.lastAccessBeat.forEach(function(i,s){a-i>jM&&(r.map.delete(s),r.lastAccessBeat.delete(s))}),this.accessBeat=0}}}]),e})(),eC=new DM;function IM(e,t){return ue.useMemo(function(){var r=eC.get(t);if(r)return r;var a=e();return eC.set(t,a),a},t)}var PM=function(){return{}};function BM(e){var t=e.useCSP,r=t===void 0?PM:t,a=e.useToken,i=e.usePrefix,s=e.getResetStyles,c=e.getCommonStyle,d=e.getCompUnitless;function m(y,C,w,x){var S=Array.isArray(y)?y[0]:y;function E(A){return"".concat(String(S)).concat(A.slice(0,1).toUpperCase()).concat(A.slice(1))}var O=(x==null?void 0:x.unitless)||{},R=typeof d=="function"?d(y):{},_=J(J({},R),{},K({},E("zIndexPopup"),!0));Object.keys(O).forEach(function(A){_[E(A)]=O[A]});var T=J(J({},x),{},{unitless:_,prefixToken:E}),M=p(y,C,w,T),N=v(S,w,T);return function(A){var j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:A,I=M(A,j),L=oe(I,2),B=L[1],V=N(j),H=oe(V,2),Q=H[0],z=H[1];return[Q,B,z]}}function v(y,C,w){var x=w.unitless,S=w.injectStyle,E=S===void 0?!0:S,O=w.prefixToken,R=w.ignore,_=function(N){var A=N.rootCls,j=N.cssVar,I=j===void 0?{}:j,L=a(),B=L.realToken;return K_({path:[y],prefix:I.prefix,key:I.key,unitless:x,ignore:R,token:B,scope:A},function(){var V=kS(y,B,C),H=ZS(y,B,V,{deprecatedTokens:w==null?void 0:w.deprecatedTokens});return Object.keys(V).forEach(function(Q){H[O(Q)]=H[Q],delete H[Q]}),H}),null},T=function(N){var A=a(),j=A.cssVar;return[function(I){return E&&j?ue.createElement(ue.Fragment,null,ue.createElement(_,{rootCls:N,cssVar:j,component:y}),I):I},j==null?void 0:j.key]};return T}function p(y,C,w){var x=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},S=Array.isArray(y)?y:[y,y],E=oe(S,1),O=E[0],R=S.join("-"),_=e.layer||{name:"antd"};return function(T){var M=arguments.length>1&&arguments[1]!==void 0?arguments[1]:T,N=a(),A=N.theme,j=N.realToken,I=N.hashId,L=N.token,B=N.cssVar,V=i(),H=V.rootPrefixCls,Q=V.iconPrefixCls,z=r(),F=B?"css":"js",q=IM(function(){var W=new Set;return B&&Object.keys(x.unitless||{}).forEach(function(X){W.add(nf(X,B.prefix)),W.add(nf(X,QS(O,B.prefix)))}),MM(F,W)},[F,O,B==null?void 0:B.prefix]),ee=zM(F),Z=ee.max,D=ee.min,U={theme:A,token:L,hashId:I,nonce:function(){return z.nonce},clientOnly:x.clientOnly,layer:_,order:x.order||-999};typeof s=="function"&&Kg(J(J({},U),{},{clientOnly:!1,path:["Shared",H]}),function(){return s(L,{prefix:{rootPrefixCls:H,iconPrefixCls:Q},csp:z})});var G=Kg(J(J({},U),{},{path:[R,T,Q]}),function(){if(x.injectStyle===!1)return[];var W=AM(L),X=W.token,Y=W.flush,ie=kS(O,j,w),ce=".".concat(T),fe=ZS(O,j,ie,{deprecatedTokens:x.deprecatedTokens});B&&ie&&pt(ie)==="object"&&Object.keys(ie).forEach(function(ye){ie[ye]="var(".concat(nf(ye,QS(O,B.prefix)),")")});var Te=un(X,{componentCls:ce,prefixCls:T,iconCls:".".concat(Q),antCls:".".concat(H),calc:q,max:Z,min:D},B?ie:fe),he=C(Te,{hashId:I,prefixCls:T,rootPrefixCls:H,iconPrefixCls:Q});Y(O,fe);var se=typeof c=="function"?c(Te,T,M,x.resetFont):null;return[x.resetStyle===!1?null:se,he]});return[G,I]}}function h(y,C,w){var x=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},S=p(y,C,w,J({resetStyle:!1,order:-998},x)),E=function(R){var _=R.prefixCls,T=R.rootCls,M=T===void 0?_:T;return S(_,M),null};return E}return{genStyleHooks:m,genSubStyleComponent:h,genComponentStyleHook:p}}const pi=["blue","purple","cyan","green","magenta","pink","red","orange","yellow","volcano","geekblue","lime","gold"],LM="5.29.3";function Fv(e){return e>=0&&e<=255}function Ws(e,t){const{r,g:a,b:i,a:s}=new On(e).toRgb();if(s<1)return e;const{r:c,g:d,b:m}=new On(t).toRgb();for(let v=.01;v<=1;v+=.01){const p=Math.round((r-c*(1-v))/v),h=Math.round((a-d*(1-v))/v),y=Math.round((i-m*(1-v))/v);if(Fv(p)&&Fv(h)&&Fv(y))return new On({r:p,g:h,b:y,a:Math.round(v*100)/100}).toRgbString()}return new On({r,g:a,b:i,a:1}).toRgbString()}var HM=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{delete a[y]});const i=Object.assign(Object.assign({},r),a),s=480,c=576,d=768,m=992,v=1200,p=1600;return i.motion===!1&&(i.motionDurationFast="0s",i.motionDurationMid="0s",i.motionDurationSlow="0s"),Object.assign(Object.assign(Object.assign({},i),{colorFillContent:i.colorFillSecondary,colorFillContentHover:i.colorFill,colorFillAlter:i.colorFillQuaternary,colorBgContainerDisabled:i.colorFillTertiary,colorBorderBg:i.colorBgContainer,colorSplit:Ws(i.colorBorderSecondary,i.colorBgContainer),colorTextPlaceholder:i.colorTextQuaternary,colorTextDisabled:i.colorTextQuaternary,colorTextHeading:i.colorText,colorTextLabel:i.colorTextSecondary,colorTextDescription:i.colorTextTertiary,colorTextLightSolid:i.colorWhite,colorHighlight:i.colorError,colorBgTextHover:i.colorFillSecondary,colorBgTextActive:i.colorFill,colorIcon:i.colorTextTertiary,colorIconHover:i.colorText,colorErrorOutline:Ws(i.colorErrorBg,i.colorBgContainer),colorWarningOutline:Ws(i.colorWarningBg,i.colorBgContainer),fontSizeIcon:i.fontSizeSM,lineWidthFocus:i.lineWidth*3,lineWidth:i.lineWidth,controlOutlineWidth:i.lineWidth*2,controlInteractiveSize:i.controlHeight/2,controlItemBgHover:i.colorFillTertiary,controlItemBgActive:i.colorPrimaryBg,controlItemBgActiveHover:i.colorPrimaryBgHover,controlItemBgActiveDisabled:i.colorFill,controlTmpOutline:i.colorFillQuaternary,controlOutline:Ws(i.colorPrimaryBg,i.colorBgContainer),lineType:i.lineType,borderRadius:i.borderRadius,borderRadiusXS:i.borderRadiusXS,borderRadiusSM:i.borderRadiusSM,borderRadiusLG:i.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:"none",linkHoverDecoration:"none",linkFocusDecoration:"none",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:i.sizeXXS,paddingXS:i.sizeXS,paddingSM:i.sizeSM,padding:i.size,paddingMD:i.sizeMD,paddingLG:i.sizeLG,paddingXL:i.sizeXL,paddingContentHorizontalLG:i.sizeLG,paddingContentVerticalLG:i.sizeMS,paddingContentHorizontal:i.sizeMS,paddingContentVertical:i.sizeSM,paddingContentHorizontalSM:i.size,paddingContentVerticalSM:i.sizeXS,marginXXS:i.sizeXXS,marginXS:i.sizeXS,marginSM:i.sizeSM,margin:i.size,marginMD:i.sizeMD,marginLG:i.sizeLG,marginXL:i.sizeXL,marginXXL:i.sizeXXL,boxShadow:` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowSecondary:` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowTertiary:` + 0 1px 2px 0 rgba(0, 0, 0, 0.03), + 0 1px 6px -1px rgba(0, 0, 0, 0.02), + 0 2px 4px 0 rgba(0, 0, 0, 0.02) + `,screenXS:s,screenXSMin:s,screenXSMax:c-1,screenSM:c,screenSMMin:c,screenSMMax:d-1,screenMD:d,screenMDMin:d,screenMDMax:m-1,screenLG:m,screenLGMin:m,screenLGMax:v-1,screenXL:v,screenXLMin:v,screenXLMax:p-1,screenXXL:p,screenXXLMin:p,boxShadowPopoverArrow:"2px 2px 5px rgba(0, 0, 0, 0.05)",boxShadowCard:` + 0 1px 2px -2px ${new On("rgba(0, 0, 0, 0.16)").toRgbString()}, + 0 3px 6px 0 ${new On("rgba(0, 0, 0, 0.12)").toRgbString()}, + 0 5px 12px 4px ${new On("rgba(0, 0, 0, 0.09)").toRgbString()} + `,boxShadowDrawerRight:` + -6px 0 16px 0 rgba(0, 0, 0, 0.08), + -3px 0 6px -4px rgba(0, 0, 0, 0.12), + -9px 0 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowDrawerLeft:` + 6px 0 16px 0 rgba(0, 0, 0, 0.08), + 3px 0 6px -4px rgba(0, 0, 0, 0.12), + 9px 0 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowDrawerUp:` + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowDrawerDown:` + 0 -6px 16px 0 rgba(0, 0, 0, 0.08), + 0 -3px 6px -4px rgba(0, 0, 0, 0.12), + 0 -9px 28px 8px rgba(0, 0, 0, 0.05) + `,boxShadowTabsOverflowLeft:"inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowRight:"inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowTop:"inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowBottom:"inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)"}),a)}var tC=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const a=r.getDerivativeToken(e),{override:i}=t,s=tC(t,["override"]);let c=Object.assign(Object.assign({},a),{override:i});return c=_E(c),s&&Object.entries(s).forEach(([d,m])=>{const{theme:v}=m,p=tC(m,["theme"]);let h=p;v&&(h=NE(Object.assign(Object.assign({},c),p),{override:p},v)),c[d]=h}),c};function ta(){const{token:e,hashed:t,theme:r,override:a,cssVar:i}=ue.useContext(OE),s=`${LM}-${t||""}`,c=r||wE,[d,m,v]=y_(c,[oc,e],{salt:s,override:a,getComputedToken:NE,formatToken:_E,cssVar:i&&{prefix:i.prefix,key:i.key,unitless:ME,ignore:FM,preserve:VM}});return[c,v,t?m:"",d,i]}const hi={overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},Tr=(e,t=!1)=>({boxSizing:"border-box",margin:0,padding:0,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight,listStyle:"none",fontFamily:t?"inherit":e.fontFamily}),Wf=()=>({display:"inline-flex",alignItems:"center",color:"inherit",fontStyle:"normal",lineHeight:0,textAlign:"center",textTransform:"none",verticalAlign:"-0.125em",textRendering:"optimizeLegibility","-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale","> *":{lineHeight:1},svg:{display:"inline-block"}}),Kf=()=>({"&::before":{display:"table",content:'""'},"&::after":{display:"table",clear:"both",content:'""'}}),UM=e=>({a:{color:e.colorLink,textDecoration:e.linkDecoration,backgroundColor:"transparent",outline:"none",cursor:"pointer",transition:`color ${e.motionDurationSlow}`,"-webkit-text-decoration-skip":"objects","&:hover":{color:e.colorLinkHover},"&:active":{color:e.colorLinkActive},"&:active, &:hover":{textDecoration:e.linkHoverDecoration,outline:0},"&:focus":{textDecoration:e.linkFocusDecoration,outline:0},"&[disabled]":{color:e.colorTextDisabled,cursor:"not-allowed"}}}),qM=(e,t,r,a)=>{const i=`[class^="${t}"], [class*=" ${t}"]`,s=r?`.${r}`:i,c={boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"}};let d={};return a!==!1&&(d={fontFamily:e.fontFamily,fontSize:e.fontSize}),{[s]:Object.assign(Object.assign(Object.assign({},d),c),{[i]:c})}},cc=(e,t)=>({outline:`${de(e.lineWidthFocus)} solid ${e.colorPrimaryBorder}`,outlineOffset:t??1,transition:"outline-offset 0s, outline 0s"}),Ol=(e,t)=>({"&:focus-visible":cc(e,t)}),AE=e=>({[`.${e}`]:Object.assign(Object.assign({},Wf()),{[`.${e} .${e}-icon`]:{display:"block"}})}),zE=e=>Object.assign(Object.assign({color:e.colorLink,textDecoration:e.linkDecoration,outline:"none",cursor:"pointer",transition:`all ${e.motionDurationSlow}`,border:0,padding:0,background:"none",userSelect:"none"},Ol(e)),{"&:hover":{color:e.colorLinkHover,textDecoration:e.linkHoverDecoration},"&:focus":{color:e.colorLinkHover,textDecoration:e.linkFocusDecoration},"&:active":{color:e.colorLinkActive,textDecoration:e.linkHoverDecoration}}),{genStyleHooks:_n,genComponentStyleHook:GM,genSubStyleComponent:Xf}=BM({usePrefix:()=>{const{getPrefixCls:e,iconPrefixCls:t}=f.useContext(It);return{rootPrefixCls:e(),iconPrefixCls:t}},useToken:()=>{const[e,t,r,a,i]=ta();return{theme:e,realToken:t,hashId:r,token:a,cssVar:i}},useCSP:()=>{const{csp:e}=f.useContext(It);return e??{}},getResetStyles:(e,t)=>{var r;const a=UM(e);return[a,{"&":a},AE((r=t==null?void 0:t.prefix.iconPrefixCls)!==null&&r!==void 0?r:Gf)]},getCommonStyle:qM,getCompUnitless:()=>ME});function jE(e,t){return pi.reduce((r,a)=>{const i=e[`${a}1`],s=e[`${a}3`],c=e[`${a}6`],d=e[`${a}7`];return Object.assign(Object.assign({},r),t(a,{lightColor:i,lightBorderColor:s,darkColor:c,textColor:d}))},{})}const WM=(e,t)=>{const[r,a]=ta();return Kg({token:a,hashId:"",path:["ant-design-icons",e],nonce:()=>t==null?void 0:t.nonce,layer:{name:"antd"}},()=>AE(e))},KM=Object.assign({},Lf),{useId:nC}=KM,XM=()=>"",YM=typeof nC>"u"?XM:nC;function QM(e,t,r){var a;Jp();const i=e||{},s=i.inherit===!1||!t?Object.assign(Object.assign({},op),{hashed:(a=t==null?void 0:t.hashed)!==null&&a!==void 0?a:op.hashed,cssVar:t==null?void 0:t.cssVar}):t,c=YM();return pc(()=>{var d,m;if(!e)return t;const v=Object.assign({},s.components);Object.keys(e.components||{}).forEach(y=>{v[y]=Object.assign(Object.assign({},v[y]),e.components[y])});const p=`css-var-${c.replace(/:/g,"")}`,h=((d=i.cssVar)!==null&&d!==void 0?d:s.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:r==null?void 0:r.prefixCls},typeof s.cssVar=="object"?s.cssVar:{}),typeof i.cssVar=="object"?i.cssVar:{}),{key:typeof i.cssVar=="object"&&((m=i.cssVar)===null||m===void 0?void 0:m.key)||p});return Object.assign(Object.assign(Object.assign({},s),i),{token:Object.assign(Object.assign({},s.token),i.token),components:v,cssVar:h})},[i,s],(d,m)=>d.some((v,p)=>{const h=m[p];return!rc(v,h,!0)}))}var ZM=["children"],DE=f.createContext({});function JM(e){var t=e.children,r=zt(e,ZM);return f.createElement(DE.Provider,{value:r},t)}var kM=(function(e){Ba(r,e);var t=oo(r);function r(){return Kn(this,r),t.apply(this,arguments)}return Xn(r,[{key:"render",value:function(){return this.props.children}}]),r})(f.Component);function eN(e){var t=f.useReducer(function(d){return d+1},0),r=oe(t,2),a=r[1],i=f.useRef(e),s=Gn(function(){return i.current}),c=Gn(function(d){i.current=typeof d=="function"?d(i.current):d,a()});return[s,c]}var zo="none",Hu="appear",Fu="enter",Vu="leave",rC="none",wa="prepare",vl="start",gl="active",eh="end",IE="prepared";function aC(e,t){var r={};return r[e.toLowerCase()]=t.toLowerCase(),r["Webkit".concat(e)]="webkit".concat(t),r["Moz".concat(e)]="moz".concat(t),r["ms".concat(e)]="MS".concat(t),r["O".concat(e)]="o".concat(t.toLowerCase()),r}function tN(e,t){var r={animationend:aC("Animation","AnimationEnd"),transitionend:aC("Transition","TransitionEnd")};return e&&("AnimationEvent"in t||delete r.animationend.animation,"TransitionEvent"in t||delete r.transitionend.transition),r}var nN=tN(Rr(),typeof window<"u"?window:{}),PE={};if(Rr()){var rN=document.createElement("div");PE=rN.style}var Uu={};function BE(e){if(Uu[e])return Uu[e];var t=nN[e];if(t)for(var r=Object.keys(t),a=r.length,i=0;i1&&arguments[1]!==void 0?arguments[1]:2;t();var s=bn(function(){i<=1?a({isCanceled:function(){return s!==e.current}}):r(a,i-1)});e.current=s}return f.useEffect(function(){return function(){t()}},[]),[r,t]});var iN=[wa,vl,gl,eh],lN=[wa,IE],UE=!1,sN=!0;function qE(e){return e===gl||e===eh}const cN=(function(e,t,r){var a=sc(rC),i=oe(a,2),s=i[0],c=i[1],d=oN(),m=oe(d,2),v=m[0],p=m[1];function h(){c(wa,!0)}var y=t?lN:iN;return VE(function(){if(s!==rC&&s!==eh){var C=y.indexOf(s),w=y[C+1],x=r(s);x===UE?c(w,!0):w&&v(function(S){function E(){S.isCanceled()||c(w,!0)}x===!0?E():Promise.resolve(x).then(E)})}},[e,s]),f.useEffect(function(){return function(){p()}},[]),[h,s]});function uN(e,t,r,a){var i=a.motionEnter,s=i===void 0?!0:i,c=a.motionAppear,d=c===void 0?!0:c,m=a.motionLeave,v=m===void 0?!0:m,p=a.motionDeadline,h=a.motionLeaveImmediately,y=a.onAppearPrepare,C=a.onEnterPrepare,w=a.onLeavePrepare,x=a.onAppearStart,S=a.onEnterStart,E=a.onLeaveStart,O=a.onAppearActive,R=a.onEnterActive,_=a.onLeaveActive,T=a.onAppearEnd,M=a.onEnterEnd,N=a.onLeaveEnd,A=a.onVisibleChanged,j=sc(),I=oe(j,2),L=I[0],B=I[1],V=eN(zo),H=oe(V,2),Q=H[0],z=H[1],F=sc(null),q=oe(F,2),ee=q[0],Z=q[1],D=Q(),U=f.useRef(!1),G=f.useRef(null);function W(){return r()}var X=f.useRef(!1);function Y(){z(zo),Z(null,!0)}var ie=Gn(function(Ae){var He=Q();if(He!==zo){var Ie=W();if(!(Ae&&!Ae.deadline&&Ae.target!==Ie)){var Ce=X.current,Xe;He===Hu&&Ce?Xe=T==null?void 0:T(Ie,Ae):He===Fu&&Ce?Xe=M==null?void 0:M(Ie,Ae):He===Vu&&Ce&&(Xe=N==null?void 0:N(Ie,Ae)),Ce&&Xe!==!1&&Y()}}}),ce=aN(ie),fe=oe(ce,1),Te=fe[0],he=function(He){switch(He){case Hu:return K(K(K({},wa,y),vl,x),gl,O);case Fu:return K(K(K({},wa,C),vl,S),gl,R);case Vu:return K(K(K({},wa,w),vl,E),gl,_);default:return{}}},se=f.useMemo(function(){return he(D)},[D]),ye=cN(D,!e,function(Ae){if(Ae===wa){var He=se[wa];return He?He(W()):UE}if(te in se){var Ie;Z(((Ie=se[te])===null||Ie===void 0?void 0:Ie.call(se,W(),null))||null)}return te===gl&&D!==zo&&(Te(W()),p>0&&(clearTimeout(G.current),G.current=setTimeout(function(){ie({deadline:!0})},p))),te===IE&&Y(),sN}),be=oe(ye,2),ge=be[0],te=be[1],xe=qE(te);X.current=xe;var Ee=f.useRef(null);VE(function(){if(!(U.current&&Ee.current===t)){B(t);var Ae=U.current;U.current=!0;var He;!Ae&&t&&d&&(He=Hu),Ae&&t&&s&&(He=Fu),(Ae&&!t&&v||!Ae&&h&&!t&&v)&&(He=Vu);var Ie=he(He);He&&(e||Ie[wa])?(z(He),ge()):z(zo),Ee.current=t}},[t]),f.useEffect(function(){(D===Hu&&!d||D===Fu&&!s||D===Vu&&!v)&&z(zo)},[d,s,v]),f.useEffect(function(){return function(){U.current=!1,clearTimeout(G.current)}},[]);var _e=f.useRef(!1);f.useEffect(function(){L&&(_e.current=!0),L!==void 0&&D===zo&&((_e.current||L)&&(A==null||A(L)),_e.current=!0)},[L,D]);var je=ee;return se[wa]&&te===vl&&(je=J({transition:"none"},je)),[D,te,je,L??t]}function fN(e){var t=e;pt(e)==="object"&&(t=e.transitionSupport);function r(i,s){return!!(i.motionName&&t&&s!==!1)}var a=f.forwardRef(function(i,s){var c=i.visible,d=c===void 0?!0:c,m=i.removeOnLeave,v=m===void 0?!0:m,p=i.forceRender,h=i.children,y=i.motionName,C=i.leavedClassName,w=i.eventProps,x=f.useContext(DE),S=x.motion,E=r(i,S),O=f.useRef(),R=f.useRef();function _(){try{return O.current instanceof HTMLElement?O.current:tf(R.current)}catch{return null}}var T=uN(E,d,_,i),M=oe(T,4),N=M[0],A=M[1],j=M[2],I=M[3],L=f.useRef(I);I&&(L.current=!0);var B=f.useCallback(function(q){O.current=q,Up(s,q)},[s]),V,H=J(J({},w),{},{visible:d});if(!h)V=null;else if(N===zo)I?V=h(J({},H),B):!v&&L.current&&C?V=h(J(J({},H),{},{className:C}),B):p||!v&&!C?V=h(J(J({},H),{},{style:{display:"none"}}),B):V=null;else{var Q;A===wa?Q="prepare":qE(A)?Q="active":A===vl&&(Q="start");var z=lC(y,"".concat(N,"-").concat(Q));V=h(J(J({},H),{},{className:ae(lC(y,N),K(K({},z,z&&Q),y,typeof y=="string")),style:j}),B)}if(f.isValidElement(V)&&Ho(V)){var F=Nl(V);F||(V=f.cloneElement(V,{ref:B}))}return f.createElement(kM,{ref:R},V)});return a.displayName="CSSMotion",a}const Fo=fN(FE);var lp="add",sp="keep",cp="remove",Vv="removed";function dN(e){var t;return e&&pt(e)==="object"&&"key"in e?t=e:t={key:e},J(J({},t),{},{key:String(t.key)})}function up(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return e.map(dN)}function mN(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=[],a=0,i=t.length,s=up(e),c=up(t);s.forEach(function(v){for(var p=!1,h=a;h1});return m.forEach(function(v){r=r.filter(function(p){var h=p.key,y=p.status;return h!==v||y!==cp}),r.forEach(function(p){p.key===v&&(p.status=sp)})}),r}var vN=["component","children","onVisibleChanged","onAllRemoved"],gN=["status"],pN=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];function hN(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Fo,r=(function(a){Ba(s,a);var i=oo(s);function s(){var c;Kn(this,s);for(var d=arguments.length,m=new Array(d),v=0;vnull;var CN=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);it.endsWith("Color"))}const ON=e=>{const{prefixCls:t,iconPrefixCls:r,theme:a,holderRender:i}=e;t!==void 0&&(Cf=t),r!==void 0&&(GE=r),"holderRender"in e&&(KE=i),a&&(wN(a)?EM(cf(),a):WE=a)},$N=()=>({getPrefixCls:(e,t)=>t||(e?`${cf()}-${e}`:cf()),getIconPrefixCls:EN,getRootPrefixCls:()=>Cf||cf(),getTheme:()=>WE,holderRender:KE}),RN=e=>{const{children:t,csp:r,autoInsertSpaceInButton:a,alert:i,anchor:s,form:c,locale:d,componentSize:m,direction:v,space:p,splitter:h,virtual:y,dropdownMatchSelectWidth:C,popupMatchSelectWidth:w,popupOverflow:x,legacyLocale:S,parentContext:E,iconPrefixCls:O,theme:R,componentDisabled:_,segmented:T,statistic:M,spin:N,calendar:A,carousel:j,cascader:I,collapse:L,typography:B,checkbox:V,descriptions:H,divider:Q,drawer:z,skeleton:F,steps:q,image:ee,layout:Z,list:D,mentions:U,modal:G,progress:W,result:X,slider:Y,breadcrumb:ie,menu:ce,pagination:fe,input:Te,textArea:he,empty:se,badge:ye,radio:be,rate:ge,switch:te,transfer:xe,avatar:Ee,message:_e,tag:je,table:Ae,card:He,tabs:Ie,timeline:Ce,timePicker:Xe,upload:at,notification:mt,tree:ke,colorPicker:We,datePicker:ct,rangePicker:Qe,flex:ut,wave:Ye,dropdown:ze,warning:Ke,tour:Ne,tooltip:Ge,popover:_t,popconfirm:gt,floatButton:Ht,floatButtonGroup:qt,variant:fn,inputNumber:en,treeSelect:Ft}=e,Rt=f.useCallback((nt,Ot)=>{const{prefixCls:bt}=e;if(Ot)return Ot;const vt=bt||E.getPrefixCls("");return nt?`${vt}-${nt}`:vt},[E.getPrefixCls,e.prefixCls]),xt=O||E.iconPrefixCls||Gf,Gt=r||E.csp;WM(xt,Gt);const Bt=QM(R,E.theme,{prefixCls:Rt("")}),Ze={csp:Gt,autoInsertSpaceInButton:a,alert:i,anchor:s,locale:d||S,direction:v,space:p,splitter:h,virtual:y,popupMatchSelectWidth:w??C,popupOverflow:x,getPrefixCls:Rt,iconPrefixCls:xt,theme:Bt,segmented:T,statistic:M,spin:N,calendar:A,carousel:j,cascader:I,collapse:L,typography:B,checkbox:V,descriptions:H,divider:Q,drawer:z,skeleton:F,steps:q,image:ee,input:Te,textArea:he,layout:Z,list:D,mentions:U,modal:G,progress:W,result:X,slider:Y,breadcrumb:ie,menu:ce,pagination:fe,empty:se,badge:ye,radio:be,rate:ge,switch:te,transfer:xe,avatar:Ee,message:_e,tag:je,table:Ae,card:He,tabs:Ie,timeline:Ce,timePicker:Xe,upload:at,notification:mt,tree:ke,colorPicker:We,datePicker:ct,rangePicker:Qe,flex:ut,wave:Ye,dropdown:ze,warning:Ke,tour:Ne,tooltip:Ge,popover:_t,popconfirm:gt,floatButton:Ht,floatButtonGroup:qt,variant:fn,inputNumber:en,treeSelect:Ft},Et=Object.assign({},E);Object.keys(Ze).forEach(nt=>{Ze[nt]!==void 0&&(Et[nt]=Ze[nt])}),xN.forEach(nt=>{const Ot=e[nt];Ot&&(Et[nt]=Ot)}),typeof a<"u"&&(Et.button=Object.assign({autoInsertSpace:a},Et.button));const st=pc(()=>Et,Et,(nt,Ot)=>{const bt=Object.keys(nt),vt=Object.keys(Ot);return bt.length!==vt.length||bt.some(Nt=>nt[Nt]!==Ot[Nt])}),{layer:De}=f.useContext(hc),$e=f.useMemo(()=>({prefixCls:xt,csp:Gt,layer:De?"antd":void 0}),[xt,Gt,De]);let Re=f.createElement(f.Fragment,null,f.createElement(SN,{dropdownMatchSelectWidth:C}),t);const Be=f.useMemo(()=>{var nt,Ot,bt,vt;return ml(((nt=gi.Form)===null||nt===void 0?void 0:nt.defaultValidateMessages)||{},((bt=(Ot=st.locale)===null||Ot===void 0?void 0:Ot.Form)===null||bt===void 0?void 0:bt.defaultValidateMessages)||{},((vt=st.form)===null||vt===void 0?void 0:vt.validateMessages)||{},(c==null?void 0:c.validateMessages)||{})},[st,c==null?void 0:c.validateMessages]);Object.keys(Be).length>0&&(Re=f.createElement(k_.Provider,{value:Be},Re)),d&&(Re=f.createElement(aM,{locale:d,_ANT_MARK__:rM},Re)),Re=f.createElement(Zp.Provider,{value:$e},Re),m&&(Re=f.createElement(OM,{size:m},Re)),Re=f.createElement(yN,null,Re);const tt=f.useMemo(()=>{const nt=Bt||{},{algorithm:Ot,token:bt,components:vt,cssVar:Nt}=nt,dn=CN(nt,["algorithm","token","components","cssVar"]),vn=Ot&&(!Array.isArray(Ot)||Ot.length>0)?Fg(Ot):wE,yn={};Object.entries(vt||{}).forEach(([Vt,Jt])=>{const Pe=Object.assign({},Jt);"algorithm"in Pe&&(Pe.algorithm===!0?Pe.theme=vn:(Array.isArray(Pe.algorithm)||typeof Pe.algorithm=="function")&&(Pe.theme=Fg(Pe.algorithm)),delete Pe.algorithm),yn[Vt]=Pe});const Nn=Object.assign(Object.assign({},oc),bt);return Object.assign(Object.assign({},dn),{theme:vn,token:Nn,components:yn,override:Object.assign({override:Nn},yn),cssVar:Nt})},[Bt]);return R&&(Re=f.createElement(OE.Provider,{value:tt},Re)),st.warning&&(Re=f.createElement(J_.Provider,{value:st.warning},Re)),_!==void 0&&(Re=f.createElement(wM,{disabled:_},Re)),f.createElement(It.Provider,{value:st},Re)},xi=e=>{const t=f.useContext(It),r=f.useContext(kp);return f.createElement(RN,Object.assign({parentContext:t,legacyLocale:r},e))};xi.ConfigContext=It;xi.SizeContext=wl;xi.config=ON;xi.useConfig=$M;Object.defineProperty(xi,"SizeContext",{get:()=>wl});var TN={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"};function XE(e){var t;return e==null||(t=e.getRootNode)===null||t===void 0?void 0:t.call(e)}function _N(e){return XE(e)instanceof ShadowRoot}function xf(e){return _N(e)?XE(e):null}function MN(e){return e.replace(/-(.)/g,function(t,r){return r.toUpperCase()})}function NN(e,t){xr(e,"[@ant-design/icons] ".concat(t))}function cC(e){return pt(e)==="object"&&typeof e.name=="string"&&typeof e.theme=="string"&&(pt(e.icon)==="object"||typeof e.icon=="function")}function uC(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return Object.keys(e).reduce(function(t,r){var a=e[r];switch(r){case"class":t.className=a,delete t.class;break;default:delete t[r],t[MN(r)]=a}return t},{})}function fp(e,t,r){return r?ue.createElement(e.tag,J(J({key:t},uC(e.attrs)),r),(e.children||[]).map(function(a,i){return fp(a,"".concat(t,"-").concat(e.tag,"-").concat(i))})):ue.createElement(e.tag,J({key:t},uC(e.attrs)),(e.children||[]).map(function(a,i){return fp(a,"".concat(t,"-").concat(e.tag,"-").concat(i))}))}function YE(e){return ic(e)[0]}function QE(e){return e?Array.isArray(e)?e:[e]:[]}var AN=` +.anticon { + display: inline-flex; + align-items: center; + color: inherit; + font-style: normal; + line-height: 0; + text-align: center; + text-transform: none; + vertical-align: -0.125em; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon > * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`,zN=function(t){var r=f.useContext(Zp),a=r.csp,i=r.prefixCls,s=r.layer,c=AN;i&&(c=c.replace(/anticon/g,i)),s&&(c="@layer ".concat(s,` { +`).concat(c,` +}`)),f.useEffect(function(){var d=t.current,m=xf(d);no(c,"@ant-design-icons",{prepend:!s,csp:a,attachTo:m})},[])},jN=["icon","className","onClick","style","primaryColor","secondaryColor"],Zs={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};function DN(e){var t=e.primaryColor,r=e.secondaryColor;Zs.primaryColor=t,Zs.secondaryColor=r||YE(t),Zs.calculated=!!r}function IN(){return J({},Zs)}var jl=function(t){var r=t.icon,a=t.className,i=t.onClick,s=t.style,c=t.primaryColor,d=t.secondaryColor,m=zt(t,jN),v=f.useRef(),p=Zs;if(c&&(p={primaryColor:c,secondaryColor:d||YE(c)}),zN(v),NN(cC(r),"icon should be icon definiton, but got ".concat(r)),!cC(r))return null;var h=r;return h&&typeof h.icon=="function"&&(h=J(J({},h),{},{icon:h.icon(p.primaryColor,p.secondaryColor)})),fp(h.icon,"svg-".concat(h.name),J(J({className:a,onClick:i,style:s,"data-icon":h.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},m),{},{ref:v}))};jl.displayName="IconReact";jl.getTwoToneColors=IN;jl.setTwoToneColors=DN;function ZE(e){var t=QE(e),r=oe(t,2),a=r[0],i=r[1];return jl.setTwoToneColors({primaryColor:a,secondaryColor:i})}function PN(){var e=jl.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor}var BN=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];ZE(Sf.primary);var Mn=f.forwardRef(function(e,t){var r=e.className,a=e.icon,i=e.spin,s=e.rotate,c=e.tabIndex,d=e.onClick,m=e.twoToneColor,v=zt(e,BN),p=f.useContext(Zp),h=p.prefixCls,y=h===void 0?"anticon":h,C=p.rootClassName,w=ae(C,y,K(K({},"".concat(y,"-").concat(a.name),!!a.name),"".concat(y,"-spin"),!!i||a.name==="loading"),r),x=c;x===void 0&&d&&(x=-1);var S=s?{msTransform:"rotate(".concat(s,"deg)"),transform:"rotate(".concat(s,"deg)")}:void 0,E=QE(m),O=oe(E,2),R=O[0],_=O[1];return f.createElement("span",Le({role:"img","aria-label":a.name},v,{ref:t,tabIndex:x,onClick:d,className:w}),f.createElement(jl,{icon:a,primaryColor:R,secondaryColor:_,style:S}))});Mn.displayName="AntdIcon";Mn.getTwoToneColor=PN;Mn.setTwoToneColor=ZE;var LN=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:TN}))},JE=f.forwardRef(LN),HN={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"},FN=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:HN}))},Yf=f.forwardRef(FN),VN={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"},UN=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:VN}))},bc=f.forwardRef(UN),qN={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"},GN=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:qN}))},kE=f.forwardRef(GN),WN={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"},KN=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:WN}))},ew=f.forwardRef(KN),XN=`accept acceptCharset accessKey action allowFullScreen allowTransparency + alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge + charSet checked classID className colSpan cols content contentEditable contextMenu + controls coords crossOrigin data dateTime default defer dir disabled download draggable + encType form formAction formEncType formMethod formNoValidate formTarget frameBorder + headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity + is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media + mediaGroup method min minLength multiple muted name noValidate nonce open + optimum pattern placeholder poster preload radioGroup readOnly rel required + reversed role rowSpan rows sandbox scope scoped scrolling seamless selected + shape size sizes span spellCheck src srcDoc srcLang srcSet start step style + summary tabIndex target title type useMap value width wmode wrap`,YN=`onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown + onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick + onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown + onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel + onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough + onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata + onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError`,QN="".concat(XN," ").concat(YN).split(/[\s\n]+/),ZN="aria-",JN="data-";function fC(e,t){return e.indexOf(t)===0}function ro(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,r;t===!1?r={aria:!0,data:!0,attr:!0}:t===!0?r={aria:!0}:r=J({},t);var a={};return Object.keys(e).forEach(function(i){(r.aria&&(i==="role"||fC(i,ZN))||r.data&&fC(i,JN)||r.attr&&QN.includes(i))&&(a[i]=e[i])}),a}function tw(e){return e&&ue.isValidElement(e)&&e.type===ue.Fragment}const th=(e,t,r)=>ue.isValidElement(e)?ue.cloneElement(e,typeof r=="function"?r(e.props||{}):r):t;function bi(e,t){return th(e,e,t)}const qu=(e,t,r,a,i)=>({background:e,border:`${de(a.lineWidth)} ${a.lineType} ${t}`,[`${i}-icon`]:{color:r}}),kN=e=>{const{componentCls:t,motionDurationSlow:r,marginXS:a,marginSM:i,fontSize:s,fontSizeLG:c,lineHeight:d,borderRadiusLG:m,motionEaseInOutCirc:v,withDescriptionIconSize:p,colorText:h,colorTextHeading:y,withDescriptionPadding:C,defaultPadding:w}=e;return{[t]:Object.assign(Object.assign({},Tr(e)),{position:"relative",display:"flex",alignItems:"center",padding:w,wordWrap:"break-word",borderRadius:m,[`&${t}-rtl`]:{direction:"rtl"},[`${t}-content`]:{flex:1,minWidth:0},[`${t}-icon`]:{marginInlineEnd:a,lineHeight:0},"&-description":{display:"none",fontSize:s,lineHeight:d},"&-message":{color:y},[`&${t}-motion-leave`]:{overflow:"hidden",opacity:1,transition:`max-height ${r} ${v}, opacity ${r} ${v}, + padding-top ${r} ${v}, padding-bottom ${r} ${v}, + margin-bottom ${r} ${v}`},[`&${t}-motion-leave-active`]:{maxHeight:0,marginBottom:"0 !important",paddingTop:0,paddingBottom:0,opacity:0}}),[`${t}-with-description`]:{alignItems:"flex-start",padding:C,[`${t}-icon`]:{marginInlineEnd:i,fontSize:p,lineHeight:0},[`${t}-message`]:{display:"block",marginBottom:a,color:y,fontSize:c},[`${t}-description`]:{display:"block",color:h}},[`${t}-banner`]:{marginBottom:0,border:"0 !important",borderRadius:0}}},eA=e=>{const{componentCls:t,colorSuccess:r,colorSuccessBorder:a,colorSuccessBg:i,colorWarning:s,colorWarningBorder:c,colorWarningBg:d,colorError:m,colorErrorBorder:v,colorErrorBg:p,colorInfo:h,colorInfoBorder:y,colorInfoBg:C}=e;return{[t]:{"&-success":qu(i,a,r,e,t),"&-info":qu(C,y,h,e,t),"&-warning":qu(d,c,s,e,t),"&-error":Object.assign(Object.assign({},qu(p,v,m,e,t)),{[`${t}-description > pre`]:{margin:0,padding:0}})}}},tA=e=>{const{componentCls:t,iconCls:r,motionDurationMid:a,marginXS:i,fontSizeIcon:s,colorIcon:c,colorIconHover:d}=e;return{[t]:{"&-action":{marginInlineStart:i},[`${t}-close-icon`]:{marginInlineStart:i,padding:0,overflow:"hidden",fontSize:s,lineHeight:de(s),backgroundColor:"transparent",border:"none",outline:"none",cursor:"pointer",[`${r}-close`]:{color:c,transition:`color ${a}`,"&:hover":{color:d}}},"&-close-text":{color:c,transition:`color ${a}`,"&:hover":{color:d}}}}},nA=e=>({withDescriptionIconSize:e.fontSizeHeading3,defaultPadding:`${e.paddingContentVerticalSM}px 12px`,withDescriptionPadding:`${e.paddingMD}px ${e.paddingContentHorizontalLG}px`}),rA=_n("Alert",e=>[kN(e),eA(e),tA(e)],nA);var dC=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{icon:t,prefixCls:r,type:a}=e,i=aA[a]||null;return t?th(t,f.createElement("span",{className:`${r}-icon`},t),()=>({className:ae(`${r}-icon`,t.props.className)})):f.createElement(i,{className:`${r}-icon`})},iA=e=>{const{isClosable:t,prefixCls:r,closeIcon:a,handleClose:i,ariaProps:s}=e,c=a===!0||a===void 0?f.createElement(bc,null):a;return t?f.createElement("button",Object.assign({type:"button",onClick:i,className:`${r}-close-icon`,tabIndex:0},s),c):null},nw=f.forwardRef((e,t)=>{const{description:r,prefixCls:a,message:i,banner:s,className:c,rootClassName:d,style:m,onMouseEnter:v,onMouseLeave:p,onClick:h,afterClose:y,showIcon:C,closable:w,closeText:x,closeIcon:S,action:E,id:O}=e,R=dC(e,["description","prefixCls","message","banner","className","rootClassName","style","onMouseEnter","onMouseLeave","onClick","afterClose","showIcon","closable","closeText","closeIcon","action","id"]),[_,T]=f.useState(!1),M=f.useRef(null);f.useImperativeHandle(t,()=>({nativeElement:M.current}));const{getPrefixCls:N,direction:A,closable:j,closeIcon:I,className:L,style:B}=Lr("alert"),V=N("alert",a),[H,Q,z]=rA(V),F=X=>{var Y;T(!0),(Y=e.onClose)===null||Y===void 0||Y.call(e,X)},q=f.useMemo(()=>e.type!==void 0?e.type:s?"warning":"info",[e.type,s]),ee=f.useMemo(()=>typeof w=="object"&&w.closeIcon||x?!0:typeof w=="boolean"?w:S!==!1&&S!==null&&S!==void 0?!0:!!j,[x,S,w,j]),Z=s&&C===void 0?!0:C,D=ae(V,`${V}-${q}`,{[`${V}-with-description`]:!!r,[`${V}-no-icon`]:!Z,[`${V}-banner`]:!!s,[`${V}-rtl`]:A==="rtl"},L,c,d,z,Q),U=ro(R,{aria:!0,data:!0}),G=f.useMemo(()=>typeof w=="object"&&w.closeIcon?w.closeIcon:x||(S!==void 0?S:typeof j=="object"&&j.closeIcon?j.closeIcon:I),[S,w,j,x,I]),W=f.useMemo(()=>{const X=w??j;if(typeof X=="object"){const{closeIcon:Y}=X;return dC(X,["closeIcon"])}return{}},[w,j]);return H(f.createElement(Fo,{visible:!_,motionName:`${V}-motion`,motionAppear:!1,motionEnter:!1,onLeaveStart:X=>({maxHeight:X.offsetHeight}),onLeaveEnd:y},({className:X,style:Y},ie)=>f.createElement("div",Object.assign({id:O,ref:ea(M,ie),"data-show":!_,className:ae(D,X),style:Object.assign(Object.assign(Object.assign({},B),m),Y),onMouseEnter:v,onMouseLeave:p,onClick:h,role:"alert"},U),Z?f.createElement(oA,{description:r,icon:e.icon,prefixCls:V,type:q}):null,f.createElement("div",{className:`${V}-content`},i?f.createElement("div",{className:`${V}-message`},i):null,r?f.createElement("div",{className:`${V}-description`},r):null),E?f.createElement("div",{className:`${V}-action`},E):null,f.createElement(iA,{isClosable:ee,prefixCls:V,closeIcon:G,handleClose:F,ariaProps:W}))))});function lA(e,t,r){return t=vi(t),Kx(e,Ff()?Reflect.construct(t,r||[],vi(e).constructor):t.apply(e,r))}let sA=(function(e){function t(){var r;return Kn(this,t),r=lA(this,t,arguments),r.state={error:void 0,info:{componentStack:""}},r}return Ba(t,e),Xn(t,[{key:"componentDidCatch",value:function(a,i){this.setState({error:a,info:i})}},{key:"render",value:function(){const{message:a,description:i,id:s,children:c}=this.props,{error:d,info:m}=this.state,v=(m==null?void 0:m.componentStack)||null,p=typeof a>"u"?(d||"").toString():a,h=typeof i>"u"?v:i;return d?f.createElement(nw,{id:s,type:"error",message:p,description:f.createElement("pre",{style:{fontSize:"0.9em",overflowX:"auto"}},h)}):c}}])})(f.Component);const cA=nw;cA.ErrorBoundary=sA;const Dl=e=>{const[,,,,t]=ta();return t?`${e}-css-var`:""};var rt={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,CAPS_LOCK:20,ESC:27,SPACE:32,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,N:78,P:80,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,SEMICOLON:186,EQUALS:187,WIN_KEY:224},rw=f.forwardRef(function(e,t){var r=e.prefixCls,a=e.style,i=e.className,s=e.duration,c=s===void 0?4.5:s,d=e.showProgress,m=e.pauseOnHover,v=m===void 0?!0:m,p=e.eventKey,h=e.content,y=e.closable,C=e.closeIcon,w=C===void 0?"x":C,x=e.props,S=e.onClick,E=e.onNoticeClose,O=e.times,R=e.hovering,_=f.useState(!1),T=oe(_,2),M=T[0],N=T[1],A=f.useState(0),j=oe(A,2),I=j[0],L=j[1],B=f.useState(0),V=oe(B,2),H=V[0],Q=V[1],z=R||M,F=c>0&&d,q=function(){E(p)},ee=function(X){(X.key==="Enter"||X.code==="Enter"||X.keyCode===rt.ENTER)&&q()};f.useEffect(function(){if(!z&&c>0){var W=Date.now()-H,X=setTimeout(function(){q()},c*1e3-H);return function(){v&&clearTimeout(X),Q(Date.now()-W)}}},[c,z,O]),f.useEffect(function(){if(!z&&F&&(v||H===0)){var W=performance.now(),X,Y=function ie(){cancelAnimationFrame(X),X=requestAnimationFrame(function(ce){var fe=ce+H-W,Te=Math.min(fe/(c*1e3),1);L(Te*100),Te<1&&ie()})};return Y(),function(){v&&cancelAnimationFrame(X)}}},[c,H,z,F,O]);var Z=f.useMemo(function(){return pt(y)==="object"&&y!==null?y:y?{closeIcon:w}:{}},[y,w]),D=ro(Z,!0),U=100-(!I||I<0?0:I>100?100:I),G="".concat(r,"-notice");return f.createElement("div",Le({},x,{ref:t,className:ae(G,i,K({},"".concat(G,"-closable"),y)),style:a,onMouseEnter:function(X){var Y;N(!0),x==null||(Y=x.onMouseEnter)===null||Y===void 0||Y.call(x,X)},onMouseLeave:function(X){var Y;N(!1),x==null||(Y=x.onMouseLeave)===null||Y===void 0||Y.call(x,X)},onClick:S}),f.createElement("div",{className:"".concat(G,"-content")},h),y&&f.createElement("a",Le({tabIndex:0,className:"".concat(G,"-close"),onKeyDown:ee,"aria-label":"Close"},D,{onClick:function(X){X.preventDefault(),X.stopPropagation(),q()}}),Z.closeIcon),F&&f.createElement("progress",{className:"".concat(G,"-progress"),max:"100",value:U},U+"%"))}),aw=ue.createContext({}),uA=function(t){var r=t.children,a=t.classNames;return ue.createElement(aw.Provider,{value:{classNames:a}},r)},mC=8,vC=3,gC=16,fA=function(t){var r={offset:mC,threshold:vC,gap:gC};if(t&&pt(t)==="object"){var a,i,s;r.offset=(a=t.offset)!==null&&a!==void 0?a:mC,r.threshold=(i=t.threshold)!==null&&i!==void 0?i:vC,r.gap=(s=t.gap)!==null&&s!==void 0?s:gC}return[!!t,r]},dA=["className","style","classNames","styles"],mA=function(t){var r=t.configList,a=t.placement,i=t.prefixCls,s=t.className,c=t.style,d=t.motion,m=t.onAllNoticeRemoved,v=t.onNoticeClose,p=t.stack,h=f.useContext(aw),y=h.classNames,C=f.useRef({}),w=f.useState(null),x=oe(w,2),S=x[0],E=x[1],O=f.useState([]),R=oe(O,2),_=R[0],T=R[1],M=r.map(function(z){return{config:z,key:String(z.key)}}),N=fA(p),A=oe(N,2),j=A[0],I=A[1],L=I.offset,B=I.threshold,V=I.gap,H=j&&(_.length>0||M.length<=B),Q=typeof d=="function"?d(a):d;return f.useEffect(function(){j&&_.length>1&&T(function(z){return z.filter(function(F){return M.some(function(q){var ee=q.key;return F===ee})})})},[_,M,j]),f.useEffect(function(){var z;if(j&&C.current[(z=M[M.length-1])===null||z===void 0?void 0:z.key]){var F;E(C.current[(F=M[M.length-1])===null||F===void 0?void 0:F.key])}},[M,j]),ue.createElement(bN,Le({key:a,className:ae(i,"".concat(i,"-").concat(a),y==null?void 0:y.list,s,K(K({},"".concat(i,"-stack"),!!j),"".concat(i,"-stack-expanded"),H)),style:c,keys:M,motionAppear:!0},Q,{onAllRemoved:function(){m(a)}}),function(z,F){var q=z.config,ee=z.className,Z=z.style,D=z.index,U=q,G=U.key,W=U.times,X=String(G),Y=q,ie=Y.className,ce=Y.style,fe=Y.classNames,Te=Y.styles,he=zt(Y,dA),se=M.findIndex(function(Ce){return Ce.key===X}),ye={};if(j){var be=M.length-1-(se>-1?se:D-1),ge=a==="top"||a==="bottom"?"-50%":"0";if(be>0){var te,xe,Ee;ye.height=H?(te=C.current[X])===null||te===void 0?void 0:te.offsetHeight:S==null?void 0:S.offsetHeight;for(var _e=0,je=0;je-1?C.current[X]=Xe:delete C.current[X]},prefixCls:i,classNames:fe,styles:Te,className:ae(ie,y==null?void 0:y.notice),style:ce,times:W,key:G,eventKey:G,onNoticeClose:v,hovering:j&&_.length>0})))})},vA=f.forwardRef(function(e,t){var r=e.prefixCls,a=r===void 0?"rc-notification":r,i=e.container,s=e.motion,c=e.maxCount,d=e.className,m=e.style,v=e.onAllRemoved,p=e.stack,h=e.renderNotifications,y=f.useState([]),C=oe(y,2),w=C[0],x=C[1],S=function(j){var I,L=w.find(function(B){return B.key===j});L==null||(I=L.onClose)===null||I===void 0||I.call(L),x(function(B){return B.filter(function(V){return V.key!==j})})};f.useImperativeHandle(t,function(){return{open:function(j){x(function(I){var L=Ue(I),B=L.findIndex(function(Q){return Q.key===j.key}),V=J({},j);if(B>=0){var H;V.times=(((H=I[B])===null||H===void 0?void 0:H.times)||0)+1,L[B]=V}else V.times=0,L.push(V);return c>0&&L.length>c&&(L=L.slice(-c)),L})},close:function(j){S(j)},destroy:function(){x([])}}});var E=f.useState({}),O=oe(E,2),R=O[0],_=O[1];f.useEffect(function(){var A={};w.forEach(function(j){var I=j.placement,L=I===void 0?"topRight":I;L&&(A[L]=A[L]||[],A[L].push(j))}),Object.keys(R).forEach(function(j){A[j]=A[j]||[]}),_(A)},[w]);var T=function(j){_(function(I){var L=J({},I),B=L[j]||[];return B.length||delete L[j],L})},M=f.useRef(!1);if(f.useEffect(function(){Object.keys(R).length>0?M.current=!0:M.current&&(v==null||v(),M.current=!1)},[R]),!i)return null;var N=Object.keys(R);return Bo.createPortal(f.createElement(f.Fragment,null,N.map(function(A){var j=R[A],I=f.createElement(mA,{key:A,configList:j,placement:A,prefixCls:a,className:d==null?void 0:d(A),style:m==null?void 0:m(A),motion:s,onNoticeClose:S,onAllNoticeRemoved:T,stack:p});return h?h(I,{prefixCls:a,key:A}):I})),i)}),gA=["getContainer","motion","prefixCls","maxCount","className","style","onAllRemoved","stack","renderNotifications"],pA=function(){return document.body},pC=0;function hA(){for(var e={},t=arguments.length,r=new Array(t),a=0;a0&&arguments[0]!==void 0?arguments[0]:{},t=e.getContainer,r=t===void 0?pA:t,a=e.motion,i=e.prefixCls,s=e.maxCount,c=e.className,d=e.style,m=e.onAllRemoved,v=e.stack,p=e.renderNotifications,h=zt(e,gA),y=f.useState(),C=oe(y,2),w=C[0],x=C[1],S=f.useRef(),E=f.createElement(vA,{container:w,ref:S,prefixCls:i,motion:a,maxCount:s,className:c,style:d,onAllRemoved:m,stack:v,renderNotifications:p}),O=f.useState([]),R=oe(O,2),_=R[0],T=R[1],M=Gn(function(A){var j=hA(h,A);(j.key===null||j.key===void 0)&&(j.key="rc-notification-".concat(pC),pC+=1),T(function(I){return[].concat(Ue(I),[{type:"open",config:j}])})}),N=f.useMemo(function(){return{open:M,close:function(j){T(function(I){return[].concat(Ue(I),[{type:"close",key:j}])})},destroy:function(){T(function(j){return[].concat(Ue(j),[{type:"destroy"}])})}}},[]);return f.useEffect(function(){x(r())}),f.useEffect(function(){if(S.current&&_.length){_.forEach(function(I){switch(I.type){case"open":S.current.open(I.config);break;case"close":S.current.close(I.key);break;case"destroy":S.current.destroy();break}});var A,j;T(function(I){return(A!==I||!j)&&(A=I,j=I.filter(function(L){return!_.includes(L)})),j})}},[_]),[N,E]}var yA={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"},SA=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:yA}))},Qf=f.forwardRef(SA);function hC(...e){const t={};return e.forEach(r=>{r&&Object.keys(r).forEach(a=>{r[a]!==void 0&&(t[a]=r[a])})}),t}function bC(e){if(!e)return;const{closable:t,closeIcon:r}=e;return{closable:t,closeIcon:r}}function yC(e){const{closable:t,closeIcon:r}=e||{};return ue.useMemo(()=>{if(!t&&(t===!1||r===!1||r===null))return!1;if(t===void 0&&r===void 0)return null;let a={closeIcon:typeof r!="boolean"&&r!==null?r:void 0};return t&&typeof t=="object"&&(a=Object.assign(Object.assign({},a),t)),a},[t,r])}const CA={},xA=(e,t,r=CA)=>{const a=yC(e),i=yC(t),[s]=zl("global",gi.global),c=typeof a!="boolean"?!!(a!=null&&a.disabled):!1,d=ue.useMemo(()=>Object.assign({closeIcon:ue.createElement(bc,null)},r),[r]),m=ue.useMemo(()=>a===!1?!1:a?hC(d,i,a):i===!1?!1:i?hC(d,i):d.closable?d:!1,[a,i,d]);return ue.useMemo(()=>{var v,p;if(m===!1)return[!1,null,c,{}];const{closeIconRender:h}=d,{closeIcon:y}=m;let C=y;const w=ro(m,!0);return C!=null&&(h&&(C=h(y)),C=ue.isValidElement(C)?ue.cloneElement(C,Object.assign(Object.assign(Object.assign({},C.props),{"aria-label":(p=(v=C.props)===null||v===void 0?void 0:v["aria-label"])!==null&&p!==void 0?p:s.close}),w)):ue.createElement("span",Object.assign({"aria-label":s.close},w),C)),[!0,C,c,w]},[c,s.close,m,d])},EA=()=>ue.useReducer(e=>e+1,0),ow=ue.createContext(void 0),jo=100,wA=10,OA=jo*wA,iw={Modal:jo,Drawer:jo,Popover:jo,Popconfirm:jo,Tooltip:jo,Tour:jo,FloatButton:jo},$A={SelectLike:50,Dropdown:50,DatePicker:50,Menu:50,ImagePreview:1};function RA(e){return e in iw}const lw=(e,t)=>{const[,r]=ta(),a=ue.useContext(ow),i=RA(e);let s;if(t!==void 0)s=[t,t];else{let c=a??0;i?c+=(a?0:r.zIndexPopupBase)+iw[e]:c+=$A[e],s=[a===void 0?t:c,c]}return s},TA=e=>{const{componentCls:t,iconCls:r,boxShadow:a,colorText:i,colorSuccess:s,colorError:c,colorWarning:d,colorInfo:m,fontSizeLG:v,motionEaseInOutCirc:p,motionDurationSlow:h,marginXS:y,paddingXS:C,borderRadiusLG:w,zIndexPopup:x,contentPadding:S,contentBg:E}=e,O=`${t}-notice`,R=new rn("MessageMoveIn",{"0%":{padding:0,transform:"translateY(-100%)",opacity:0},"100%":{padding:C,transform:"translateY(0)",opacity:1}}),_=new rn("MessageMoveOut",{"0%":{maxHeight:e.height,padding:C,opacity:1},"100%":{maxHeight:0,padding:0,opacity:0}}),T={padding:C,textAlign:"center",[`${t}-custom-content`]:{display:"flex",alignItems:"center"},[`${t}-custom-content > ${r}`]:{marginInlineEnd:y,fontSize:v},[`${O}-content`]:{display:"inline-block",padding:S,background:E,borderRadius:w,boxShadow:a,pointerEvents:"all"},[`${t}-success > ${r}`]:{color:s},[`${t}-error > ${r}`]:{color:c},[`${t}-warning > ${r}`]:{color:d},[`${t}-info > ${r}, + ${t}-loading > ${r}`]:{color:m}};return[{[t]:Object.assign(Object.assign({},Tr(e)),{color:i,position:"fixed",top:y,width:"100%",pointerEvents:"none",zIndex:x,[`${t}-move-up`]:{animationFillMode:"forwards"},[` + ${t}-move-up-appear, + ${t}-move-up-enter + `]:{animationName:R,animationDuration:h,animationPlayState:"paused",animationTimingFunction:p},[` + ${t}-move-up-appear${t}-move-up-appear-active, + ${t}-move-up-enter${t}-move-up-enter-active + `]:{animationPlayState:"running"},[`${t}-move-up-leave`]:{animationName:_,animationDuration:h,animationPlayState:"paused",animationTimingFunction:p},[`${t}-move-up-leave${t}-move-up-leave-active`]:{animationPlayState:"running"},"&-rtl":{direction:"rtl",span:{direction:"rtl"}}})},{[t]:{[`${O}-wrapper`]:Object.assign({},T)}},{[`${t}-notice-pure-panel`]:Object.assign(Object.assign({},T),{padding:0,textAlign:"start"})}]},_A=e=>({zIndexPopup:e.zIndexPopupBase+OA+10,contentBg:e.colorBgElevated,contentPadding:`${(e.controlHeightLG-e.fontSize*e.lineHeight)/2}px ${e.paddingSM}px`}),sw=_n("Message",e=>{const t=un(e,{height:150});return TA(t)},_A);var MA=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);if.createElement("div",{className:ae(`${e}-custom-content`,`${e}-${t}`)},r||NA[t],f.createElement("span",null,a)),AA=e=>{const{prefixCls:t,className:r,type:a,icon:i,content:s}=e,c=MA(e,["prefixCls","className","type","icon","content"]),{getPrefixCls:d}=f.useContext(It),m=t||d("message"),v=Dl(m),[p,h,y]=sw(m,v);return p(f.createElement(rw,Object.assign({},c,{prefixCls:m,className:ae(r,h,`${m}-notice-pure-panel`,y,v),eventKey:"pure",duration:null,content:f.createElement(cw,{prefixCls:m,type:a,icon:i},s)})))};function zA(e,t){return{motionName:t??`${e}-move-up`}}function nh(e){let t;const r=new Promise(i=>{t=e(()=>{i(!0)})}),a=()=>{t==null||t()};return a.then=(i,s)=>r.then(i,s),a.promise=r,a}var jA=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const r=Dl(t),[a,i,s]=sw(t,r);return a(f.createElement(uA,{classNames:{list:ae(i,s,r)}},e))},BA=(e,{prefixCls:t,key:r})=>f.createElement(PA,{prefixCls:t,key:r},e),LA=f.forwardRef((e,t)=>{const{top:r,prefixCls:a,getContainer:i,maxCount:s,duration:c=IA,rtl:d,transitionName:m,onAllRemoved:v}=e,{getPrefixCls:p,getPopupContainer:h,message:y,direction:C}=f.useContext(It),w=a||p("message"),x=()=>({left:"50%",transform:"translateX(-50%)",top:r??DA}),S=()=>ae({[`${w}-rtl`]:d??C==="rtl"}),E=()=>zA(w,m),O=f.createElement("span",{className:`${w}-close-x`},f.createElement(bc,{className:`${w}-close-icon`})),[R,_]=bA({prefixCls:w,style:x,className:S,motion:E,closable:!1,closeIcon:O,duration:c,getContainer:()=>(i==null?void 0:i())||(h==null?void 0:h())||document.body,maxCount:s,onAllRemoved:v,renderNotifications:BA});return f.useImperativeHandle(t,()=>Object.assign(Object.assign({},R),{prefixCls:w,message:y})),_});let SC=0;function uw(e){const t=f.useRef(null);return Jp(),[f.useMemo(()=>{const a=m=>{var v;(v=t.current)===null||v===void 0||v.close(m)},i=m=>{if(!t.current){const M=()=>{};return M.then=()=>{},M}const{open:v,prefixCls:p,message:h}=t.current,y=`${p}-notice`,{content:C,icon:w,type:x,key:S,className:E,style:O,onClose:R}=m,_=jA(m,["content","icon","type","key","className","style","onClose"]);let T=S;return T==null&&(SC+=1,T=`antd-message-${SC}`),nh(M=>(v(Object.assign(Object.assign({},_),{key:T,content:f.createElement(cw,{prefixCls:p,type:x,icon:w},C),placement:"top",className:ae(x&&`${y}-${x}`,E,h==null?void 0:h.className),style:Object.assign(Object.assign({},h==null?void 0:h.style),O),onClose:()=>{R==null||R(),M()}})),()=>{a(T)}))},c={open:i,destroy:m=>{var v;m!==void 0?a(m):(v=t.current)===null||v===void 0||v.destroy()}};return["info","success","warning","error","loading"].forEach(m=>{const v=(p,h,y)=>{let C;p&&typeof p=="object"&&"content"in p?C=p:C={content:p};let w,x;typeof h=="function"?x=h:(w=h,x=y);const S=Object.assign(Object.assign({onClose:x,duration:w},C),{type:m});return i(S)};c[m]=v}),c},[]),f.createElement(LA,Object.assign({key:"message-holder"},e,{ref:t}))]}function HA(e){return uw(e)}function fw(e,t){this.v=e,this.k=t}function Sr(e,t,r,a){var i=Object.defineProperty;try{i({},"",{})}catch{i=0}Sr=function(c,d,m,v){function p(h,y){Sr(c,h,function(C){return this._invoke(h,y,C)})}d?i?i(c,d,{value:m,enumerable:!v,configurable:!v,writable:!v}):c[d]=m:(p("next",0),p("throw",1),p("return",2))},Sr(e,t,r,a)}function rh(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r=typeof Symbol=="function"?Symbol:{},a=r.iterator||"@@iterator",i=r.toStringTag||"@@toStringTag";function s(C,w,x,S){var E=w&&w.prototype instanceof d?w:d,O=Object.create(E.prototype);return Sr(O,"_invoke",(function(R,_,T){var M,N,A,j=0,I=T||[],L=!1,B={p:0,n:0,v:e,a:V,f:V.bind(e,4),d:function(Q,z){return M=Q,N=0,A=e,B.n=z,c}};function V(H,Q){for(N=H,A=Q,t=0;!L&&j&&!z&&t3?(z=ee===Q)&&(A=F[(N=F[4])?5:(N=3,3)],F[4]=F[5]=e):F[0]<=q&&((z=H<2&&qQ||Q>ee)&&(F[4]=H,F[5]=Q,B.n=ee,N=0))}if(z||H>1)return c;throw L=!0,Q}return function(H,Q,z){if(j>1)throw TypeError("Generator is already running");for(L&&Q===1&&V(Q,z),N=Q,A=z;(t=N<2?e:A)||!L;){M||(N?N<3?(N>1&&(B.n=-1),V(N,A)):B.n=A:B.v=A);try{if(j=2,M){if(N||(H="next"),t=M[H]){if(!(t=t.call(M,A)))throw TypeError("iterator result is not an object");if(!t.done)return t;A=t.value,N<2&&(N=0)}else N===1&&(t=M.return)&&t.call(M),N<2&&(A=TypeError("The iterator does not provide a '"+H+"' method"),N=1);M=e}else if((t=(L=B.n<0)?A:R.call(_,B))!==c)break}catch(F){M=e,N=1,A=F}finally{j=1}}return{value:t,done:L}}})(C,x,S),!0),O}var c={};function d(){}function m(){}function v(){}t=Object.getPrototypeOf;var p=[][a]?t(t([][a]())):(Sr(t={},a,function(){return this}),t),h=v.prototype=d.prototype=Object.create(p);function y(C){return Object.setPrototypeOf?Object.setPrototypeOf(C,v):(C.__proto__=v,Sr(C,i,"GeneratorFunction")),C.prototype=Object.create(h),C}return m.prototype=v,Sr(h,"constructor",v),Sr(v,"constructor",m),m.displayName="GeneratorFunction",Sr(v,i,"GeneratorFunction"),Sr(h),Sr(h,i,"Generator"),Sr(h,a,function(){return this}),Sr(h,"toString",function(){return"[object Generator]"}),(rh=function(){return{w:s,m:y}})()}function Ef(e,t){function r(i,s,c,d){try{var m=e[i](s),v=m.value;return v instanceof fw?t.resolve(v.v).then(function(p){r("next",p,c,d)},function(p){r("throw",p,c,d)}):t.resolve(v).then(function(p){m.value=p,c(m)},function(p){return r("throw",p,c,d)})}catch(p){d(p)}}var a;this.next||(Sr(Ef.prototype),Sr(Ef.prototype,typeof Symbol=="function"&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),Sr(this,"_invoke",function(i,s,c){function d(){return new t(function(m,v){r(i,c,m,v)})}return a=a?a.then(d,d):d()},!0)}function dw(e,t,r,a,i){return new Ef(rh().w(e,t,r,a),i||Promise)}function FA(e,t,r,a,i){var s=dw(e,t,r,a,i);return s.next().then(function(c){return c.done?c.value:s.next()})}function VA(e){var t=Object(e),r=[];for(var a in t)r.unshift(a);return function i(){for(;r.length;)if((a=r.pop())in t)return i.value=a,i.done=!1,i;return i.done=!0,i}}function CC(e){if(e!=null){var t=e[typeof Symbol=="function"&&Symbol.iterator||"@@iterator"],r=0;if(t)return t.call(e);if(typeof e.next=="function")return e;if(!isNaN(e.length))return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(pt(e)+" is not iterable")}function wr(){var e=rh(),t=e.m(wr),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function a(c){var d=typeof c=="function"&&c.constructor;return!!d&&(d===r||(d.displayName||d.name)==="GeneratorFunction")}var i={throw:1,return:2,break:3,continue:3};function s(c){var d,m;return function(v){d||(d={stop:function(){return m(v.a,2)},catch:function(){return v.v},abrupt:function(h,y){return m(v.a,i[h],y)},delegateYield:function(h,y,C){return d.resultName=y,m(v.d,CC(h),C)},finish:function(h){return m(v.f,h)}},m=function(h,y,C){v.p=d.prev,v.n=d.next;try{return h(y,C)}finally{d.next=v.n}}),d.resultName&&(d[d.resultName]=v.v,d.resultName=void 0),d.sent=v.v,d.next=v.n;try{return c.call(this,d)}finally{v.p=d.prev,v.n=d.next}}}return(wr=function(){return{wrap:function(m,v,p,h){return e.w(s(m),v,p,h&&h.reverse())},isGeneratorFunction:a,mark:e.m,awrap:function(m,v){return new fw(m,v)},AsyncIterator:Ef,async:function(m,v,p,h,y){return(a(v)?dw:FA)(s(m),v,p,h,y)},keys:VA,values:CC}})()}function xC(e,t,r,a,i,s,c){try{var d=e[s](c),m=d.value}catch(v){return void r(v)}d.done?t(m):Promise.resolve(m).then(a,i)}function Ei(e){return function(){var t=this,r=arguments;return new Promise(function(a,i){var s=e.apply(t,r);function c(m){xC(s,a,i,c,d,"next",m)}function d(m){xC(s,a,i,c,d,"throw",m)}c(void 0)})}}var yc=J({},fT),UA=yc.version,Uv=yc.render,qA=yc.unmountComponentAtNode,Zf;try{var GA=Number((UA||"").split(".")[0]);GA>=18&&(Zf=yc.createRoot)}catch{}function EC(e){var t=yc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&pt(t)==="object"&&(t.usingClientEntryPoint=e)}var wf="__rc_react_root__";function WA(e,t){EC(!0);var r=t[wf]||Zf(t);EC(!1),r.render(e),t[wf]=r}function KA(e,t){Uv==null||Uv(e,t)}function XA(e,t){if(Zf){WA(e,t);return}KA(e,t)}function YA(e){return dp.apply(this,arguments)}function dp(){return dp=Ei(wr().mark(function e(t){return wr().wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",Promise.resolve().then(function(){var i;(i=t[wf])===null||i===void 0||i.unmount(),delete t[wf]}));case 1:case"end":return a.stop()}},e)})),dp.apply(this,arguments)}function QA(e){qA(e)}function ZA(e){return mp.apply(this,arguments)}function mp(){return mp=Ei(wr().mark(function e(t){return wr().wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(Zf===void 0){a.next=2;break}return a.abrupt("return",YA(t));case 2:QA(t);case 3:case"end":return a.stop()}},e)})),mp.apply(this,arguments)}const JA=(e,t)=>(XA(e,t),()=>ZA(t));let kA=JA;function mw(e){return kA}const qv=()=>({height:0,opacity:0}),wC=e=>{const{scrollHeight:t}=e;return{height:t,opacity:1}},ez=e=>({height:e?e.offsetHeight:0}),Gv=(e,t)=>(t==null?void 0:t.deadline)===!0||t.propertyName==="height",u9=(e=lc)=>({motionName:`${e}-motion-collapse`,onAppearStart:qv,onEnterStart:qv,onAppearActive:wC,onEnterActive:wC,onLeaveStart:ez,onLeaveActive:qv,onAppearEnd:Gv,onEnterEnd:Gv,onLeaveEnd:Gv,motionDeadline:500}),ah=(e,t,r)=>r!==void 0?r:`${e}-${t}`;function or(e,t){var r=Object.assign({},e);return Array.isArray(t)&&t.forEach(function(a){delete r[a]}),r}const oh=(function(e){if(!e)return!1;if(e instanceof Element){if(e.offsetParent)return!0;if(e.getBBox){var t=e.getBBox(),r=t.width,a=t.height;if(r||a)return!0}if(e.getBoundingClientRect){var i=e.getBoundingClientRect(),s=i.width,c=i.height;if(s||c)return!0}}return!1}),tz=e=>{const{componentCls:t,colorPrimary:r}=e;return{[t]:{position:"absolute",background:"transparent",pointerEvents:"none",boxSizing:"border-box",color:`var(--wave-color, ${r})`,boxShadow:"0 0 0 0 currentcolor",opacity:.2,"&.wave-motion-appear":{transition:[`box-shadow 0.4s ${e.motionEaseOutCirc}`,`opacity 2s ${e.motionEaseOutCirc}`].join(","),"&-active":{boxShadow:"0 0 0 6px currentcolor",opacity:0},"&.wave-quick":{transition:[`box-shadow ${e.motionDurationSlow} ${e.motionEaseInOut}`,`opacity ${e.motionDurationSlow} ${e.motionEaseInOut}`].join(",")}}}}},nz=GM("Wave",tz),vw=`${lc}-wave-target`;function rz(e){return e&&e!=="#fff"&&e!=="#ffffff"&&e!=="rgb(255, 255, 255)"&&e!=="rgba(255, 255, 255, 1)"&&!/rgba\((?:\d*, ){3}0\)/.test(e)&&e!=="transparent"&&e!=="canvastext"}function az(e){var t;const{borderTopColor:r,borderColor:a,backgroundColor:i}=getComputedStyle(e);return(t=[r,a,i].find(rz))!==null&&t!==void 0?t:null}function Wv(e){return Number.isNaN(e)?0:e}const oz=e=>{const{className:t,target:r,component:a,registerUnmount:i}=e,s=f.useRef(null),c=f.useRef(null);f.useEffect(()=>{c.current=i()},[]);const[d,m]=f.useState(null),[v,p]=f.useState([]),[h,y]=f.useState(0),[C,w]=f.useState(0),[x,S]=f.useState(0),[E,O]=f.useState(0),[R,_]=f.useState(!1),T={left:h,top:C,width:x,height:E,borderRadius:v.map(A=>`${A}px`).join(" ")};d&&(T["--wave-color"]=d);function M(){const A=getComputedStyle(r);m(az(r));const j=A.position==="static",{borderLeftWidth:I,borderTopWidth:L}=A;y(j?r.offsetLeft:Wv(-Number.parseFloat(I))),w(j?r.offsetTop:Wv(-Number.parseFloat(L))),S(r.offsetWidth),O(r.offsetHeight);const{borderTopLeftRadius:B,borderTopRightRadius:V,borderBottomLeftRadius:H,borderBottomRightRadius:Q}=A;p([B,V,Q,H].map(z=>Wv(Number.parseFloat(z))))}if(f.useEffect(()=>{if(r){const A=bn(()=>{M(),_(!0)});let j;return typeof ResizeObserver<"u"&&(j=new ResizeObserver(M),j.observe(r)),()=>{bn.cancel(A),j==null||j.disconnect()}}},[r]),!R)return null;const N=(a==="Checkbox"||a==="Radio")&&(r==null?void 0:r.classList.contains(vw));return f.createElement(Fo,{visible:!0,motionAppear:!0,motionName:"wave-motion",motionDeadline:5e3,onAppearEnd:(A,j)=>{var I,L;if(j.deadline||j.propertyName==="opacity"){const B=(I=s.current)===null||I===void 0?void 0:I.parentElement;(L=c.current)===null||L===void 0||L.call(c).then(()=>{B==null||B.remove()})}return!1}},({className:A},j)=>f.createElement("div",{ref:ea(s,j),className:ae(t,A,{"wave-quick":N}),style:T}))},iz=(e,t)=>{var r;const{component:a}=t;if(a==="Checkbox"&&!(!((r=e.querySelector("input"))===null||r===void 0)&&r.checked))return;const i=document.createElement("div");i.style.position="absolute",i.style.left="0px",i.style.top="0px",e==null||e.insertBefore(i,e==null?void 0:e.firstChild);const s=mw();let c=null;function d(){return c}c=s(f.createElement(oz,Object.assign({},t,{target:e,registerUnmount:d})),i)},lz=(e,t,r)=>{const{wave:a}=f.useContext(It),[,i,s]=ta(),c=Gn(v=>{const p=e.current;if(a!=null&&a.disabled||!p)return;const h=p.querySelector(`.${vw}`)||p,{showEffect:y}=a||{};(y||iz)(h,{className:t,token:i,component:r,event:v,hashId:s})}),d=f.useRef(null);return v=>{bn.cancel(d.current),d.current=bn(()=>{c(v)})}},gw=e=>{const{children:t,disabled:r,component:a}=e,{getPrefixCls:i}=f.useContext(It),s=f.useRef(null),c=i("wave"),[,d]=nz(c),m=lz(s,ae(c,d),a);if(ue.useEffect(()=>{const p=s.current;if(!p||p.nodeType!==window.Node.ELEMENT_NODE||r)return;const h=y=>{!oh(y.target)||!p.getAttribute||p.getAttribute("disabled")||p.disabled||p.className.includes("disabled")&&!p.className.includes("disabled:")||p.getAttribute("aria-disabled")==="true"||p.className.includes("-leave")||m(y)};return p.addEventListener("click",h,!0),()=>{p.removeEventListener("click",h,!0)}},[r]),!ue.isValidElement(t))return t??null;const v=Ho(t)?ea(Nl(t),s):s;return bi(t,{ref:v})},Ta=e=>{const t=ue.useContext(wl);return ue.useMemo(()=>e?typeof e=="string"?e??t:typeof e=="function"?e(t):t:t,[e,t])},sz=e=>{const{componentCls:t}=e;return{[t]:{display:"inline-flex","&-block":{display:"flex",width:"100%"},"&-vertical":{flexDirection:"column"},"&-rtl":{direction:"rtl"}}}},cz=_n(["Space","Compact"],e=>[sz(e)],()=>({}),{resetStyle:!1});var pw=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const r=f.useContext(Jf),a=f.useMemo(()=>{if(!r)return"";const{compactDirection:i,isFirstItem:s,isLastItem:c}=r,d=i==="vertical"?"-vertical-":"-";return ae(`${e}-compact${d}item`,{[`${e}-compact${d}first-item`]:s,[`${e}-compact${d}last-item`]:c,[`${e}-compact${d}item-rtl`]:t==="rtl"})},[e,t,r]);return{compactSize:r==null?void 0:r.compactSize,compactDirection:r==null?void 0:r.compactDirection,compactItemClassnames:a}},uz=e=>{const{children:t}=e;return f.createElement(Jf.Provider,{value:null},t)},fz=e=>{const{children:t}=e,r=pw(e,["children"]);return f.createElement(Jf.Provider,{value:f.useMemo(()=>r,[r])},t)},dz=e=>{const{getPrefixCls:t,direction:r}=f.useContext(It),{size:a,direction:i,block:s,prefixCls:c,className:d,rootClassName:m,children:v}=e,p=pw(e,["size","direction","block","prefixCls","className","rootClassName","children"]),h=Ta(R=>a??R),y=t("space-compact",c),[C,w]=cz(y),x=ae(y,w,{[`${y}-rtl`]:r==="rtl",[`${y}-block`]:s,[`${y}-vertical`]:i==="vertical"},d,m),S=f.useContext(Jf),E=kr(v),O=f.useMemo(()=>E.map((R,_)=>{const T=(R==null?void 0:R.key)||`${y}-item-${_}`;return f.createElement(fz,{key:T,compactSize:h,compactDirection:i,isFirstItem:_===0&&(!S||(S==null?void 0:S.isFirstItem)),isLastItem:_===E.length-1&&(!S||(S==null?void 0:S.isLastItem))},R)}),[E,S,i,h,y]);return E.length===0?null:C(f.createElement("div",Object.assign({className:x},p),O))};var mz=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{getPrefixCls:t,direction:r}=f.useContext(It),{prefixCls:a,size:i,className:s}=e,c=mz(e,["prefixCls","size","className"]),d=t("btn-group",a),[,,m]=ta(),v=f.useMemo(()=>{switch(i){case"large":return"lg";case"small":return"sm";default:return""}},[i]),p=ae(d,{[`${d}-${v}`]:v,[`${d}-rtl`]:r==="rtl"},s,m);return f.createElement(hw.Provider,{value:i},f.createElement("div",Object.assign({},c,{className:p})))},OC=/^[\u4E00-\u9FA5]{2}$/,vp=OC.test.bind(OC);function $C(e){return typeof e=="string"}function Kv(e){return e==="text"||e==="link"}function gz(e,t){if(e==null)return;const r=t?" ":"";return typeof e!="string"&&typeof e!="number"&&$C(e.type)&&vp(e.props.children)?bi(e,{children:e.props.children.split("").join(r)}):$C(e)?vp(e)?ue.createElement("span",null,e.split("").join(r)):ue.createElement("span",null,e):tw(e)?ue.createElement("span",null,e):e}function pz(e,t){let r=!1;const a=[];return ue.Children.forEach(e,i=>{const s=typeof i,c=s==="string"||s==="number";if(r&&c){const d=a.length-1,m=a[d];a[d]=`${m}${i}`}else a.push(i);r=c}),ue.Children.map(a,i=>gz(i,t))}["default","primary","danger"].concat(Ue(pi));const bw=f.forwardRef((e,t)=>{const{className:r,style:a,children:i,prefixCls:s}=e,c=ae(`${s}-icon`,r);return ue.createElement("span",{ref:t,className:c,style:a},i)}),RC=f.forwardRef((e,t)=>{const{prefixCls:r,className:a,style:i,iconClassName:s}=e,c=ae(`${r}-loading-icon`,a);return ue.createElement(bw,{prefixCls:r,className:c,style:i,ref:t},ue.createElement(Qf,{className:s}))}),Xv=()=>({width:0,opacity:0,transform:"scale(0)"}),Yv=e=>({width:e.scrollWidth,opacity:1,transform:"scale(1)"}),hz=e=>{const{prefixCls:t,loading:r,existIcon:a,className:i,style:s,mount:c}=e,d=!!r;return a?ue.createElement(RC,{prefixCls:t,className:i,style:s}):ue.createElement(Fo,{visible:d,motionName:`${t}-loading-icon-motion`,motionAppear:!c,motionEnter:!c,motionLeave:!c,removeOnLeave:!0,onAppearStart:Xv,onAppearActive:Yv,onEnterStart:Xv,onEnterActive:Yv,onLeaveStart:Yv,onLeaveActive:Xv},({className:m,style:v},p)=>{const h=Object.assign(Object.assign({},s),v);return ue.createElement(RC,{prefixCls:t,className:ae(i,m),style:h,ref:p})})},TC=(e,t)=>({[`> span, > ${e}`]:{"&:not(:last-child)":{[`&, & > ${e}`]:{"&:not(:disabled)":{borderInlineEndColor:t}}},"&:not(:first-child)":{[`&, & > ${e}`]:{"&:not(:disabled)":{borderInlineStartColor:t}}}}}),bz=e=>{const{componentCls:t,fontSize:r,lineWidth:a,groupBorderColor:i,colorErrorHover:s}=e;return{[`${t}-group`]:[{position:"relative",display:"inline-flex",[`> span, > ${t}`]:{"&:not(:last-child)":{[`&, & > ${t}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},"&:not(:first-child)":{marginInlineStart:e.calc(a).mul(-1).equal(),[`&, & > ${t}`]:{borderStartStartRadius:0,borderEndStartRadius:0}}},[t]:{position:"relative",zIndex:1,"&:hover, &:focus, &:active":{zIndex:2},"&[disabled]":{zIndex:0}},[`${t}-icon-only`]:{fontSize:r}},TC(`${t}-primary`,i),TC(`${t}-danger`,s)]}};var yz=["b"],Sz=["v"],Qv=function(t){return Math.round(Number(t||0))},Cz=function(t){if(t instanceof On)return t;if(t&&pt(t)==="object"&&"h"in t&&"b"in t){var r=t,a=r.b,i=zt(r,yz);return J(J({},i),{},{v:a})}return typeof t=="string"&&/hsb/.test(t)?t.replace(/hsb/,"hsv"):t},uc=(function(e){Ba(r,e);var t=oo(r);function r(a){return Kn(this,r),t.call(this,Cz(a))}return Xn(r,[{key:"toHsbString",value:function(){var i=this.toHsb(),s=Qv(i.s*100),c=Qv(i.b*100),d=Qv(i.h),m=i.a,v="hsb(".concat(d,", ").concat(s,"%, ").concat(c,"%)"),p="hsba(".concat(d,", ").concat(s,"%, ").concat(c,"%, ").concat(m.toFixed(m===0?0:2),")");return m===1?v:p}},{key:"toHsb",value:function(){var i=this.toHsv(),s=i.v,c=zt(i,Sz);return J(J({},c),{},{b:s,a:this.a})}}]),r})(On),xz=function(t){return t instanceof uc?t:new uc(t)};xz("#1677ff");const Ez=(e,t)=>(e==null?void 0:e.replace(/[^\w/]/g,"").slice(0,t?8:6))||"",wz=(e,t)=>e?Ez(e,t):"";let gp=(function(){function e(t){Kn(this,e);var r;if(this.cleared=!1,t instanceof e){this.metaColor=t.metaColor.clone(),this.colors=(r=t.colors)===null||r===void 0?void 0:r.map(i=>({color:new e(i.color),percent:i.percent})),this.cleared=t.cleared;return}const a=Array.isArray(t);a&&t.length?(this.colors=t.map(({color:i,percent:s})=>({color:new e(i),percent:s})),this.metaColor=new uc(this.colors[0].color.metaColor)):this.metaColor=new uc(a?"":t),(!t||a&&!this.colors)&&(this.metaColor=this.metaColor.setA(0),this.cleared=!0)}return Xn(e,[{key:"toHsb",value:function(){return this.metaColor.toHsb()}},{key:"toHsbString",value:function(){return this.metaColor.toHsbString()}},{key:"toHex",value:function(){return wz(this.toHexString(),this.metaColor.a<1)}},{key:"toHexString",value:function(){return this.metaColor.toHexString()}},{key:"toRgb",value:function(){return this.metaColor.toRgb()}},{key:"toRgbString",value:function(){return this.metaColor.toRgbString()}},{key:"isGradient",value:function(){return!!this.colors&&!this.cleared}},{key:"getColors",value:function(){return this.colors||[{color:this,percent:0}]}},{key:"toCssString",value:function(){const{colors:r}=this;return r?`linear-gradient(90deg, ${r.map(i=>`${i.color.toRgbString()} ${i.percent}%`).join(", ")})`:this.metaColor.toRgbString()}},{key:"equals",value:function(r){return!r||this.isGradient()!==r.isGradient()?!1:this.isGradient()?this.colors.length===r.colors.length&&this.colors.every((a,i)=>{const s=r.colors[i];return a.percent===s.percent&&a.color.equals(s.color)}):this.toHexString()===r.toHexString()}}])})();var Oz={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z"}}]},name:"right",theme:"outlined"},$z=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:Oz}))},Of=f.forwardRef($z);const Rz=e=>({animationDuration:e,animationFillMode:"both"}),Tz=e=>({animationDuration:e,animationFillMode:"both"}),ih=(e,t,r,a,i=!1)=>{const s=i?"&":"";return{[` + ${s}${e}-enter, + ${s}${e}-appear + `]:Object.assign(Object.assign({},Rz(a)),{animationPlayState:"paused"}),[`${s}${e}-leave`]:Object.assign(Object.assign({},Tz(a)),{animationPlayState:"paused"}),[` + ${s}${e}-enter${e}-enter-active, + ${s}${e}-appear${e}-appear-active + `]:{animationName:t,animationPlayState:"running"},[`${s}${e}-leave${e}-leave-active`]:{animationName:r,animationPlayState:"running",pointerEvents:"none"}}},_z=new rn("antMoveDownIn",{"0%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),Mz=new rn("antMoveDownOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0}}),Nz=new rn("antMoveLeftIn",{"0%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),Az=new rn("antMoveLeftOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),zz=new rn("antMoveRightIn",{"0%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),jz=new rn("antMoveRightOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),Dz=new rn("antMoveUpIn",{"0%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),Iz=new rn("antMoveUpOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0}}),Pz={"move-up":{inKeyframes:Dz,outKeyframes:Iz},"move-down":{inKeyframes:_z,outKeyframes:Mz},"move-left":{inKeyframes:Nz,outKeyframes:Az},"move-right":{inKeyframes:zz,outKeyframes:jz}},_C=(e,t)=>{const{antCls:r}=e,a=`${r}-${t}`,{inKeyframes:i,outKeyframes:s}=Pz[t];return[ih(a,i,s,e.motionDurationMid),{[` + ${a}-enter, + ${a}-appear + `]:{opacity:0,animationTimingFunction:e.motionEaseOutCirc},[`${a}-leave`]:{animationTimingFunction:e.motionEaseInOutCirc}}]},yw=new rn("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),Sw=new rn("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),Cw=new rn("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),xw=new rn("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),Bz=new rn("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),Lz=new rn("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),Hz=new rn("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),Fz=new rn("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),Vz={"slide-up":{inKeyframes:yw,outKeyframes:Sw},"slide-down":{inKeyframes:Cw,outKeyframes:xw},"slide-left":{inKeyframes:Bz,outKeyframes:Lz},"slide-right":{inKeyframes:Hz,outKeyframes:Fz}},$f=(e,t)=>{const{antCls:r}=e,a=`${r}-${t}`,{inKeyframes:i,outKeyframes:s}=Vz[t];return[ih(a,i,s,e.motionDurationMid),{[` + ${a}-enter, + ${a}-appear + `]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:e.motionEaseOutQuint,"&-prepare":{transform:"scale(1)"}},[`${a}-leave`]:{animationTimingFunction:e.motionEaseInQuint}}]},Uz=new rn("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),qz=new rn("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),MC=new rn("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),NC=new rn("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),Gz=new rn("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),Wz=new rn("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),Kz=new rn("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),Xz=new rn("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),Yz=new rn("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),Qz=new rn("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),Zz=new rn("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),Jz=new rn("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),kz={zoom:{inKeyframes:Uz,outKeyframes:qz},"zoom-big":{inKeyframes:MC,outKeyframes:NC},"zoom-big-fast":{inKeyframes:MC,outKeyframes:NC},"zoom-left":{inKeyframes:Kz,outKeyframes:Xz},"zoom-right":{inKeyframes:Yz,outKeyframes:Qz},"zoom-up":{inKeyframes:Gz,outKeyframes:Wz},"zoom-down":{inKeyframes:Zz,outKeyframes:Jz}},e3=(e,t)=>{const{antCls:r}=e,a=`${r}-${t}`,{inKeyframes:i,outKeyframes:s}=kz[t];return[ih(a,i,s,t==="zoom-big-fast"?e.motionDurationFast:e.motionDurationMid),{[` + ${a}-enter, + ${a}-appear + `]:{transform:"scale(0)",opacity:0,animationTimingFunction:e.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${a}-leave`]:{animationTimingFunction:e.motionEaseInOutCirc}}]},t3=e=>e instanceof gp?e:new gp(e),n3=(e,t)=>{const{r,g:a,b:i,a:s}=e.toRgb(),c=new uc(e.toRgbString()).onBackground(t).toHsv();return s<=.5?c.v>.5:r*.299+a*.587+i*.114>192},Ew=e=>{const{paddingInline:t,onlyIconSize:r}=e;return un(e,{buttonPaddingHorizontal:t,buttonPaddingVertical:0,buttonIconOnlyFontSize:r})},ww=e=>{var t,r,a,i,s,c;const d=(t=e.contentFontSize)!==null&&t!==void 0?t:e.fontSize,m=(r=e.contentFontSizeSM)!==null&&r!==void 0?r:e.fontSize,v=(a=e.contentFontSizeLG)!==null&&a!==void 0?a:e.fontSizeLG,p=(i=e.contentLineHeight)!==null&&i!==void 0?i:sf(d),h=(s=e.contentLineHeightSM)!==null&&s!==void 0?s:sf(m),y=(c=e.contentLineHeightLG)!==null&&c!==void 0?c:sf(v),C=n3(new gp(e.colorBgSolid),"#fff")?"#000":"#fff",w=pi.reduce((x,S)=>Object.assign(Object.assign({},x),{[`${S}ShadowColor`]:`0 ${de(e.controlOutlineWidth)} 0 ${Ws(e[`${S}1`],e.colorBgContainer)}`}),{});return Object.assign(Object.assign({},w),{fontWeight:400,iconGap:e.marginXS,defaultShadow:`0 ${e.controlOutlineWidth}px 0 ${e.controlTmpOutline}`,primaryShadow:`0 ${e.controlOutlineWidth}px 0 ${e.controlOutline}`,dangerShadow:`0 ${e.controlOutlineWidth}px 0 ${e.colorErrorOutline}`,primaryColor:e.colorTextLightSolid,dangerColor:e.colorTextLightSolid,borderColorDisabled:e.colorBorder,defaultGhostColor:e.colorBgContainer,ghostBg:"transparent",defaultGhostBorderColor:e.colorBgContainer,paddingInline:e.paddingContentHorizontal-e.lineWidth,paddingInlineLG:e.paddingContentHorizontal-e.lineWidth,paddingInlineSM:8-e.lineWidth,onlyIconSize:"inherit",onlyIconSizeSM:"inherit",onlyIconSizeLG:"inherit",groupBorderColor:e.colorPrimaryHover,linkHoverBg:"transparent",textTextColor:e.colorText,textTextHoverColor:e.colorText,textTextActiveColor:e.colorText,textHoverBg:e.colorFillTertiary,defaultColor:e.colorText,defaultBg:e.colorBgContainer,defaultBorderColor:e.colorBorder,defaultBorderColorDisabled:e.colorBorder,defaultHoverBg:e.colorBgContainer,defaultHoverColor:e.colorPrimaryHover,defaultHoverBorderColor:e.colorPrimaryHover,defaultActiveBg:e.colorBgContainer,defaultActiveColor:e.colorPrimaryActive,defaultActiveBorderColor:e.colorPrimaryActive,solidTextColor:C,contentFontSize:d,contentFontSizeSM:m,contentFontSizeLG:v,contentLineHeight:p,contentLineHeightSM:h,contentLineHeightLG:y,paddingBlock:Math.max((e.controlHeight-d*p)/2-e.lineWidth,0),paddingBlockSM:Math.max((e.controlHeightSM-m*h)/2-e.lineWidth,0),paddingBlockLG:Math.max((e.controlHeightLG-v*y)/2-e.lineWidth,0)})},r3=e=>{const{componentCls:t,iconCls:r,fontWeight:a,opacityLoading:i,motionDurationSlow:s,motionEaseInOut:c,iconGap:d,calc:m}=e;return{[t]:{outline:"none",position:"relative",display:"inline-flex",gap:d,alignItems:"center",justifyContent:"center",fontWeight:a,whiteSpace:"nowrap",textAlign:"center",backgroundImage:"none",background:"transparent",border:`${de(e.lineWidth)} ${e.lineType} transparent`,cursor:"pointer",transition:`all ${e.motionDurationMid} ${e.motionEaseInOut}`,userSelect:"none",touchAction:"manipulation",color:e.colorText,"&:disabled > *":{pointerEvents:"none"},[`${t}-icon > svg`]:Wf(),"> a":{color:"currentColor"},"&:not(:disabled)":Ol(e),[`&${t}-two-chinese-chars::first-letter`]:{letterSpacing:"0.34em"},[`&${t}-two-chinese-chars > *:not(${r})`]:{marginInlineEnd:"-0.34em",letterSpacing:"0.34em"},[`&${t}-icon-only`]:{paddingInline:0,[`&${t}-compact-item`]:{flex:"none"}},[`&${t}-loading`]:{opacity:i,cursor:"default"},[`${t}-loading-icon`]:{transition:["width","opacity","margin"].map(v=>`${v} ${s} ${c}`).join(",")},[`&:not(${t}-icon-end)`]:{[`${t}-loading-icon-motion`]:{"&-appear-start, &-enter-start":{marginInlineEnd:m(d).mul(-1).equal()},"&-appear-active, &-enter-active":{marginInlineEnd:0},"&-leave-start":{marginInlineEnd:0},"&-leave-active":{marginInlineEnd:m(d).mul(-1).equal()}}},"&-icon-end":{flexDirection:"row-reverse",[`${t}-loading-icon-motion`]:{"&-appear-start, &-enter-start":{marginInlineStart:m(d).mul(-1).equal()},"&-appear-active, &-enter-active":{marginInlineStart:0},"&-leave-start":{marginInlineStart:0},"&-leave-active":{marginInlineStart:m(d).mul(-1).equal()}}}}}},Ow=(e,t,r)=>({[`&:not(:disabled):not(${e}-disabled)`]:{"&:hover":t,"&:active":r}}),a3=e=>({minWidth:e.controlHeight,paddingInline:0,borderRadius:"50%"}),o3=e=>({cursor:"not-allowed",borderColor:e.borderColorDisabled,color:e.colorTextDisabled,background:e.colorBgContainerDisabled,boxShadow:"none"}),kf=(e,t,r,a,i,s,c,d)=>({[`&${e}-background-ghost`]:Object.assign(Object.assign({color:r||void 0,background:t,borderColor:a||void 0,boxShadow:"none"},Ow(e,Object.assign({background:t},c),Object.assign({background:t},d))),{"&:disabled":{cursor:"not-allowed",color:i||void 0,borderColor:s||void 0}})}),i3=e=>({[`&:disabled, &${e.componentCls}-disabled`]:Object.assign({},o3(e))}),l3=e=>({[`&:disabled, &${e.componentCls}-disabled`]:{cursor:"not-allowed",color:e.colorTextDisabled}}),ed=(e,t,r,a)=>{const s=a&&["link","text"].includes(a)?l3:i3;return Object.assign(Object.assign({},s(e)),Ow(e.componentCls,t,r))},td=(e,t,r,a,i)=>({[`&${e.componentCls}-variant-solid`]:Object.assign({color:t,background:r},ed(e,a,i))}),nd=(e,t,r,a,i)=>({[`&${e.componentCls}-variant-outlined, &${e.componentCls}-variant-dashed`]:Object.assign({borderColor:t,background:r},ed(e,a,i))}),rd=e=>({[`&${e.componentCls}-variant-dashed`]:{borderStyle:"dashed"}}),ad=(e,t,r,a)=>({[`&${e.componentCls}-variant-filled`]:Object.assign({boxShadow:"none",background:t},ed(e,r,a))}),Pa=(e,t,r,a,i)=>({[`&${e.componentCls}-variant-${r}`]:Object.assign({color:t,boxShadow:"none"},ed(e,a,i,r))}),s3=e=>{const{componentCls:t}=e;return pi.reduce((r,a)=>{const i=e[`${a}6`],s=e[`${a}1`],c=e[`${a}5`],d=e[`${a}2`],m=e[`${a}3`],v=e[`${a}7`];return Object.assign(Object.assign({},r),{[`&${t}-color-${a}`]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:i,boxShadow:e[`${a}ShadowColor`]},td(e,e.colorTextLightSolid,i,{background:c},{background:v})),nd(e,i,e.colorBgContainer,{color:c,borderColor:c,background:e.colorBgContainer},{color:v,borderColor:v,background:e.colorBgContainer})),rd(e)),ad(e,s,{color:i,background:d},{color:i,background:m})),Pa(e,i,"link",{color:c},{color:v})),Pa(e,i,"text",{color:c,background:s},{color:v,background:m}))})},{})},c3=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.defaultColor,boxShadow:e.defaultShadow},td(e,e.solidTextColor,e.colorBgSolid,{color:e.solidTextColor,background:e.colorBgSolidHover},{color:e.solidTextColor,background:e.colorBgSolidActive})),rd(e)),ad(e,e.colorFillTertiary,{color:e.defaultColor,background:e.colorFillSecondary},{color:e.defaultColor,background:e.colorFill})),kf(e.componentCls,e.ghostBg,e.defaultGhostColor,e.defaultGhostBorderColor,e.colorTextDisabled,e.colorBorder)),Pa(e,e.textTextColor,"link",{color:e.colorLinkHover,background:e.linkHoverBg},{color:e.colorLinkActive})),u3=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorPrimary,boxShadow:e.primaryShadow},nd(e,e.colorPrimary,e.colorBgContainer,{color:e.colorPrimaryTextHover,borderColor:e.colorPrimaryHover,background:e.colorBgContainer},{color:e.colorPrimaryTextActive,borderColor:e.colorPrimaryActive,background:e.colorBgContainer})),rd(e)),ad(e,e.colorPrimaryBg,{color:e.colorPrimary,background:e.colorPrimaryBgHover},{color:e.colorPrimary,background:e.colorPrimaryBorder})),Pa(e,e.colorPrimaryText,"text",{color:e.colorPrimaryTextHover,background:e.colorPrimaryBg},{color:e.colorPrimaryTextActive,background:e.colorPrimaryBorder})),Pa(e,e.colorPrimaryText,"link",{color:e.colorPrimaryTextHover,background:e.linkHoverBg},{color:e.colorPrimaryTextActive})),kf(e.componentCls,e.ghostBg,e.colorPrimary,e.colorPrimary,e.colorTextDisabled,e.colorBorder,{color:e.colorPrimaryHover,borderColor:e.colorPrimaryHover},{color:e.colorPrimaryActive,borderColor:e.colorPrimaryActive})),f3=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorError,boxShadow:e.dangerShadow},td(e,e.dangerColor,e.colorError,{background:e.colorErrorHover},{background:e.colorErrorActive})),nd(e,e.colorError,e.colorBgContainer,{color:e.colorErrorHover,borderColor:e.colorErrorBorderHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),rd(e)),ad(e,e.colorErrorBg,{color:e.colorError,background:e.colorErrorBgFilledHover},{color:e.colorError,background:e.colorErrorBgActive})),Pa(e,e.colorError,"text",{color:e.colorErrorHover,background:e.colorErrorBg},{color:e.colorErrorHover,background:e.colorErrorBgActive})),Pa(e,e.colorError,"link",{color:e.colorErrorHover},{color:e.colorErrorActive})),kf(e.componentCls,e.ghostBg,e.colorError,e.colorError,e.colorTextDisabled,e.colorBorder,{color:e.colorErrorHover,borderColor:e.colorErrorHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),d3=e=>Object.assign(Object.assign({},Pa(e,e.colorLink,"link",{color:e.colorLinkHover},{color:e.colorLinkActive})),kf(e.componentCls,e.ghostBg,e.colorInfo,e.colorInfo,e.colorTextDisabled,e.colorBorder,{color:e.colorInfoHover,borderColor:e.colorInfoHover},{color:e.colorInfoActive,borderColor:e.colorInfoActive})),m3=e=>{const{componentCls:t}=e;return Object.assign({[`${t}-color-default`]:c3(e),[`${t}-color-primary`]:u3(e),[`${t}-color-dangerous`]:f3(e),[`${t}-color-link`]:d3(e)},s3(e))},v3=e=>Object.assign(Object.assign(Object.assign(Object.assign({},nd(e,e.defaultBorderColor,e.defaultBg,{color:e.defaultHoverColor,borderColor:e.defaultHoverBorderColor,background:e.defaultHoverBg},{color:e.defaultActiveColor,borderColor:e.defaultActiveBorderColor,background:e.defaultActiveBg})),Pa(e,e.textTextColor,"text",{color:e.textTextHoverColor,background:e.textHoverBg},{color:e.textTextActiveColor,background:e.colorBgTextActive})),td(e,e.primaryColor,e.colorPrimary,{background:e.colorPrimaryHover,color:e.primaryColor},{background:e.colorPrimaryActive,color:e.primaryColor})),Pa(e,e.colorLink,"link",{color:e.colorLinkHover,background:e.linkHoverBg},{color:e.colorLinkActive})),lh=(e,t="")=>{const{componentCls:r,controlHeight:a,fontSize:i,borderRadius:s,buttonPaddingHorizontal:c,iconCls:d,buttonPaddingVertical:m,buttonIconOnlyFontSize:v}=e;return[{[t]:{fontSize:i,height:a,padding:`${de(m)} ${de(c)}`,borderRadius:s,[`&${r}-icon-only`]:{width:a,[d]:{fontSize:v}}}},{[`${r}${r}-circle${t}`]:a3(e)},{[`${r}${r}-round${t}`]:{borderRadius:e.controlHeight,[`&:not(${r}-icon-only)`]:{paddingInline:e.buttonPaddingHorizontal}}}]},g3=e=>{const t=un(e,{fontSize:e.contentFontSize});return lh(t,e.componentCls)},p3=e=>{const t=un(e,{controlHeight:e.controlHeightSM,fontSize:e.contentFontSizeSM,padding:e.paddingXS,buttonPaddingHorizontal:e.paddingInlineSM,buttonPaddingVertical:0,borderRadius:e.borderRadiusSM,buttonIconOnlyFontSize:e.onlyIconSizeSM});return lh(t,`${e.componentCls}-sm`)},h3=e=>{const t=un(e,{controlHeight:e.controlHeightLG,fontSize:e.contentFontSizeLG,buttonPaddingHorizontal:e.paddingInlineLG,buttonPaddingVertical:0,borderRadius:e.borderRadiusLG,buttonIconOnlyFontSize:e.onlyIconSizeLG});return lh(t,`${e.componentCls}-lg`)},b3=e=>{const{componentCls:t}=e;return{[t]:{[`&${t}-block`]:{width:"100%"}}}},y3=_n("Button",e=>{const t=Ew(e);return[r3(t),g3(t),p3(t),h3(t),b3(t),m3(t),v3(t),bz(t)]},ww,{unitless:{fontWeight:!0,contentLineHeight:!0,contentLineHeightSM:!0,contentLineHeightLG:!0}});function S3(e,t,r,a){const{focusElCls:i,focus:s,borderElCls:c}=r,d=c?"> *":"",m=["hover",s?"focus":null,"active"].filter(Boolean).map(v=>`&:${v} ${d}`).join(",");return{[`&-item:not(${t}-last-item)`]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal()},[`&-item:not(${a}-status-success)`]:{zIndex:2},"&-item":Object.assign(Object.assign({[m]:{zIndex:3}},i?{[`&${i}`]:{zIndex:3}}:{}),{[`&[disabled] ${d}`]:{zIndex:0}})}}function C3(e,t,r){const{borderElCls:a}=r,i=a?`> ${a}`:"";return{[`&-item:not(${t}-first-item):not(${t}-last-item) ${i}`]:{borderRadius:0},[`&-item:not(${t}-last-item)${t}-first-item`]:{[`& ${i}, &${e}-sm ${i}, &${e}-lg ${i}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&-item:not(${t}-first-item)${t}-last-item`]:{[`& ${i}, &${e}-sm ${i}, &${e}-lg ${i}`]:{borderStartStartRadius:0,borderEndStartRadius:0}}}}function od(e,t={focus:!0}){const{componentCls:r}=e,{componentCls:a}=t,i=a||r,s=`${i}-compact`;return{[s]:Object.assign(Object.assign({},S3(e,s,t,i)),C3(i,s,t))}}function x3(e,t,r){return{[`&-item:not(${t}-last-item)`]:{marginBottom:e.calc(e.lineWidth).mul(-1).equal()},[`&-item:not(${r}-status-success)`]:{zIndex:2},"&-item":{"&:hover,&:focus,&:active":{zIndex:3},"&[disabled]":{zIndex:0}}}}function E3(e,t){return{[`&-item:not(${t}-first-item):not(${t}-last-item)`]:{borderRadius:0},[`&-item${t}-first-item:not(${t}-last-item)`]:{[`&, &${e}-sm, &${e}-lg`]:{borderEndEndRadius:0,borderEndStartRadius:0}},[`&-item${t}-last-item:not(${t}-first-item)`]:{[`&, &${e}-sm, &${e}-lg`]:{borderStartStartRadius:0,borderStartEndRadius:0}}}}function w3(e){const t=`${e.componentCls}-compact-vertical`;return{[t]:Object.assign(Object.assign({},x3(e,t,e.componentCls)),E3(e.componentCls,t))}}const O3=e=>{const{componentCls:t,colorPrimaryHover:r,lineWidth:a,calc:i}=e,s=i(a).mul(-1).equal(),c=d=>{const m=`${t}-compact${d?"-vertical":""}-item${t}-primary:not([disabled])`;return{[`${m} + ${m}::before`]:{position:"absolute",top:d?s:0,insetInlineStart:d?0:s,backgroundColor:r,content:'""',width:d?"100%":a,height:d?a:"100%"}}};return Object.assign(Object.assign({},c()),c(!0))},$3=Xf(["Button","compact"],e=>{const t=Ew(e);return[od(t),w3(t),O3(t)]},ww);var R3=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var r,a;const{loading:i=!1,prefixCls:s,color:c,variant:d,type:m,danger:v=!1,shape:p,size:h,styles:y,disabled:C,className:w,rootClassName:x,children:S,icon:E,iconPosition:O="start",ghost:R=!1,block:_=!1,htmlType:T="button",classNames:M,style:N={},autoInsertSpace:A,autoFocus:j}=e,I=R3(e,["loading","prefixCls","color","variant","type","danger","shape","size","styles","disabled","className","rootClassName","children","icon","iconPosition","ghost","block","htmlType","classNames","style","autoInsertSpace","autoFocus"]),L=m||"default",{button:B}=ue.useContext(It),V=p||(B==null?void 0:B.shape)||"default",[H,Q]=f.useMemo(()=>{if(c&&d)return[c,d];if(m||v){const gt=_3[L]||[];return v?["danger",gt[1]]:gt}return B!=null&&B.color&&(B!=null&&B.variant)?[B.color,B.variant]:["default","outlined"]},[c,d,m,v,B==null?void 0:B.color,B==null?void 0:B.variant,L]),F=H==="danger"?"dangerous":H,{getPrefixCls:q,direction:ee,autoInsertSpace:Z,className:D,style:U,classNames:G,styles:W}=Lr("button"),X=(r=A??Z)!==null&&r!==void 0?r:!0,Y=q("btn",s),[ie,ce,fe]=y3(Y),Te=f.useContext(Lo),he=C??Te,se=f.useContext(hw),ye=f.useMemo(()=>T3(i),[i]),[be,ge]=f.useState(ye.loading),[te,xe]=f.useState(!1),Ee=f.useRef(null),_e=Ci(t,Ee),je=f.Children.count(S)===1&&!E&&!Kv(Q),Ae=f.useRef(!0);ue.useEffect(()=>(Ae.current=!1,()=>{Ae.current=!0}),[]),nn(()=>{let gt=null;ye.delay>0?gt=setTimeout(()=>{gt=null,ge(!0)},ye.delay):ge(ye.loading);function Ht(){gt&&(clearTimeout(gt),gt=null)}return Ht},[ye.delay,ye.loading]),f.useEffect(()=>{if(!Ee.current||!X)return;const gt=Ee.current.textContent||"";je&&vp(gt)?te||xe(!0):te&&xe(!1)}),f.useEffect(()=>{j&&Ee.current&&Ee.current.focus()},[]);const He=ue.useCallback(gt=>{var Ht;if(be||he){gt.preventDefault();return}(Ht=e.onClick)===null||Ht===void 0||Ht.call(e,("href"in e,gt))},[e.onClick,be,he]),{compactSize:Ie,compactItemClassnames:Ce}=Il(Y,ee),Xe={large:"lg",small:"sm",middle:void 0},at=Ta(gt=>{var Ht,qt;return(qt=(Ht=h??Ie)!==null&&Ht!==void 0?Ht:se)!==null&&qt!==void 0?qt:gt}),mt=at&&(a=Xe[at])!==null&&a!==void 0?a:"",ke=be?"loading":E,We=or(I,["navigate"]),ct=ae(Y,ce,fe,{[`${Y}-${V}`]:V!=="default"&&V,[`${Y}-${L}`]:L,[`${Y}-dangerous`]:v,[`${Y}-color-${F}`]:F,[`${Y}-variant-${Q}`]:Q,[`${Y}-${mt}`]:mt,[`${Y}-icon-only`]:!S&&S!==0&&!!ke,[`${Y}-background-ghost`]:R&&!Kv(Q),[`${Y}-loading`]:be,[`${Y}-two-chinese-chars`]:te&&X&&!be,[`${Y}-block`]:_,[`${Y}-rtl`]:ee==="rtl",[`${Y}-icon-end`]:O==="end"},Ce,w,x,D),Qe=Object.assign(Object.assign({},U),N),ut=ae(M==null?void 0:M.icon,G.icon),Ye=Object.assign(Object.assign({},(y==null?void 0:y.icon)||{}),W.icon||{}),ze=gt=>ue.createElement(bw,{prefixCls:Y,className:ut,style:Ye},gt),Ke=()=>ue.createElement(hz,{existIcon:!!E,prefixCls:Y,loading:be,mount:Ae.current});let Ne;E&&!be?Ne=ze(E):i&&typeof i=="object"&&i.icon?Ne=ze(i.icon):Ne=Ke();const Ge=S||S===0?pz(S,je&&X):null;if(We.href!==void 0)return ie(ue.createElement("a",Object.assign({},We,{className:ae(ct,{[`${Y}-disabled`]:he}),href:he?void 0:We.href,style:Qe,onClick:He,ref:_e,tabIndex:he?-1:0,"aria-disabled":he}),Ne,Ge));let _t=ue.createElement("button",Object.assign({},I,{type:T,className:ct,style:Qe,onClick:He,disabled:he,ref:_e}),Ne,Ge,Ce&&ue.createElement($3,{prefixCls:Y}));return Kv(Q)||(_t=ue.createElement(gw,{component:"Button",disabled:be},_t)),ie(_t)}),sh=M3;sh.Group=vz;sh.__ANT_BUTTON=!0;var $w=f.createContext(null),AC=[];function N3(e,t){var r=f.useState(function(){if(!Rr())return null;var w=document.createElement("div");return w}),a=oe(r,1),i=a[0],s=f.useRef(!1),c=f.useContext($w),d=f.useState(AC),m=oe(d,2),v=m[0],p=m[1],h=c||(s.current?void 0:function(w){p(function(x){var S=[w].concat(Ue(x));return S})});function y(){i.parentElement||document.body.appendChild(i),s.current=!0}function C(){var w;(w=i.parentElement)===null||w===void 0||w.removeChild(i),s.current=!1}return nn(function(){return e?c?c(y):y():C(),C},[e]),nn(function(){v.length&&(v.forEach(function(w){return w()}),p(AC))},[v]),[i,h]}var Zv;function Rw(e){var t="rc-scrollbar-measure-".concat(Math.random().toString(36).substring(7)),r=document.createElement("div");r.id=t;var a=r.style;a.position="absolute",a.left="0",a.top="0",a.width="100px",a.height="100px",a.overflow="scroll";var i,s;if(e){var c=getComputedStyle(e);a.scrollbarColor=c.scrollbarColor,a.scrollbarWidth=c.scrollbarWidth;var d=getComputedStyle(e,"::-webkit-scrollbar"),m=parseInt(d.width,10),v=parseInt(d.height,10);try{var p=m?"width: ".concat(d.width,";"):"",h=v?"height: ".concat(d.height,";"):"";no(` +#`.concat(t,`::-webkit-scrollbar { +`).concat(p,` +`).concat(h,` +}`),t)}catch(w){console.error(w),i=m,s=v}}document.body.appendChild(r);var y=e&&i&&!isNaN(i)?i:r.offsetWidth-r.clientWidth,C=e&&s&&!isNaN(s)?s:r.offsetHeight-r.clientHeight;return document.body.removeChild(r),nc(t),{width:y,height:C}}function f9(e){return typeof document>"u"?0:(Zv===void 0&&(Zv=Rw()),Zv.width)}function A3(e){return typeof document>"u"||!e||!(e instanceof Element)?{width:0,height:0}:Rw(e)}function z3(){return document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth}var j3="rc-util-locker-".concat(Date.now()),zC=0;function D3(e){var t=!!e,r=f.useState(function(){return zC+=1,"".concat(j3,"_").concat(zC)}),a=oe(r,1),i=a[0];nn(function(){if(t){var s=A3(document.body).width,c=z3();no(` +html body { + overflow-y: hidden; + `.concat(c?"width: calc(100% - ".concat(s,"px);"):"",` +}`),i)}else nc(i);return function(){nc(i)}},[t,i])}var I3=!1;function P3(e){return I3}var jC=function(t){return t===!1?!1:!Rr()||!t?null:typeof t=="string"?document.querySelector(t):typeof t=="function"?t():t},Tw=f.forwardRef(function(e,t){var r=e.open,a=e.autoLock,i=e.getContainer;e.debug;var s=e.autoDestroy,c=s===void 0?!0:s,d=e.children,m=f.useState(r),v=oe(m,2),p=v[0],h=v[1],y=p||r;f.useEffect(function(){(c||r)&&h(r)},[r,c]);var C=f.useState(function(){return jC(i)}),w=oe(C,2),x=w[0],S=w[1];f.useEffect(function(){var L=jC(i);S(L??null)});var E=N3(y&&!x),O=oe(E,2),R=O[0],_=O[1],T=x??R;D3(a&&r&&Rr()&&(T===R||T===document.body));var M=null;if(d&&Ho(d)&&t){var N=d;M=N.ref}var A=Ci(M,t);if(!y||!Rr()||x===void 0)return null;var j=T===!1||P3(),I=d;return t&&(I=f.cloneElement(d,{ref:A})),f.createElement($w.Provider,{value:_},j?I:Bo.createPortal(I,T))});function B3(){var e=J({},Lf);return e.useId}var DC=0,IC=B3();const _w=IC?(function(t){var r=IC();return t||r}):(function(t){var r=f.useState("ssr-id"),a=oe(r,2),i=a[0],s=a[1];return f.useEffect(function(){var c=DC;DC+=1,s("rc_unique_".concat(c))},[]),t||i});var ci="RC_FORM_INTERNAL_HOOKS",wn=function(){xr(!1,"Can not find FormContext. Please make sure you wrap Field under Form.")},$l=f.createContext({getFieldValue:wn,getFieldsValue:wn,getFieldError:wn,getFieldWarning:wn,getFieldsError:wn,isFieldsTouched:wn,isFieldTouched:wn,isFieldValidating:wn,isFieldsValidating:wn,resetFields:wn,setFields:wn,setFieldValue:wn,setFieldsValue:wn,validateFields:wn,submit:wn,getInternalHooks:function(){return wn(),{dispatch:wn,initEntityValue:wn,registerField:wn,useSubscribe:wn,setInitialValues:wn,destroyForm:wn,setCallbacks:wn,registerWatch:wn,getFields:wn,setValidateMessages:wn,setPreserve:wn,getInitialValue:wn}}}),Rf=f.createContext(null);function pp(e){return e==null?[]:Array.isArray(e)?e:[e]}function L3(e){return e&&!!e._init}function hp(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",tel:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var bp=hp();function H3(e){try{return Function.toString.call(e).indexOf("[native code]")!==-1}catch{return typeof e=="function"}}function F3(e,t,r){if(Ff())return Reflect.construct.apply(null,arguments);var a=[null];a.push.apply(a,t);var i=new(e.bind.apply(e,a));return r&&ec(i,r.prototype),i}function yp(e){var t=typeof Map=="function"?new Map:void 0;return yp=function(a){if(a===null||!H3(a))return a;if(typeof a!="function")throw new TypeError("Super expression must either be null or a function");if(t!==void 0){if(t.has(a))return t.get(a);t.set(a,i)}function i(){return F3(a,arguments,vi(this).constructor)}return i.prototype=Object.create(a.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),ec(i,a)},yp(e)}var V3=/%[sdj%]/g,U3=function(){};function Sp(e){if(!e||!e.length)return null;var t={};return e.forEach(function(r){var a=r.field;t[a]=t[a]||[],t[a].push(r)}),t}function Jr(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),a=1;a=s)return d;switch(d){case"%s":return String(r[i++]);case"%d":return Number(r[i++]);case"%j":try{return JSON.stringify(r[i++])}catch{return"[Circular]"}break;default:return d}});return c}return e}function q3(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"||e==="tel"}function ar(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||q3(t)&&typeof e=="string"&&!e)}function G3(e,t,r){var a=[],i=0,s=e.length;function c(d){a.push.apply(a,Ue(d||[])),i++,i===s&&r(a)}e.forEach(function(d){t(d,c)})}function PC(e,t,r){var a=0,i=e.length;function s(c){if(c&&c.length){r(c);return}var d=a;a=a+1,dt.max?i.push(Jr(s.messages[h].max,t.fullField,t.max)):d&&m&&(pt.max)&&i.push(Jr(s.messages[h].range,t.fullField,t.min,t.max))},Mw=function(t,r,a,i,s,c){t.required&&(!a.hasOwnProperty(t.field)||ar(r,c||t.type))&&i.push(Jr(s.messages.required,t.fullField))},Gu;const k3=(function(){if(Gu)return Gu;var e="[a-fA-F\\d:]",t=function(M){return M&&M.includeBoundaries?"(?:(?<=\\s|^)(?=".concat(e,")|(?<=").concat(e,")(?=\\s|$))"):""},r="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",a="[a-fA-F\\d]{1,4}",i=["(?:".concat(a,":){7}(?:").concat(a,"|:)"),"(?:".concat(a,":){6}(?:").concat(r,"|:").concat(a,"|:)"),"(?:".concat(a,":){5}(?::").concat(r,"|(?::").concat(a,"){1,2}|:)"),"(?:".concat(a,":){4}(?:(?::").concat(a,"){0,1}:").concat(r,"|(?::").concat(a,"){1,3}|:)"),"(?:".concat(a,":){3}(?:(?::").concat(a,"){0,2}:").concat(r,"|(?::").concat(a,"){1,4}|:)"),"(?:".concat(a,":){2}(?:(?::").concat(a,"){0,3}:").concat(r,"|(?::").concat(a,"){1,5}|:)"),"(?:".concat(a,":){1}(?:(?::").concat(a,"){0,4}:").concat(r,"|(?::").concat(a,"){1,6}|:)"),"(?::(?:(?::".concat(a,"){0,5}:").concat(r,"|(?::").concat(a,"){1,7}|:))")],s="(?:%[0-9a-zA-Z]{1,})?",c="(?:".concat(i.join("|"),")").concat(s),d=new RegExp("(?:^".concat(r,"$)|(?:^").concat(c,"$)")),m=new RegExp("^".concat(r,"$")),v=new RegExp("^".concat(c,"$")),p=function(M){return M&&M.exact?d:new RegExp("(?:".concat(t(M)).concat(r).concat(t(M),")|(?:").concat(t(M)).concat(c).concat(t(M),")"),"g")};p.v4=function(T){return T&&T.exact?m:new RegExp("".concat(t(T)).concat(r).concat(t(T)),"g")},p.v6=function(T){return T&&T.exact?v:new RegExp("".concat(t(T)).concat(c).concat(t(T)),"g")};var h="(?:(?:[a-z]+:)?//)",y="(?:\\S+(?::\\S*)?@)?",C=p.v4().source,w=p.v6().source,x="(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)",S="(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*",E="(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))",O="(?::\\d{2,5})?",R='(?:[/?#][^\\s"]*)?',_="(?:".concat(h,"|www\\.)").concat(y,"(?:localhost|").concat(C,"|").concat(w,"|").concat(x).concat(S).concat(E,")").concat(O).concat(R);return Gu=new RegExp("(?:^".concat(_,"$)"),"i"),Gu});var Jv={email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,tel:/^(\+[0-9]{1,3}[-\s\u2011]?)?(\([0-9]{1,4}\)[-\s\u2011]?)?([0-9]+[-\s\u2011]?)*[0-9]+$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},Ks={integer:function(t){return Ks.number(t)&&parseInt(t,10)===t},float:function(t){return Ks.number(t)&&!Ks.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return pt(t)==="object"&&!Ks.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(Jv.email)},tel:function(t){return typeof t=="string"&&t.length<=32&&!!t.match(Jv.tel)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(k3())},hex:function(t){return typeof t=="string"&&!!t.match(Jv.hex)}},e4=function(t,r,a,i,s){if(t.required&&r===void 0){Mw(t,r,a,i,s);return}var c=["integer","float","array","regexp","object","method","email","tel","number","date","url","hex"],d=t.type;c.indexOf(d)>-1?Ks[d](r)||i.push(Jr(s.messages.types[d],t.fullField,t.type)):d&&pt(r)!==t.type&&i.push(Jr(s.messages.types[d],t.fullField,t.type))},t4=function(t,r,a,i,s){(/^\s+$/.test(r)||r==="")&&i.push(Jr(s.messages.whitespace,t.fullField))};const Zt={required:Mw,whitespace:t4,type:e4,range:J3,enum:Q3,pattern:Z3};var n4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s)}a(c)},r4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(r==null&&!t.required)return a();Zt.required(t,r,i,c,s,"array"),r!=null&&(Zt.type(t,r,i,c,s),Zt.range(t,r,i,c,s))}a(c)},a4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),r!==void 0&&Zt.type(t,r,i,c,s)}a(c)},o4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r,"date")&&!t.required)return a();if(Zt.required(t,r,i,c,s),!ar(r,"date")){var m;r instanceof Date?m=r:m=new Date(r),Zt.type(t,m,i,c,s),m&&Zt.range(t,m.getTime(),i,c,s)}}a(c)},i4="enum",l4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),r!==void 0&&Zt[i4](t,r,i,c,s)}a(c)},s4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),r!==void 0&&(Zt.type(t,r,i,c,s),Zt.range(t,r,i,c,s))}a(c)},c4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),r!==void 0&&(Zt.type(t,r,i,c,s),Zt.range(t,r,i,c,s))}a(c)},u4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),r!==void 0&&Zt.type(t,r,i,c,s)}a(c)},f4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(r===""&&(r=void 0),ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),r!==void 0&&(Zt.type(t,r,i,c,s),Zt.range(t,r,i,c,s))}a(c)},d4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),r!==void 0&&Zt.type(t,r,i,c,s)}a(c)},m4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r,"string")&&!t.required)return a();Zt.required(t,r,i,c,s),ar(r,"string")||Zt.pattern(t,r,i,c,s)}a(c)},v4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r)&&!t.required)return a();Zt.required(t,r,i,c,s),ar(r)||Zt.type(t,r,i,c,s)}a(c)},g4=function(t,r,a,i,s){var c=[],d=Array.isArray(r)?"array":pt(r);Zt.required(t,r,i,c,s,d),a(c)},p4=function(t,r,a,i,s){var c=[],d=t.required||!t.required&&i.hasOwnProperty(t.field);if(d){if(ar(r,"string")&&!t.required)return a();Zt.required(t,r,i,c,s,"string"),ar(r,"string")||(Zt.type(t,r,i,c,s),Zt.range(t,r,i,c,s),Zt.pattern(t,r,i,c,s),t.whitespace===!0&&Zt.whitespace(t,r,i,c,s))}a(c)},Wu=function(t,r,a,i,s){var c=t.type,d=[],m=t.required||!t.required&&i.hasOwnProperty(t.field);if(m){if(ar(r,c)&&!t.required)return a();Zt.required(t,r,i,d,s,c),ar(r,c)||Zt.type(t,r,i,d,s)}a(d)};const Js={string:p4,method:u4,number:f4,boolean:a4,regexp:v4,integer:c4,float:s4,array:r4,object:d4,enum:l4,pattern:m4,date:o4,url:Wu,hex:Wu,email:Wu,tel:Wu,required:g4,any:n4};var Sc=(function(){function e(t){Kn(this,e),K(this,"rules",null),K(this,"_messages",bp),this.define(t)}return Xn(e,[{key:"define",value:function(r){var a=this;if(!r)throw new Error("Cannot configure a schema with no rules");if(pt(r)!=="object"||Array.isArray(r))throw new Error("Rules must be an object");this.rules={},Object.keys(r).forEach(function(i){var s=r[i];a.rules[i]=Array.isArray(s)?s:[s]})}},{key:"messages",value:function(r){return r&&(this._messages=HC(hp(),r)),this._messages}},{key:"validate",value:function(r){var a=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(){},c=r,d=i,m=s;if(typeof d=="function"&&(m=d,d={}),!this.rules||Object.keys(this.rules).length===0)return m&&m(null,c),Promise.resolve(c);function v(w){var x=[],S={};function E(R){if(Array.isArray(R)){var _;x=(_=x).concat.apply(_,Ue(R))}else x.push(R)}for(var O=0;O0&&arguments[0]!==void 0?arguments[0]:[],A=Array.isArray(N)?N:[N];!d.suppressWarning&&A.length&&e.warning("async-validator:",A),A.length&&S.message!==void 0&&S.message!==null&&(A=[].concat(S.message));var j=A.map(LC(S,c));if(d.first&&j.length)return C[S.field]=1,x(j);if(!E)x(j);else{if(S.required&&!w.value)return S.message!==void 0?j=[].concat(S.message).map(LC(S,c)):d.error&&(j=[d.error(S,Jr(d.messages.required,S.field))]),x(j);var I={};S.defaultField&&Object.keys(w.value).map(function(V){I[V]=S.defaultField}),I=J(J({},I),w.rule.fields);var L={};Object.keys(I).forEach(function(V){var H=I[V],Q=Array.isArray(H)?H:[H];L[V]=Q.map(O.bind(null,V))});var B=new e(L);B.messages(d.messages),w.rule.options&&(w.rule.options.messages=d.messages,w.rule.options.error=d.error),B.validate(w.value,w.rule.options||d,function(V){var H=[];j&&j.length&&H.push.apply(H,Ue(j)),V&&V.length&&H.push.apply(H,Ue(V)),x(H.length?H:null)})}}var _;if(S.asyncValidator)_=S.asyncValidator(S,w.value,R,w.source,d);else if(S.validator){try{_=S.validator(S,w.value,R,w.source,d)}catch(N){var T,M;(T=(M=console).error)===null||T===void 0||T.call(M,N),d.suppressValidatorError||setTimeout(function(){throw N},0),R(N.message)}_===!0?R():_===!1?R(typeof S.message=="function"?S.message(S.fullField||S.field):S.message||"".concat(S.fullField||S.field," fails")):_ instanceof Array?R(_):_ instanceof Error&&R(_.message)}_&&_.then&&_.then(function(){return R()},function(N){return R(N)})},function(w){v(w)},c)}},{key:"getType",value:function(r){if(r.type===void 0&&r.pattern instanceof RegExp&&(r.type="pattern"),typeof r.validator!="function"&&r.type&&!Js.hasOwnProperty(r.type))throw new Error(Jr("Unknown rule type %s",r.type));return r.type||"string"}},{key:"getValidationMethod",value:function(r){if(typeof r.validator=="function")return r.validator;var a=Object.keys(r),i=a.indexOf("message");return i!==-1&&a.splice(i,1),a.length===1&&a[0]==="required"?Js.required:Js[this.getType(r)]||void 0}}]),e})();K(Sc,"register",function(t,r){if(typeof r!="function")throw new Error("Cannot register a validator by type, validator is not a function");Js[t]=r});K(Sc,"warning",U3);K(Sc,"messages",bp);K(Sc,"validators",Js);var Qr="'${name}' is not a valid ${type}",Nw={default:"Validation error on field '${name}'",required:"'${name}' is required",enum:"'${name}' must be one of [${enum}]",whitespace:"'${name}' cannot be empty",date:{format:"'${name}' is invalid for format date",parse:"'${name}' could not be parsed as date",invalid:"'${name}' is invalid date"},types:{string:Qr,method:Qr,array:Qr,object:Qr,number:Qr,date:Qr,boolean:Qr,integer:Qr,float:Qr,regexp:Qr,email:Qr,url:Qr,hex:Qr},string:{len:"'${name}' must be exactly ${len} characters",min:"'${name}' must be at least ${min} characters",max:"'${name}' cannot be longer than ${max} characters",range:"'${name}' must be between ${min} and ${max} characters"},number:{len:"'${name}' must equal ${len}",min:"'${name}' cannot be less than ${min}",max:"'${name}' cannot be greater than ${max}",range:"'${name}' must be between ${min} and ${max}"},array:{len:"'${name}' must be exactly ${len} in length",min:"'${name}' cannot be less than ${min} in length",max:"'${name}' cannot be greater than ${max} in length",range:"'${name}' must be between ${min} and ${max} in length"},pattern:{mismatch:"'${name}' does not match pattern ${pattern}"}},FC=Sc;function h4(e,t){return e.replace(/\\?\$\{\w+\}/g,function(r){if(r.startsWith("\\"))return r.slice(1);var a=r.slice(2,-1);return t[a]})}var VC="CODE_LOGIC_ERROR";function Cp(e,t,r,a,i){return xp.apply(this,arguments)}function xp(){return xp=Ei(wr().mark(function e(t,r,a,i,s){var c,d,m,v,p,h,y,C,w;return wr().wrap(function(S){for(;;)switch(S.prev=S.next){case 0:return c=J({},a),delete c.ruleIndex,FC.warning=function(){},c.validator&&(d=c.validator,c.validator=function(){try{return d.apply(void 0,arguments)}catch(E){return console.error(E),Promise.reject(VC)}}),m=null,c&&c.type==="array"&&c.defaultField&&(m=c.defaultField,delete c.defaultField),v=new FC(K({},t,[c])),p=ml(Nw,i.validateMessages),v.messages(p),h=[],S.prev=10,S.next=13,Promise.resolve(v.validate(K({},t,r),J({},i)));case 13:S.next=18;break;case 15:S.prev=15,S.t0=S.catch(10),S.t0.errors&&(h=S.t0.errors.map(function(E,O){var R=E.message,_=R===VC?p.default:R;return f.isValidElement(_)?f.cloneElement(_,{key:"error_".concat(O)}):_}));case 18:if(!(!h.length&&m&&Array.isArray(r)&&r.length>0)){S.next=23;break}return S.next=21,Promise.all(r.map(function(E,O){return Cp("".concat(t,".").concat(O),E,m,i,s)}));case 21:return y=S.sent,S.abrupt("return",y.reduce(function(E,O){return[].concat(Ue(E),Ue(O))},[]));case 23:return C=J(J({},a),{},{name:t,enum:(a.enum||[]).join(", ")},s),w=h.map(function(E){return typeof E=="string"?h4(E,C):E}),S.abrupt("return",w);case 26:case"end":return S.stop()}},e,null,[[10,15]])})),xp.apply(this,arguments)}function b4(e,t,r,a,i,s){var c=e.join("."),d=r.map(function(p,h){var y=p.validator,C=J(J({},p),{},{ruleIndex:h});return y&&(C.validator=function(w,x,S){var E=!1,O=function(){for(var T=arguments.length,M=new Array(T),N=0;N2&&arguments[2]!==void 0?arguments[2]:!1;return e&&e.some(function(a){return Aw(t,a,r)})}function Aw(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return!e||!t||!r&&e.length!==t.length?!1:t.every(function(a,i){return e[i]===a})}function C4(e,t){if(e===t)return!0;if(!e&&t||e&&!t||!e||!t||pt(e)!=="object"||pt(t)!=="object")return!1;var r=Object.keys(e),a=Object.keys(t),i=new Set([].concat(r,a));return Ue(i).every(function(s){var c=e[s],d=t[s];return typeof c=="function"&&typeof d=="function"?!0:c===d})}function x4(e){var t=arguments.length<=1?void 0:arguments[1];return t&&t.target&&pt(t.target)==="object"&&e in t.target?t.target[e]:t}function qC(e,t,r){var a=e.length;if(t<0||t>=a||r<0||r>=a)return e;var i=e[t],s=t-r;return s>0?[].concat(Ue(e.slice(0,r)),[i],Ue(e.slice(r,t)),Ue(e.slice(t+1,a))):s<0?[].concat(Ue(e.slice(0,t)),Ue(e.slice(t+1,r+1)),[i],Ue(e.slice(r+1,a))):e}var E4=["name"],ma=[];function kv(e,t,r,a,i,s){return typeof e=="function"?e(t,r,"source"in s?{source:s.source}:{}):a!==i}var ch=(function(e){Ba(r,e);var t=oo(r);function r(a){var i;if(Kn(this,r),i=t.call(this,a),K(Ut(i),"state",{resetCount:0}),K(Ut(i),"cancelRegisterFunc",null),K(Ut(i),"mounted",!1),K(Ut(i),"touched",!1),K(Ut(i),"dirty",!1),K(Ut(i),"validatePromise",void 0),K(Ut(i),"prevValidating",void 0),K(Ut(i),"errors",ma),K(Ut(i),"warnings",ma),K(Ut(i),"cancelRegister",function(){var m=i.props,v=m.preserve,p=m.isListField,h=m.name;i.cancelRegisterFunc&&i.cancelRegisterFunc(p,v,qn(h)),i.cancelRegisterFunc=null}),K(Ut(i),"getNamePath",function(){var m=i.props,v=m.name,p=m.fieldContext,h=p.prefixName,y=h===void 0?[]:h;return v!==void 0?[].concat(Ue(y),Ue(v)):[]}),K(Ut(i),"getRules",function(){var m=i.props,v=m.rules,p=v===void 0?[]:v,h=m.fieldContext;return p.map(function(y){return typeof y=="function"?y(h):y})}),K(Ut(i),"refresh",function(){i.mounted&&i.setState(function(m){var v=m.resetCount;return{resetCount:v+1}})}),K(Ut(i),"metaCache",null),K(Ut(i),"triggerMetaEvent",function(m){var v=i.props.onMetaChange;if(v){var p=J(J({},i.getMeta()),{},{destroy:m});rc(i.metaCache,p)||v(p),i.metaCache=p}else i.metaCache=null}),K(Ut(i),"onStoreChange",function(m,v,p){var h=i.props,y=h.shouldUpdate,C=h.dependencies,w=C===void 0?[]:C,x=h.onReset,S=p.store,E=i.getNamePath(),O=i.getValue(m),R=i.getValue(S),_=v&&bl(v,E);switch(p.type==="valueUpdate"&&p.source==="external"&&!rc(O,R)&&(i.touched=!0,i.dirty=!0,i.validatePromise=null,i.errors=ma,i.warnings=ma,i.triggerMetaEvent()),p.type){case"reset":if(!v||_){i.touched=!1,i.dirty=!1,i.validatePromise=void 0,i.errors=ma,i.warnings=ma,i.triggerMetaEvent(),x==null||x(),i.refresh();return}break;case"remove":{if(y&&kv(y,m,S,O,R,p)){i.reRender();return}break}case"setField":{var T=p.data;if(_){"touched"in T&&(i.touched=T.touched),"validating"in T&&!("originRCField"in T)&&(i.validatePromise=T.validating?Promise.resolve([]):null),"errors"in T&&(i.errors=T.errors||ma),"warnings"in T&&(i.warnings=T.warnings||ma),i.dirty=!0,i.triggerMetaEvent(),i.reRender();return}else if("value"in T&&bl(v,E,!0)){i.reRender();return}if(y&&!E.length&&kv(y,m,S,O,R,p)){i.reRender();return}break}case"dependenciesUpdate":{var M=w.map(qn);if(M.some(function(N){return bl(p.relatedFields,N)})){i.reRender();return}break}default:if(_||(!w.length||E.length||y)&&kv(y,m,S,O,R,p)){i.reRender();return}break}y===!0&&i.reRender()}),K(Ut(i),"validateRules",function(m){var v=i.getNamePath(),p=i.getValue(),h=m||{},y=h.triggerName,C=h.validateOnly,w=C===void 0?!1:C,x=Promise.resolve().then(Ei(wr().mark(function S(){var E,O,R,_,T,M,N;return wr().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:if(i.mounted){j.next=2;break}return j.abrupt("return",[]);case 2:if(E=i.props,O=E.validateFirst,R=O===void 0?!1:O,_=E.messageVariables,T=E.validateDebounce,M=i.getRules(),y&&(M=M.filter(function(I){return I}).filter(function(I){var L=I.validateTrigger;if(!L)return!0;var B=pp(L);return B.includes(y)})),!(T&&y)){j.next=10;break}return j.next=8,new Promise(function(I){setTimeout(I,T)});case 8:if(i.validatePromise===x){j.next=10;break}return j.abrupt("return",[]);case 10:return N=b4(v,p,M,m,R,_),N.catch(function(I){return I}).then(function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ma;if(i.validatePromise===x){var L;i.validatePromise=null;var B=[],V=[];(L=I.forEach)===null||L===void 0||L.call(I,function(H){var Q=H.rule.warningOnly,z=H.errors,F=z===void 0?ma:z;Q?V.push.apply(V,Ue(F)):B.push.apply(B,Ue(F))}),i.errors=B,i.warnings=V,i.triggerMetaEvent(),i.reRender()}}),j.abrupt("return",N);case 13:case"end":return j.stop()}},S)})));return w||(i.validatePromise=x,i.dirty=!0,i.errors=ma,i.warnings=ma,i.triggerMetaEvent(),i.reRender()),x}),K(Ut(i),"isFieldValidating",function(){return!!i.validatePromise}),K(Ut(i),"isFieldTouched",function(){return i.touched}),K(Ut(i),"isFieldDirty",function(){if(i.dirty||i.props.initialValue!==void 0)return!0;var m=i.props.fieldContext,v=m.getInternalHooks(ci),p=v.getInitialValue;return p(i.getNamePath())!==void 0}),K(Ut(i),"getErrors",function(){return i.errors}),K(Ut(i),"getWarnings",function(){return i.warnings}),K(Ut(i),"isListField",function(){return i.props.isListField}),K(Ut(i),"isList",function(){return i.props.isList}),K(Ut(i),"isPreserve",function(){return i.props.preserve}),K(Ut(i),"getMeta",function(){i.prevValidating=i.isFieldValidating();var m={touched:i.isFieldTouched(),validating:i.prevValidating,errors:i.errors,warnings:i.warnings,name:i.getNamePath(),validated:i.validatePromise===null};return m}),K(Ut(i),"getOnlyChild",function(m){if(typeof m=="function"){var v=i.getMeta();return J(J({},i.getOnlyChild(m(i.getControlled(),v,i.props.fieldContext))),{},{isFunction:!0})}var p=kr(m);return p.length!==1||!f.isValidElement(p[0])?{child:p,isFunction:!1}:{child:p[0],isFunction:!1}}),K(Ut(i),"getValue",function(m){var v=i.props.fieldContext.getFieldsValue,p=i.getNamePath();return Da(m||v(!0),p)}),K(Ut(i),"getControlled",function(){var m=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},v=i.props,p=v.name,h=v.trigger,y=v.validateTrigger,C=v.getValueFromEvent,w=v.normalize,x=v.valuePropName,S=v.getValueProps,E=v.fieldContext,O=y!==void 0?y:E.validateTrigger,R=i.getNamePath(),_=E.getInternalHooks,T=E.getFieldsValue,M=_(ci),N=M.dispatch,A=i.getValue(),j=S||function(H){return K({},x,H)},I=m[h],L=p!==void 0?j(A):{},B=J(J({},m),L);B[h]=function(){i.touched=!0,i.dirty=!0,i.triggerMetaEvent();for(var H,Q=arguments.length,z=new Array(Q),F=0;F=0&&I<=L.length?(p.keys=[].concat(Ue(p.keys.slice(0,I)),[p.id],Ue(p.keys.slice(I))),R([].concat(Ue(L.slice(0,I)),[j],Ue(L.slice(I))))):(p.keys=[].concat(Ue(p.keys),[p.id]),R([].concat(Ue(L),[j]))),p.id+=1},remove:function(j){var I=T(),L=new Set(Array.isArray(j)?j:[j]);L.size<=0||(p.keys=p.keys.filter(function(B,V){return!L.has(V)}),R(I.filter(function(B,V){return!L.has(V)})))},move:function(j,I){if(j!==I){var L=T();j<0||j>=L.length||I<0||I>=L.length||(p.keys=qC(p.keys,j,I),R(qC(L,j,I)))}}},N=O||[];return Array.isArray(N)||(N=[]),a(N.map(function(A,j){var I=p.keys[j];return I===void 0&&(p.keys[j]=p.id,I=p.keys[j],p.id+=1),{name:j,key:I,isListField:!0}}),M,S)})))}function O4(e){var t=!1,r=e.length,a=[];return e.length?new Promise(function(i,s){e.forEach(function(c,d){c.catch(function(m){return t=!0,m}).then(function(m){r-=1,a[d]=m,!(r>0)&&(t&&s(a),i(a))})})}):Promise.resolve([])}var jw="__@field_split__";function eg(e){return e.map(function(t){return"".concat(pt(t),":").concat(t)}).join(jw)}var rl=(function(){function e(){Kn(this,e),K(this,"kvs",new Map)}return Xn(e,[{key:"set",value:function(r,a){this.kvs.set(eg(r),a)}},{key:"get",value:function(r){return this.kvs.get(eg(r))}},{key:"update",value:function(r,a){var i=this.get(r),s=a(i);s?this.set(r,s):this.delete(r)}},{key:"delete",value:function(r){this.kvs.delete(eg(r))}},{key:"map",value:function(r){return Ue(this.kvs.entries()).map(function(a){var i=oe(a,2),s=i[0],c=i[1],d=s.split(jw);return r({key:d.map(function(m){var v=m.match(/^([^:]*):(.*)$/),p=oe(v,3),h=p[1],y=p[2];return h==="number"?Number(y):y}),value:c})})}},{key:"toJSON",value:function(){var r={};return this.map(function(a){var i=a.key,s=a.value;return r[i.join(".")]=s,null}),r}}]),e})(),$4=["name"],R4=Xn(function e(t){var r=this;Kn(this,e),K(this,"formHooked",!1),K(this,"forceRootUpdate",void 0),K(this,"subscribable",!0),K(this,"store",{}),K(this,"fieldEntities",[]),K(this,"initialValues",{}),K(this,"callbacks",{}),K(this,"validateMessages",null),K(this,"preserve",null),K(this,"lastValidatePromise",null),K(this,"getForm",function(){return{getFieldValue:r.getFieldValue,getFieldsValue:r.getFieldsValue,getFieldError:r.getFieldError,getFieldWarning:r.getFieldWarning,getFieldsError:r.getFieldsError,isFieldsTouched:r.isFieldsTouched,isFieldTouched:r.isFieldTouched,isFieldValidating:r.isFieldValidating,isFieldsValidating:r.isFieldsValidating,resetFields:r.resetFields,setFields:r.setFields,setFieldValue:r.setFieldValue,setFieldsValue:r.setFieldsValue,validateFields:r.validateFields,submit:r.submit,_init:!0,getInternalHooks:r.getInternalHooks}}),K(this,"getInternalHooks",function(a){return a===ci?(r.formHooked=!0,{dispatch:r.dispatch,initEntityValue:r.initEntityValue,registerField:r.registerField,useSubscribe:r.useSubscribe,setInitialValues:r.setInitialValues,destroyForm:r.destroyForm,setCallbacks:r.setCallbacks,setValidateMessages:r.setValidateMessages,getFields:r.getFields,setPreserve:r.setPreserve,getInitialValue:r.getInitialValue,registerWatch:r.registerWatch}):(xr(!1,"`getInternalHooks` is internal usage. Should not call directly."),null)}),K(this,"useSubscribe",function(a){r.subscribable=a}),K(this,"prevWithoutPreserves",null),K(this,"setInitialValues",function(a,i){if(r.initialValues=a||{},i){var s,c=ml(a,r.store);(s=r.prevWithoutPreserves)===null||s===void 0||s.map(function(d){var m=d.key;c=Ea(c,m,Da(a,m))}),r.prevWithoutPreserves=null,r.updateStore(c)}}),K(this,"destroyForm",function(a){if(a)r.updateStore({});else{var i=new rl;r.getFieldEntities(!0).forEach(function(s){r.isMergedPreserve(s.isPreserve())||i.set(s.getNamePath(),!0)}),r.prevWithoutPreserves=i}}),K(this,"getInitialValue",function(a){var i=Da(r.initialValues,a);return a.length?ml(i):i}),K(this,"setCallbacks",function(a){r.callbacks=a}),K(this,"setValidateMessages",function(a){r.validateMessages=a}),K(this,"setPreserve",function(a){r.preserve=a}),K(this,"watchList",[]),K(this,"registerWatch",function(a){return r.watchList.push(a),function(){r.watchList=r.watchList.filter(function(i){return i!==a})}}),K(this,"notifyWatch",function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(r.watchList.length){var i=r.getFieldsValue(),s=r.getFieldsValue(!0);r.watchList.forEach(function(c){c(i,s,a)})}}),K(this,"timeoutId",null),K(this,"warningUnhooked",function(){}),K(this,"updateStore",function(a){r.store=a}),K(this,"getFieldEntities",function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;return a?r.fieldEntities.filter(function(i){return i.getNamePath().length}):r.fieldEntities}),K(this,"getFieldsMap",function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=new rl;return r.getFieldEntities(a).forEach(function(s){var c=s.getNamePath();i.set(c,s)}),i}),K(this,"getFieldEntitiesForNamePathList",function(a){if(!a)return r.getFieldEntities(!0);var i=r.getFieldsMap(!0);return a.map(function(s){var c=qn(s);return i.get(c)||{INVALIDATE_NAME_PATH:qn(s)}})}),K(this,"getFieldsValue",function(a,i){r.warningUnhooked();var s,c,d;if(a===!0||Array.isArray(a)?(s=a,c=i):a&&pt(a)==="object"&&(d=a.strict,c=a.filter),s===!0&&!c)return r.store;var m=r.getFieldEntitiesForNamePathList(Array.isArray(s)?s:null),v=[];return m.forEach(function(p){var h,y,C="INVALIDATE_NAME_PATH"in p?p.INVALIDATE_NAME_PATH:p.getNamePath();if(d){var w,x;if((w=(x=p).isList)!==null&&w!==void 0&&w.call(x))return}else if(!s&&(h=(y=p).isListField)!==null&&h!==void 0&&h.call(y))return;if(!c)v.push(C);else{var S="getMeta"in p?p.getMeta():null;c(S)&&v.push(C)}}),UC(r.store,v.map(qn))}),K(this,"getFieldValue",function(a){r.warningUnhooked();var i=qn(a);return Da(r.store,i)}),K(this,"getFieldsError",function(a){r.warningUnhooked();var i=r.getFieldEntitiesForNamePathList(a);return i.map(function(s,c){return s&&!("INVALIDATE_NAME_PATH"in s)?{name:s.getNamePath(),errors:s.getErrors(),warnings:s.getWarnings()}:{name:qn(a[c]),errors:[],warnings:[]}})}),K(this,"getFieldError",function(a){r.warningUnhooked();var i=qn(a),s=r.getFieldsError([i])[0];return s.errors}),K(this,"getFieldWarning",function(a){r.warningUnhooked();var i=qn(a),s=r.getFieldsError([i])[0];return s.warnings}),K(this,"isFieldsTouched",function(){r.warningUnhooked();for(var a=arguments.length,i=new Array(a),s=0;s0&&arguments[0]!==void 0?arguments[0]:{},i=new rl,s=r.getFieldEntities(!0);s.forEach(function(m){var v=m.props.initialValue,p=m.getNamePath();if(v!==void 0){var h=i.get(p)||new Set;h.add({entity:m,value:v}),i.set(p,h)}});var c=function(v){v.forEach(function(p){var h=p.props.initialValue;if(h!==void 0){var y=p.getNamePath(),C=r.getInitialValue(y);if(C!==void 0)xr(!1,"Form already set 'initialValues' with path '".concat(y.join("."),"'. Field can not overwrite it."));else{var w=i.get(y);if(w&&w.size>1)xr(!1,"Multiple Field with path '".concat(y.join("."),"' set 'initialValue'. Can not decide which one to pick."));else if(w){var x=r.getFieldValue(y),S=p.isListField();!S&&(!a.skipExist||x===void 0)&&r.updateStore(Ea(r.store,y,Ue(w)[0].value))}}}})},d;a.entities?d=a.entities:a.namePathList?(d=[],a.namePathList.forEach(function(m){var v=i.get(m);if(v){var p;(p=d).push.apply(p,Ue(Ue(v).map(function(h){return h.entity})))}})):d=s,c(d)}),K(this,"resetFields",function(a){r.warningUnhooked();var i=r.store;if(!a){r.updateStore(ml(r.initialValues)),r.resetWithFieldInitialValue(),r.notifyObservers(i,null,{type:"reset"}),r.notifyWatch();return}var s=a.map(qn);s.forEach(function(c){var d=r.getInitialValue(c);r.updateStore(Ea(r.store,c,d))}),r.resetWithFieldInitialValue({namePathList:s}),r.notifyObservers(i,s,{type:"reset"}),r.notifyWatch(s)}),K(this,"setFields",function(a){r.warningUnhooked();var i=r.store,s=[];a.forEach(function(c){var d=c.name,m=zt(c,$4),v=qn(d);s.push(v),"value"in m&&r.updateStore(Ea(r.store,v,m.value)),r.notifyObservers(i,[v],{type:"setField",data:c})}),r.notifyWatch(s)}),K(this,"getFields",function(){var a=r.getFieldEntities(!0),i=a.map(function(s){var c=s.getNamePath(),d=s.getMeta(),m=J(J({},d),{},{name:c,value:r.getFieldValue(c)});return Object.defineProperty(m,"originRCField",{value:!0}),m});return i}),K(this,"initEntityValue",function(a){var i=a.props.initialValue;if(i!==void 0){var s=a.getNamePath(),c=Da(r.store,s);c===void 0&&r.updateStore(Ea(r.store,s,i))}}),K(this,"isMergedPreserve",function(a){var i=a!==void 0?a:r.preserve;return i??!0}),K(this,"registerField",function(a){r.fieldEntities.push(a);var i=a.getNamePath();if(r.notifyWatch([i]),a.props.initialValue!==void 0){var s=r.store;r.resetWithFieldInitialValue({entities:[a],skipExist:!0}),r.notifyObservers(s,[a.getNamePath()],{type:"valueUpdate",source:"internal"})}return function(c,d){var m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];if(r.fieldEntities=r.fieldEntities.filter(function(h){return h!==a}),!r.isMergedPreserve(d)&&(!c||m.length>1)){var v=c?void 0:r.getInitialValue(i);if(i.length&&r.getFieldValue(i)!==v&&r.fieldEntities.every(function(h){return!Aw(h.getNamePath(),i)})){var p=r.store;r.updateStore(Ea(p,i,v,!0)),r.notifyObservers(p,[i],{type:"remove"}),r.triggerDependenciesUpdate(p,i)}}r.notifyWatch([i])}}),K(this,"dispatch",function(a){switch(a.type){case"updateValue":{var i=a.namePath,s=a.value;r.updateValue(i,s);break}case"validateField":{var c=a.namePath,d=a.triggerName;r.validateFields([c],{triggerName:d});break}}}),K(this,"notifyObservers",function(a,i,s){if(r.subscribable){var c=J(J({},s),{},{store:r.getFieldsValue(!0)});r.getFieldEntities().forEach(function(d){var m=d.onStoreChange;m(a,i,c)})}else r.forceRootUpdate()}),K(this,"triggerDependenciesUpdate",function(a,i){var s=r.getDependencyChildrenFields(i);return s.length&&r.validateFields(s),r.notifyObservers(a,s,{type:"dependenciesUpdate",relatedFields:[i].concat(Ue(s))}),s}),K(this,"updateValue",function(a,i){var s=qn(a),c=r.store;r.updateStore(Ea(r.store,s,i)),r.notifyObservers(c,[s],{type:"valueUpdate",source:"internal"}),r.notifyWatch([s]);var d=r.triggerDependenciesUpdate(c,s),m=r.callbacks.onValuesChange;if(m){var v=UC(r.store,[s]);m(v,r.getFieldsValue())}r.triggerOnFieldsChange([s].concat(Ue(d)))}),K(this,"setFieldsValue",function(a){r.warningUnhooked();var i=r.store;if(a){var s=ml(r.store,a);r.updateStore(s)}r.notifyObservers(i,null,{type:"valueUpdate",source:"external"}),r.notifyWatch()}),K(this,"setFieldValue",function(a,i){r.setFields([{name:a,value:i,errors:[],warnings:[]}])}),K(this,"getDependencyChildrenFields",function(a){var i=new Set,s=[],c=new rl;r.getFieldEntities().forEach(function(m){var v=m.props.dependencies;(v||[]).forEach(function(p){var h=qn(p);c.update(h,function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new Set;return y.add(m),y})})});var d=function m(v){var p=c.get(v)||new Set;p.forEach(function(h){if(!i.has(h)){i.add(h);var y=h.getNamePath();h.isFieldDirty()&&y.length&&(s.push(y),m(y))}})};return d(a),s}),K(this,"triggerOnFieldsChange",function(a,i){var s=r.callbacks.onFieldsChange;if(s){var c=r.getFields();if(i){var d=new rl;i.forEach(function(v){var p=v.name,h=v.errors;d.set(p,h)}),c.forEach(function(v){v.errors=d.get(v.name)||v.errors})}var m=c.filter(function(v){var p=v.name;return bl(a,p)});m.length&&s(m,c)}}),K(this,"validateFields",function(a,i){r.warningUnhooked();var s,c;Array.isArray(a)||typeof a=="string"||typeof i=="string"?(s=a,c=i):c=a;var d=!!s,m=d?s.map(qn):[],v=[],p=String(Date.now()),h=new Set,y=c||{},C=y.recursive,w=y.dirty;r.getFieldEntities(!0).forEach(function(O){if(d||m.push(O.getNamePath()),!(!O.props.rules||!O.props.rules.length)&&!(w&&!O.isFieldDirty())){var R=O.getNamePath();if(h.add(R.join(p)),!d||bl(m,R,C)){var _=O.validateRules(J({validateMessages:J(J({},Nw),r.validateMessages)},c));v.push(_.then(function(){return{name:R,errors:[],warnings:[]}}).catch(function(T){var M,N=[],A=[];return(M=T.forEach)===null||M===void 0||M.call(T,function(j){var I=j.rule.warningOnly,L=j.errors;I?A.push.apply(A,Ue(L)):N.push.apply(N,Ue(L))}),N.length?Promise.reject({name:R,errors:N,warnings:A}):{name:R,errors:N,warnings:A}}))}}});var x=O4(v);r.lastValidatePromise=x,x.catch(function(O){return O}).then(function(O){var R=O.map(function(_){var T=_.name;return T});r.notifyObservers(r.store,R,{type:"validateFinish"}),r.triggerOnFieldsChange(R,O)});var S=x.then(function(){return r.lastValidatePromise===x?Promise.resolve(r.getFieldsValue(m)):Promise.reject([])}).catch(function(O){var R=O.filter(function(_){return _&&_.errors.length});return Promise.reject({values:r.getFieldsValue(m),errorFields:R,outOfDate:r.lastValidatePromise!==x})});S.catch(function(O){return O});var E=m.filter(function(O){return h.has(O.join(p))});return r.triggerOnFieldsChange(E),S}),K(this,"submit",function(){r.warningUnhooked(),r.validateFields().then(function(a){var i=r.callbacks.onFinish;if(i)try{i(a)}catch(s){console.error(s)}}).catch(function(a){var i=r.callbacks.onFinishFailed;i&&i(a)})}),this.forceRootUpdate=t});function Dw(e){var t=f.useRef(),r=f.useState({}),a=oe(r,2),i=a[1];if(!t.current)if(e)t.current=e;else{var s=function(){i({})},c=new R4(s);t.current=c.getForm()}return[t.current]}var Op=f.createContext({triggerFormChange:function(){},triggerFormFinish:function(){},registerForm:function(){},unregisterForm:function(){}}),Iw=function(t){var r=t.validateMessages,a=t.onFormChange,i=t.onFormFinish,s=t.children,c=f.useContext(Op),d=f.useRef({});return f.createElement(Op.Provider,{value:J(J({},c),{},{validateMessages:J(J({},c.validateMessages),r),triggerFormChange:function(v,p){a&&a(v,{changedFields:p,forms:d.current}),c.triggerFormChange(v,p)},triggerFormFinish:function(v,p){i&&i(v,{values:p,forms:d.current}),c.triggerFormFinish(v,p)},registerForm:function(v,p){v&&(d.current=J(J({},d.current),{},K({},v,p))),c.registerForm(v,p)},unregisterForm:function(v){var p=J({},d.current);delete p[v],d.current=p,c.unregisterForm(v)}})},s)},T4=["name","initialValues","fields","form","preserve","children","component","validateMessages","validateTrigger","onValuesChange","onFieldsChange","onFinish","onFinishFailed","clearOnDestroy"],_4=function(t,r){var a=t.name,i=t.initialValues,s=t.fields,c=t.form,d=t.preserve,m=t.children,v=t.component,p=v===void 0?"form":v,h=t.validateMessages,y=t.validateTrigger,C=y===void 0?"onChange":y,w=t.onValuesChange,x=t.onFieldsChange,S=t.onFinish,E=t.onFinishFailed,O=t.clearOnDestroy,R=zt(t,T4),_=f.useRef(null),T=f.useContext(Op),M=Dw(c),N=oe(M,1),A=N[0],j=A.getInternalHooks(ci),I=j.useSubscribe,L=j.setInitialValues,B=j.setCallbacks,V=j.setValidateMessages,H=j.setPreserve,Q=j.destroyForm;f.useImperativeHandle(r,function(){return J(J({},A),{},{nativeElement:_.current})}),f.useEffect(function(){return T.registerForm(a,A),function(){T.unregisterForm(a)}},[T,A,a]),V(J(J({},T.validateMessages),h)),B({onValuesChange:w,onFieldsChange:function(W){if(T.triggerFormChange(a,W),x){for(var X=arguments.length,Y=new Array(X>1?X-1:0),ie=1;ie{}}),m9=f.createContext(null),v9=e=>{const t=or(e,["prefixCls"]);return f.createElement(Iw,Object.assign({},t))},g9=f.createContext({prefixCls:""}),ao=f.createContext({}),A4=({children:e,status:t,override:r})=>{const a=f.useContext(ao),i=f.useMemo(()=>{const s=Object.assign({},a);return r&&delete s.isFormItemInput,t&&(delete s.status,delete s.hasFeedback,delete s.feedbackIcon),s},[t,r,a]);return f.createElement(ao.Provider,{value:i},e)},z4=f.createContext(void 0),Tf=e=>{const{space:t,form:r,children:a}=e;if(a==null)return null;let i=a;return r&&(i=ue.createElement(A4,{override:!0,status:!0},i)),t&&(i=ue.createElement(uz,null,i)),i};var Pw=function(t){if(Rr()&&window.document.documentElement){var r=Array.isArray(t)?t:[t],a=window.document.documentElement;return r.some(function(i){return i in a.style})}return!1},j4=function(t,r){if(!Pw(t))return!1;var a=document.createElement("div"),i=a.style[t];return a.style[t]=r,a.style[t]!==i};function WC(e,t){return!Array.isArray(e)&&t!==void 0?j4(e,t):Pw(e)}const id=e=>{const{prefixCls:t,className:r,style:a,size:i,shape:s}=e,c=ae({[`${t}-lg`]:i==="large",[`${t}-sm`]:i==="small"}),d=ae({[`${t}-circle`]:s==="circle",[`${t}-square`]:s==="square",[`${t}-round`]:s==="round"}),m=f.useMemo(()=>typeof i=="number"?{width:i,height:i,lineHeight:`${i}px`}:{},[i]);return f.createElement("span",{className:ae(t,c,d,r),style:Object.assign(Object.assign({},m),a)})},D4=new rn("ant-skeleton-loading",{"0%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),ld=e=>({height:e,lineHeight:de(e)}),yl=e=>Object.assign({width:e},ld(e)),I4=e=>({background:e.skeletonLoadingBackground,backgroundSize:"400% 100%",animationName:D4,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite"}),tg=(e,t)=>Object.assign({width:t(e).mul(5).equal(),minWidth:t(e).mul(5).equal()},ld(e)),P4=e=>{const{skeletonAvatarCls:t,gradientFromColor:r,controlHeight:a,controlHeightLG:i,controlHeightSM:s}=e;return{[t]:Object.assign({display:"inline-block",verticalAlign:"top",background:r},yl(a)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:Object.assign({},yl(i)),[`${t}${t}-sm`]:Object.assign({},yl(s))}},B4=e=>{const{controlHeight:t,borderRadiusSM:r,skeletonInputCls:a,controlHeightLG:i,controlHeightSM:s,gradientFromColor:c,calc:d}=e;return{[a]:Object.assign({display:"inline-block",verticalAlign:"top",background:c,borderRadius:r},tg(t,d)),[`${a}-lg`]:Object.assign({},tg(i,d)),[`${a}-sm`]:Object.assign({},tg(s,d))}},KC=e=>Object.assign({width:e},ld(e)),L4=e=>{const{skeletonImageCls:t,imageSizeBase:r,gradientFromColor:a,borderRadiusSM:i,calc:s}=e;return{[t]:Object.assign(Object.assign({display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"middle",background:a,borderRadius:i},KC(s(r).mul(2).equal())),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:Object.assign(Object.assign({},KC(r)),{maxWidth:s(r).mul(4).equal(),maxHeight:s(r).mul(4).equal()}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},ng=(e,t,r)=>{const{skeletonButtonCls:a}=e;return{[`${r}${a}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${r}${a}-round`]:{borderRadius:t}}},rg=(e,t)=>Object.assign({width:t(e).mul(2).equal(),minWidth:t(e).mul(2).equal()},ld(e)),H4=e=>{const{borderRadiusSM:t,skeletonButtonCls:r,controlHeight:a,controlHeightLG:i,controlHeightSM:s,gradientFromColor:c,calc:d}=e;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[r]:Object.assign({display:"inline-block",verticalAlign:"top",background:c,borderRadius:t,width:d(a).mul(2).equal(),minWidth:d(a).mul(2).equal()},rg(a,d))},ng(e,a,r)),{[`${r}-lg`]:Object.assign({},rg(i,d))}),ng(e,i,`${r}-lg`)),{[`${r}-sm`]:Object.assign({},rg(s,d))}),ng(e,s,`${r}-sm`))},F4=e=>{const{componentCls:t,skeletonAvatarCls:r,skeletonTitleCls:a,skeletonParagraphCls:i,skeletonButtonCls:s,skeletonInputCls:c,skeletonImageCls:d,controlHeight:m,controlHeightLG:v,controlHeightSM:p,gradientFromColor:h,padding:y,marginSM:C,borderRadius:w,titleHeight:x,blockRadius:S,paragraphLiHeight:E,controlHeightXS:O,paragraphMarginTop:R}=e;return{[t]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:y,verticalAlign:"top",[r]:Object.assign({display:"inline-block",verticalAlign:"top",background:h},yl(m)),[`${r}-circle`]:{borderRadius:"50%"},[`${r}-lg`]:Object.assign({},yl(v)),[`${r}-sm`]:Object.assign({},yl(p))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[a]:{width:"100%",height:x,background:h,borderRadius:S,[`+ ${i}`]:{marginBlockStart:p}},[i]:{padding:0,"> li":{width:"100%",height:E,listStyle:"none",background:h,borderRadius:S,"+ li":{marginBlockStart:O}}},[`${i}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${a}, ${i} > li`]:{borderRadius:w}}},[`${t}-with-avatar ${t}-content`]:{[a]:{marginBlockStart:C,[`+ ${i}`]:{marginBlockStart:R}}},[`${t}${t}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:"inline-block",width:"auto"},H4(e)),P4(e)),B4(e)),L4(e)),[`${t}${t}-block`]:{width:"100%",[s]:{width:"100%"},[c]:{width:"100%"}},[`${t}${t}-active`]:{[` + ${a}, + ${i} > li, + ${r}, + ${s}, + ${c}, + ${d} + `]:Object.assign({},I4(e))}}},V4=e=>{const{colorFillContent:t,colorFill:r}=e,a=t,i=r;return{color:a,colorGradientEnd:i,gradientFromColor:a,gradientToColor:i,titleHeight:e.controlHeight/2,blockRadius:e.borderRadiusSM,paragraphMarginTop:e.marginLG+e.marginXXS,paragraphLiHeight:e.controlHeight/2}},Pl=_n("Skeleton",e=>{const{componentCls:t,calc:r}=e,a=un(e,{skeletonAvatarCls:`${t}-avatar`,skeletonTitleCls:`${t}-title`,skeletonParagraphCls:`${t}-paragraph`,skeletonButtonCls:`${t}-button`,skeletonInputCls:`${t}-input`,skeletonImageCls:`${t}-image`,imageSizeBase:r(e.controlHeight).mul(1.5).equal(),borderRadius:100,skeletonLoadingBackground:`linear-gradient(90deg, ${e.gradientFromColor} 25%, ${e.gradientToColor} 37%, ${e.gradientFromColor} 63%)`,skeletonLoadingMotionDuration:"1.4s"});return F4(a)},V4,{deprecatedTokens:[["color","gradientFromColor"],["colorGradientEnd","gradientToColor"]]}),U4=e=>{const{prefixCls:t,className:r,rootClassName:a,active:i,shape:s="circle",size:c="default"}=e,{getPrefixCls:d}=f.useContext(It),m=d("skeleton",t),[v,p,h]=Pl(m),y=or(e,["prefixCls","className"]),C=ae(m,`${m}-element`,{[`${m}-active`]:i},r,a,p,h);return v(f.createElement("div",{className:C},f.createElement(id,Object.assign({prefixCls:`${m}-avatar`,shape:s,size:c},y))))},q4=e=>{const{prefixCls:t,className:r,rootClassName:a,active:i,block:s=!1,size:c="default"}=e,{getPrefixCls:d}=f.useContext(It),m=d("skeleton",t),[v,p,h]=Pl(m),y=or(e,["prefixCls"]),C=ae(m,`${m}-element`,{[`${m}-active`]:i,[`${m}-block`]:s},r,a,p,h);return v(f.createElement("div",{className:C},f.createElement(id,Object.assign({prefixCls:`${m}-button`,size:c},y))))},G4="M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z",W4=e=>{const{prefixCls:t,className:r,rootClassName:a,style:i,active:s}=e,{getPrefixCls:c}=f.useContext(It),d=c("skeleton",t),[m,v,p]=Pl(d),h=ae(d,`${d}-element`,{[`${d}-active`]:s},r,a,v,p);return m(f.createElement("div",{className:h},f.createElement("div",{className:ae(`${d}-image`,r),style:i},f.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:`${d}-image-svg`},f.createElement("title",null,"Image placeholder"),f.createElement("path",{d:G4,className:`${d}-image-path`})))))},K4=e=>{const{prefixCls:t,className:r,rootClassName:a,active:i,block:s,size:c="default"}=e,{getPrefixCls:d}=f.useContext(It),m=d("skeleton",t),[v,p,h]=Pl(m),y=or(e,["prefixCls"]),C=ae(m,`${m}-element`,{[`${m}-active`]:i,[`${m}-block`]:s},r,a,p,h);return v(f.createElement("div",{className:C},f.createElement(id,Object.assign({prefixCls:`${m}-input`,size:c},y))))},X4=e=>{const{prefixCls:t,className:r,rootClassName:a,style:i,active:s,children:c}=e,{getPrefixCls:d}=f.useContext(It),m=d("skeleton",t),[v,p,h]=Pl(m),y=ae(m,`${m}-element`,{[`${m}-active`]:s},p,r,a,h);return v(f.createElement("div",{className:y},f.createElement("div",{className:ae(`${m}-image`,r),style:i},c)))},Y4=(e,t)=>{const{width:r,rows:a=2}=t;if(Array.isArray(r))return r[e];if(a-1===e)return r},Q4=e=>{const{prefixCls:t,className:r,style:a,rows:i=0}=e,s=Array.from({length:i}).map((c,d)=>f.createElement("li",{key:d,style:{width:Y4(d,e)}}));return f.createElement("ul",{className:ae(t,r),style:a},s)},Z4=({prefixCls:e,className:t,width:r,style:a})=>f.createElement("h3",{className:ae(e,t),style:Object.assign({width:r},a)});function ag(e){return e&&typeof e=="object"?e:{}}function J4(e,t){return e&&!t?{size:"large",shape:"square"}:{size:"large",shape:"circle"}}function k4(e,t){return!e&&t?{width:"38%"}:e&&t?{width:"50%"}:{}}function ej(e,t){const r={};return(!e||!t)&&(r.width="61%"),!e&&t?r.rows=3:r.rows=2,r}const Bl=e=>{const{prefixCls:t,loading:r,className:a,rootClassName:i,style:s,children:c,avatar:d=!1,title:m=!0,paragraph:v=!0,active:p,round:h}=e,{getPrefixCls:y,direction:C,className:w,style:x}=Lr("skeleton"),S=y("skeleton",t),[E,O,R]=Pl(S);if(r||!("loading"in e)){const _=!!d,T=!!m,M=!!v;let N;if(_){const I=Object.assign(Object.assign({prefixCls:`${S}-avatar`},J4(T,M)),ag(d));N=f.createElement("div",{className:`${S}-header`},f.createElement(id,Object.assign({},I)))}let A;if(T||M){let I;if(T){const B=Object.assign(Object.assign({prefixCls:`${S}-title`},k4(_,M)),ag(m));I=f.createElement(Z4,Object.assign({},B))}let L;if(M){const B=Object.assign(Object.assign({prefixCls:`${S}-paragraph`},ej(_,T)),ag(v));L=f.createElement(Q4,Object.assign({},B))}A=f.createElement("div",{className:`${S}-content`},I,L)}const j=ae(S,{[`${S}-with-avatar`]:_,[`${S}-active`]:p,[`${S}-rtl`]:C==="rtl",[`${S}-round`]:h},w,a,i,O,R);return E(f.createElement("div",{className:j,style:Object.assign(Object.assign({},x),s)},N,A))}return c??null};Bl.Button=q4;Bl.Avatar=U4;Bl.Input=K4;Bl.Image=W4;Bl.Node=X4;const tj=e=>{const{componentCls:t}=e;return{[t]:{display:"flex",flexFlow:"row wrap",minWidth:0,"&::before, &::after":{display:"flex"},"&-no-wrap":{flexWrap:"nowrap"},"&-start":{justifyContent:"flex-start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"flex-end"},"&-space-between":{justifyContent:"space-between"},"&-space-around":{justifyContent:"space-around"},"&-space-evenly":{justifyContent:"space-evenly"},"&-top":{alignItems:"flex-start"},"&-middle":{alignItems:"center"},"&-bottom":{alignItems:"flex-end"}}}},nj=e=>{const{componentCls:t}=e;return{[t]:{position:"relative",maxWidth:"100%",minHeight:1}}},rj=(e,t)=>{const{prefixCls:r,componentCls:a,gridColumns:i}=e,s={};for(let c=i;c>=0;c--)c===0?(s[`${a}${t}-${c}`]={display:"none"},s[`${a}-push-${c}`]={insetInlineStart:"auto"},s[`${a}-pull-${c}`]={insetInlineEnd:"auto"},s[`${a}${t}-push-${c}`]={insetInlineStart:"auto"},s[`${a}${t}-pull-${c}`]={insetInlineEnd:"auto"},s[`${a}${t}-offset-${c}`]={marginInlineStart:0},s[`${a}${t}-order-${c}`]={order:0}):(s[`${a}${t}-${c}`]=[{"--ant-display":"block",display:"block"},{display:"var(--ant-display)",flex:`0 0 ${c/i*100}%`,maxWidth:`${c/i*100}%`}],s[`${a}${t}-push-${c}`]={insetInlineStart:`${c/i*100}%`},s[`${a}${t}-pull-${c}`]={insetInlineEnd:`${c/i*100}%`},s[`${a}${t}-offset-${c}`]={marginInlineStart:`${c/i*100}%`},s[`${a}${t}-order-${c}`]={order:c});return s[`${a}${t}-flex`]={flex:`var(--${r}${t}-flex)`},s},$p=(e,t)=>rj(e,t),aj=(e,t,r)=>({[`@media (min-width: ${de(t)})`]:Object.assign({},$p(e,r))}),oj=()=>({}),ij=()=>({}),lj=_n("Grid",tj,oj),sj=e=>({xs:e.screenXSMin,sm:e.screenSMMin,md:e.screenMDMin,lg:e.screenLGMin,xl:e.screenXLMin,xxl:e.screenXXLMin}),cj=_n("Grid",e=>{const t=un(e,{gridColumns:24}),r=sj(t);return delete r.xs,[nj(t),$p(t,""),$p(t,"-xs"),Object.keys(r).map(a=>aj(t,r[a],`-${a}`)).reduce((a,i)=>Object.assign(Object.assign({},a),i),{})]},ij),uj=ue.createContext({});function fj(e){return t=>f.createElement(xi,{theme:{token:{motion:!1,zIndexPopupBase:0}}},f.createElement(e,Object.assign({},t)))}const dj=(e,t,r,a,i)=>fj(c=>{const{prefixCls:d,style:m}=c,v=f.useRef(null),[p,h]=f.useState(0),[y,C]=f.useState(0),[w,x]=ur(!1,{value:c.open}),{getPrefixCls:S}=f.useContext(It),E=S(a||"select",d);f.useEffect(()=>{if(x(!0),typeof ResizeObserver<"u"){const _=new ResizeObserver(M=>{const N=M[0].target;h(N.offsetHeight+8),C(N.offsetWidth)}),T=setInterval(()=>{var M;const N=i?`.${i(E)}`:`.${E}-dropdown`,A=(M=v.current)===null||M===void 0?void 0:M.querySelector(N);A&&(clearInterval(T),_.observe(A))},10);return()=>{clearInterval(T),_.disconnect()}}},[E]);let O=Object.assign(Object.assign({},c),{style:Object.assign(Object.assign({},m),{margin:0}),open:w,visible:w,getPopupContainer:()=>v.current});t&&Object.assign(O,{[t]:{overflow:{adjustX:!1,adjustY:!1}}});const R={paddingBottom:p,position:"relative",minWidth:y};return f.createElement("div",{ref:v,style:R},f.createElement(e,Object.assign({},O)))}),uh=(function(){if(typeof navigator>"u"||typeof window>"u")return!1;var e=navigator.userAgent||navigator.vendor||window.opera;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e==null?void 0:e.substr(0,4))});var sd=function(t){var r=t.className,a=t.customizeIcon,i=t.customizeIconProps,s=t.children,c=t.onMouseDown,d=t.onClick,m=typeof a=="function"?a(i):a;return f.createElement("span",{className:r,onMouseDown:function(p){p.preventDefault(),c==null||c(p)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:d,"aria-hidden":!0},m!==void 0?m:f.createElement("span",{className:ae(r.split(/\s+/).map(function(v){return"".concat(v,"-icon")}))},s))},mj=function(t,r,a,i,s){var c=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!1,d=arguments.length>6?arguments[6]:void 0,m=arguments.length>7?arguments[7]:void 0,v=ue.useMemo(function(){if(pt(i)==="object")return i.clearIcon;if(s)return s},[i,s]),p=ue.useMemo(function(){return!!(!c&&i&&(a.length||d)&&!(m==="combobox"&&d===""))},[i,c,a.length,d,m]);return{allowClear:p,clearIcon:ue.createElement(sd,{className:"".concat(t,"-clear"),onMouseDown:r,customizeIcon:v},"×")}},Bw=f.createContext(null);function vj(){return f.useContext(Bw)}function gj(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:10,t=f.useState(!1),r=oe(t,2),a=r[0],i=r[1],s=f.useRef(null),c=function(){window.clearTimeout(s.current)};f.useEffect(function(){return c},[]);var d=function(v,p){c(),s.current=window.setTimeout(function(){i(v),p&&p()},e)};return[a,d,c]}function Lw(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:250,t=f.useRef(null),r=f.useRef(null);f.useEffect(function(){return function(){window.clearTimeout(r.current)}},[]);function a(i){(i||t.current===null)&&(t.current=i),window.clearTimeout(r.current),r.current=window.setTimeout(function(){t.current=null},e)}return[function(){return t.current},a]}function pj(e,t,r,a){var i=f.useRef(null);i.current={open:t,triggerOpen:r,customizedTrigger:a},f.useEffect(function(){function s(c){var d;if(!((d=i.current)!==null&&d!==void 0&&d.customizedTrigger)){var m=c.target;m.shadowRoot&&c.composed&&(m=c.composedPath()[0]||m),i.current.open&&e().filter(function(v){return v}).every(function(v){return!v.contains(m)&&v!==m})&&i.current.triggerOpen(!1)}}return window.addEventListener("mousedown",s),function(){return window.removeEventListener("mousedown",s)}},[])}function hj(e){return e&&![rt.ESC,rt.SHIFT,rt.BACKSPACE,rt.TAB,rt.WIN_KEY,rt.ALT,rt.META,rt.WIN_KEY_RIGHT,rt.CTRL,rt.SEMICOLON,rt.EQUALS,rt.CAPS_LOCK,rt.CONTEXT_MENU,rt.F1,rt.F2,rt.F3,rt.F4,rt.F5,rt.F6,rt.F7,rt.F8,rt.F9,rt.F10,rt.F11,rt.F12].includes(e)}var bj=["prefixCls","invalidate","item","renderItem","responsive","responsiveDisabled","registerSize","itemKey","className","style","children","display","order","component"],al=void 0;function yj(e,t){var r=e.prefixCls,a=e.invalidate,i=e.item,s=e.renderItem,c=e.responsive,d=e.responsiveDisabled,m=e.registerSize,v=e.itemKey,p=e.className,h=e.style,y=e.children,C=e.display,w=e.order,x=e.component,S=x===void 0?"div":x,E=zt(e,bj),O=c&&!C;function R(A){m(v,A)}f.useEffect(function(){return function(){R(null)}},[]);var _=s&&i!==al?s(i,{index:w}):y,T;a||(T={opacity:O?0:1,height:O?0:al,overflowY:O?"hidden":al,order:c?w:al,pointerEvents:O?"none":al,position:O?"absolute":al});var M={};O&&(M["aria-hidden"]=!0);var N=f.createElement(S,Le({className:ae(!a&&r,p),style:J(J({},T),h)},M,E,{ref:t}),_);return c&&(N=f.createElement(pa,{onResize:function(j){var I=j.offsetWidth;R(I)},disabled:d},N)),N}var pl=f.forwardRef(yj);pl.displayName="Item";function Sj(e){if(typeof MessageChannel>"u")bn(e);else{var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(void 0)}}function Cj(){var e=f.useRef(null),t=function(a){e.current||(e.current=[],Sj(function(){Bo.unstable_batchedUpdates(function(){e.current.forEach(function(i){i()}),e.current=null})})),e.current.push(a)};return t}function ol(e,t){var r=f.useState(t),a=oe(r,2),i=a[0],s=a[1],c=Gn(function(d){e(function(){s(d)})});return[i,c]}var _f=ue.createContext(null),xj=["component"],Ej=["className"],wj=["className"],Oj=function(t,r){var a=f.useContext(_f);if(!a){var i=t.component,s=i===void 0?"div":i,c=zt(t,xj);return f.createElement(s,Le({},c,{ref:r}))}var d=a.className,m=zt(a,Ej),v=t.className,p=zt(t,wj);return f.createElement(_f.Provider,{value:null},f.createElement(pl,Le({ref:r,className:ae(d,v)},m,p)))},Hw=f.forwardRef(Oj);Hw.displayName="RawItem";var $j=["prefixCls","data","renderItem","renderRawItem","itemKey","itemWidth","ssr","style","className","maxCount","renderRest","renderRawRest","prefix","suffix","component","itemComponent","onVisibleChange"],Fw="responsive",Vw="invalidate";function Rj(e){return"+ ".concat(e.length," ...")}function Tj(e,t){var r=e.prefixCls,a=r===void 0?"rc-overflow":r,i=e.data,s=i===void 0?[]:i,c=e.renderItem,d=e.renderRawItem,m=e.itemKey,v=e.itemWidth,p=v===void 0?10:v,h=e.ssr,y=e.style,C=e.className,w=e.maxCount,x=e.renderRest,S=e.renderRawRest,E=e.prefix,O=e.suffix,R=e.component,_=R===void 0?"div":R,T=e.itemComponent,M=e.onVisibleChange,N=zt(e,$j),A=h==="full",j=Cj(),I=ol(j,null),L=oe(I,2),B=L[0],V=L[1],H=B||0,Q=ol(j,new Map),z=oe(Q,2),F=z[0],q=z[1],ee=ol(j,0),Z=oe(ee,2),D=Z[0],U=Z[1],G=ol(j,0),W=oe(G,2),X=W[0],Y=W[1],ie=ol(j,0),ce=oe(ie,2),fe=ce[0],Te=ce[1],he=ol(j,0),se=oe(he,2),ye=se[0],be=se[1],ge=f.useState(null),te=oe(ge,2),xe=te[0],Ee=te[1],_e=f.useState(null),je=oe(_e,2),Ae=je[0],He=je[1],Ie=f.useMemo(function(){return Ae===null&&A?Number.MAX_SAFE_INTEGER:Ae||0},[Ae,B]),Ce=f.useState(!1),Xe=oe(Ce,2),at=Xe[0],mt=Xe[1],ke="".concat(a,"-item"),We=Math.max(D,X),ct=w===Fw,Qe=s.length&&ct,ut=w===Vw,Ye=Qe||typeof w=="number"&&s.length>w,ze=f.useMemo(function(){var $e=s;return Qe?B===null&&A?$e=s:$e=s.slice(0,Math.min(s.length,H/p)):typeof w=="number"&&($e=s.slice(0,w)),$e},[s,p,B,w,Qe]),Ke=f.useMemo(function(){return Qe?s.slice(Ie+1):s.slice(ze.length)},[s,ze,Qe,Ie]),Ne=f.useCallback(function($e,Re){var Be;return typeof m=="function"?m($e):(Be=m&&($e==null?void 0:$e[m]))!==null&&Be!==void 0?Be:Re},[m]),Ge=f.useCallback(c||function($e){return $e},[c]);function _t($e,Re,Be){Ae===$e&&(Re===void 0||Re===xe)||(He($e),Be||(mt($eH){_t(tt-1,$e-nt-ye+X);break}}O&&Ft(0)+ye>H&&Ee(null)}},[H,F,X,fe,ye,Ne,ze]);var Rt=at&&!!Ke.length,xt={};xe!==null&&Qe&&(xt={position:"absolute",left:xe,top:0});var Gt={prefixCls:ke,responsive:Qe,component:T,invalidate:ut},Bt=d?function($e,Re){var Be=Ne($e,Re);return f.createElement(_f.Provider,{key:Be,value:J(J({},Gt),{},{order:Re,item:$e,itemKey:Be,registerSize:Ht,display:Re<=Ie})},d($e,Re))}:function($e,Re){var Be=Ne($e,Re);return f.createElement(pl,Le({},Gt,{order:Re,key:Be,item:$e,renderItem:Ge,itemKey:Be,registerSize:Ht,display:Re<=Ie}))},Ze={order:Rt?Ie:Number.MAX_SAFE_INTEGER,className:"".concat(ke,"-rest"),registerSize:qt,display:Rt},Et=x||Rj,st=S?f.createElement(_f.Provider,{value:J(J({},Gt),Ze)},S(Ke)):f.createElement(pl,Le({},Gt,Ze),typeof Et=="function"?Et(Ke):Et),De=f.createElement(_,Le({className:ae(!ut&&a,C),style:y,ref:t},N),E&&f.createElement(pl,Le({},Gt,{responsive:ct,responsiveDisabled:!Qe,order:-1,className:"".concat(ke,"-prefix"),registerSize:fn,display:!0}),E),ze.map(Bt),Ye?st:null,O&&f.createElement(pl,Le({},Gt,{responsive:ct,responsiveDisabled:!Qe,order:Ie,className:"".concat(ke,"-suffix"),registerSize:en,display:!0,style:xt}),O));return ct?f.createElement(pa,{onResize:gt,disabled:!Qe},De):De}var Ia=f.forwardRef(Tj);Ia.displayName="Overflow";Ia.Item=Hw;Ia.RESPONSIVE=Fw;Ia.INVALIDATE=Vw;function _j(e,t,r){var a=J(J({},e),t);return Object.keys(t).forEach(function(i){var s=t[i];typeof s=="function"&&(a[i]=function(){for(var c,d=arguments.length,m=new Array(d),v=0;vR&&(je="".concat(Ae.slice(0,R),"..."))}var He=function(Ce){Ce&&Ce.stopPropagation(),A(ge)};return typeof M=="function"?fe(Ee,je,te,_e,He):ce(ge,je,te,_e,He)},he=function(ge){if(!i.length)return null;var te=typeof T=="function"?T(ge):T;return typeof M=="function"?fe(void 0,te,!1,!1,void 0,!0):ce({title:te},te,!1)},se=f.createElement("div",{className:"".concat(X,"-search"),style:{width:ee},onFocus:function(){W(!0)},onBlur:function(){W(!1)}},f.createElement(Uw,{ref:m,open:s,prefixCls:a,id:r,inputElement:null,disabled:p,autoFocus:C,autoComplete:w,editable:ie,activeDescendantId:x,value:Y,onKeyDown:L,onMouseDown:B,onChange:j,onPaste:I,onCompositionStart:V,onCompositionEnd:H,onBlur:Q,tabIndex:S,attrs:ro(t,!0)}),f.createElement("span",{ref:z,className:"".concat(X,"-search-mirror"),"aria-hidden":!0},Y," ")),ye=f.createElement(Ia,{prefixCls:"".concat(X,"-overflow"),data:i,renderItem:Te,renderRest:he,suffix:se,itemKey:Pj,maxCount:O});return f.createElement("span",{className:"".concat(X,"-wrap")},ye,!i.length&&!Y&&f.createElement("span",{className:"".concat(X,"-placeholder")},v))},Lj=function(t){var r=t.inputElement,a=t.prefixCls,i=t.id,s=t.inputRef,c=t.disabled,d=t.autoFocus,m=t.autoComplete,v=t.activeDescendantId,p=t.mode,h=t.open,y=t.values,C=t.placeholder,w=t.tabIndex,x=t.showSearch,S=t.searchValue,E=t.activeValue,O=t.maxLength,R=t.onInputKeyDown,_=t.onInputMouseDown,T=t.onInputChange,M=t.onInputPaste,N=t.onInputCompositionStart,A=t.onInputCompositionEnd,j=t.onInputBlur,I=t.title,L=f.useState(!1),B=oe(L,2),V=B[0],H=B[1],Q=p==="combobox",z=Q||x,F=y[0],q=S||"";Q&&E&&!V&&(q=E),f.useEffect(function(){Q&&H(!1)},[Q,E]);var ee=p!=="combobox"&&!h&&!x?!1:!!q,Z=I===void 0?Gw(F):I,D=f.useMemo(function(){return F?null:f.createElement("span",{className:"".concat(a,"-selection-placeholder"),style:ee?{visibility:"hidden"}:void 0},C)},[F,ee,C,a]);return f.createElement("span",{className:"".concat(a,"-selection-wrap")},f.createElement("span",{className:"".concat(a,"-selection-search")},f.createElement(Uw,{ref:s,prefixCls:a,id:i,open:h,inputElement:r,disabled:c,autoFocus:d,autoComplete:m,editable:z,activeDescendantId:v,value:q,onKeyDown:R,onMouseDown:_,onChange:function(G){H(!0),T(G)},onPaste:M,onCompositionStart:N,onCompositionEnd:A,onBlur:j,tabIndex:w,attrs:ro(t,!0),maxLength:Q?O:void 0})),!Q&&F?f.createElement("span",{className:"".concat(a,"-selection-item"),title:Z,style:ee?{visibility:"hidden"}:void 0},F.label):null,D)},Hj=function(t,r){var a=f.useRef(null),i=f.useRef(!1),s=t.prefixCls,c=t.open,d=t.mode,m=t.showSearch,v=t.tokenWithEnter,p=t.disabled,h=t.prefix,y=t.autoClearSearchValue,C=t.onSearch,w=t.onSearchSubmit,x=t.onToggleOpen,S=t.onInputKeyDown,E=t.onInputBlur,O=t.domRef;f.useImperativeHandle(r,function(){return{focus:function(Z){a.current.focus(Z)},blur:function(){a.current.blur()}}});var R=Lw(0),_=oe(R,2),T=_[0],M=_[1],N=function(Z){var D=Z.which,U=a.current instanceof HTMLTextAreaElement;!U&&c&&(D===rt.UP||D===rt.DOWN)&&Z.preventDefault(),S&&S(Z),D===rt.ENTER&&d==="tags"&&!i.current&&!c&&(w==null||w(Z.target.value)),!(U&&!c&&~[rt.UP,rt.DOWN,rt.LEFT,rt.RIGHT].indexOf(D))&&hj(D)&&x(!0)},A=function(){M(!0)},j=f.useRef(null),I=function(Z){C(Z,!0,i.current)!==!1&&x(!0)},L=function(){i.current=!0},B=function(Z){i.current=!1,d!=="combobox"&&I(Z.target.value)},V=function(Z){var D=Z.target.value;if(v&&j.current&&/[\r\n]/.test(j.current)){var U=j.current.replace(/[\r\n]+$/,"").replace(/\r\n/g," ").replace(/[\r\n]/g," ");D=D.replace(U,j.current)}j.current=null,I(D)},H=function(Z){var D=Z.clipboardData,U=D==null?void 0:D.getData("text");j.current=U||""},Q=function(Z){var D=Z.target;if(D!==a.current){var U=document.body.style.msTouchAction!==void 0;U?setTimeout(function(){a.current.focus()}):a.current.focus()}},z=function(Z){var D=T();Z.target!==a.current&&!D&&!(d==="combobox"&&p)&&Z.preventDefault(),(d!=="combobox"&&(!m||!D)||!c)&&(c&&y!==!1&&C("",!0,!1),x())},F={inputRef:a,onInputKeyDown:N,onInputMouseDown:A,onInputChange:V,onInputPaste:H,onInputCompositionStart:L,onInputCompositionEnd:B,onInputBlur:E},q=d==="multiple"||d==="tags"?f.createElement(Bj,Le({},t,F)):f.createElement(Lj,Le({},t,F));return f.createElement("div",{ref:O,className:"".concat(s,"-selector"),onClick:Q,onMouseDown:z},h&&f.createElement("div",{className:"".concat(s,"-prefix")},h),q)},Fj=f.forwardRef(Hj);function Vj(e){var t=e.prefixCls,r=e.align,a=e.arrow,i=e.arrowPos,s=a||{},c=s.className,d=s.content,m=i.x,v=m===void 0?0:m,p=i.y,h=p===void 0?0:p,y=f.useRef();if(!r||!r.points)return null;var C={position:"absolute"};if(r.autoArrow!==!1){var w=r.points[0],x=r.points[1],S=w[0],E=w[1],O=x[0],R=x[1];S===O||!["t","b"].includes(S)?C.top=h:S==="t"?C.top=0:C.bottom=0,E===R||!["l","r"].includes(E)?C.left=v:E==="l"?C.left=0:C.right=0}return f.createElement("div",{ref:y,className:ae("".concat(t,"-arrow"),c),style:C},d)}function Uj(e){var t=e.prefixCls,r=e.open,a=e.zIndex,i=e.mask,s=e.motion;return i?f.createElement(Fo,Le({},s,{motionAppear:!0,visible:r,removeOnLeave:!0}),function(c){var d=c.className;return f.createElement("div",{style:{zIndex:a},className:ae("".concat(t,"-mask"),d)})}):null}var qj=f.memo(function(e){var t=e.children;return t},function(e,t){return t.cache}),Gj=f.forwardRef(function(e,t){var r=e.popup,a=e.className,i=e.prefixCls,s=e.style,c=e.target,d=e.onVisibleChanged,m=e.open,v=e.keepDom,p=e.fresh,h=e.onClick,y=e.mask,C=e.arrow,w=e.arrowPos,x=e.align,S=e.motion,E=e.maskMotion,O=e.forceRender,R=e.getPopupContainer,_=e.autoDestroy,T=e.portal,M=e.zIndex,N=e.onMouseEnter,A=e.onMouseLeave,j=e.onPointerEnter,I=e.onPointerDownCapture,L=e.ready,B=e.offsetX,V=e.offsetY,H=e.offsetR,Q=e.offsetB,z=e.onAlign,F=e.onPrepare,q=e.stretch,ee=e.targetWidth,Z=e.targetHeight,D=typeof r=="function"?r():r,U=m||v,G=(R==null?void 0:R.length)>0,W=f.useState(!R||!G),X=oe(W,2),Y=X[0],ie=X[1];if(nn(function(){!Y&&G&&c&&ie(!0)},[Y,G,c]),!Y)return null;var ce="auto",fe={left:"-1000vw",top:"-1000vh",right:ce,bottom:ce};if(L||!m){var Te,he=x.points,se=x.dynamicInset||((Te=x._experimental)===null||Te===void 0?void 0:Te.dynamicInset),ye=se&&he[0][1]==="r",be=se&&he[0][0]==="b";ye?(fe.right=H,fe.left=ce):(fe.left=B,fe.right=ce),be?(fe.bottom=Q,fe.top=ce):(fe.top=V,fe.bottom=ce)}var ge={};return q&&(q.includes("height")&&Z?ge.height=Z:q.includes("minHeight")&&Z&&(ge.minHeight=Z),q.includes("width")&&ee?ge.width=ee:q.includes("minWidth")&&ee&&(ge.minWidth=ee)),m||(ge.pointerEvents="none"),f.createElement(T,{open:O||U,getContainer:R&&function(){return R(c)},autoDestroy:_},f.createElement(Uj,{prefixCls:i,open:m,zIndex:M,mask:y,motion:E}),f.createElement(pa,{onResize:z,disabled:!m},function(te){return f.createElement(Fo,Le({motionAppear:!0,motionEnter:!0,motionLeave:!0,removeOnLeave:!1,forceRender:O,leavedClassName:"".concat(i,"-hidden")},S,{onAppearPrepare:F,onEnterPrepare:F,visible:m,onVisibleChanged:function(Ee){var _e;S==null||(_e=S.onVisibleChanged)===null||_e===void 0||_e.call(S,Ee),d(Ee)}}),function(xe,Ee){var _e=xe.className,je=xe.style,Ae=ae(i,_e,a);return f.createElement("div",{ref:ea(te,t,Ee),className:Ae,style:J(J(J(J({"--arrow-x":"".concat(w.x||0,"px"),"--arrow-y":"".concat(w.y||0,"px")},fe),ge),je),{},{boxSizing:"border-box",zIndex:M},s),onMouseEnter:N,onMouseLeave:A,onPointerEnter:j,onClick:h,onPointerDownCapture:I},C&&f.createElement(Vj,{prefixCls:i,arrow:C,arrowPos:w,align:x}),f.createElement(qj,{cache:!m&&!p},D))})}))}),Wj=f.forwardRef(function(e,t){var r=e.children,a=e.getTriggerDOMNode,i=Ho(r),s=f.useCallback(function(d){Up(t,a?a(d):d)},[a]),c=Ci(s,Nl(r));return i?f.cloneElement(r,{ref:c}):r}),QC=f.createContext(null);function ZC(e){return e?Array.isArray(e)?e:[e]:[]}function Kj(e,t,r,a){return f.useMemo(function(){var i=ZC(r??t),s=ZC(a??t),c=new Set(i),d=new Set(s);return e&&(c.has("hover")&&(c.delete("hover"),c.add("click")),d.has("hover")&&(d.delete("hover"),d.add("click"))),[c,d]},[e,t,r,a])}function Xj(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0;return r?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function Yj(e,t,r,a){for(var i=r.points,s=Object.keys(e),c=0;c1&&arguments[1]!==void 0?arguments[1]:1;return Number.isNaN(e)?t:e}function js(e){return fc(parseFloat(e),0)}function kC(e,t){var r=J({},e);return(t||[]).forEach(function(a){if(!(a instanceof HTMLBodyElement||a instanceof HTMLHtmlElement)){var i=xc(a).getComputedStyle(a),s=i.overflow,c=i.overflowClipMargin,d=i.borderTopWidth,m=i.borderBottomWidth,v=i.borderLeftWidth,p=i.borderRightWidth,h=a.getBoundingClientRect(),y=a.offsetHeight,C=a.clientHeight,w=a.offsetWidth,x=a.clientWidth,S=js(d),E=js(m),O=js(v),R=js(p),_=fc(Math.round(h.width/w*1e3)/1e3),T=fc(Math.round(h.height/y*1e3)/1e3),M=(w-x-O-R)*_,N=(y-C-S-E)*T,A=S*T,j=E*T,I=O*_,L=R*_,B=0,V=0;if(s==="clip"){var H=js(c);B=H*_,V=H*T}var Q=h.x+I-B,z=h.y+A-V,F=Q+h.width+2*B-I-L-M,q=z+h.height+2*V-A-j-N;r.left=Math.max(r.left,Q),r.top=Math.max(r.top,z),r.right=Math.min(r.right,F),r.bottom=Math.min(r.bottom,q)}}),r}function e1(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r="".concat(t),a=r.match(/^(.*)\%$/);return a?e*(parseFloat(a[1])/100):parseFloat(r)}function t1(e,t){var r=t||[],a=oe(r,2),i=a[0],s=a[1];return[e1(e.width,i),e1(e.height,s)]}function n1(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return[e[0],e[1]]}function il(e,t){var r=t[0],a=t[1],i,s;return r==="t"?s=e.y:r==="b"?s=e.y+e.height:s=e.y+e.height/2,a==="l"?i=e.x:a==="r"?i=e.x+e.width:i=e.x+e.width/2,{x:i,y:s}}function Ao(e,t){var r={t:"b",b:"t",l:"r",r:"l"};return e.map(function(a,i){return i===t?r[a]||"c":a}).join("")}function Qj(e,t,r,a,i,s,c){var d=f.useState({ready:!1,offsetX:0,offsetY:0,offsetR:0,offsetB:0,arrowX:0,arrowY:0,scaleX:1,scaleY:1,align:i[a]||{}}),m=oe(d,2),v=m[0],p=m[1],h=f.useRef(0),y=f.useMemo(function(){return t?Rp(t):[]},[t]),C=f.useRef({}),w=function(){C.current={}};e||w();var x=Gn(function(){if(t&&r&&e){let Nr=function(Or,Fr){var na=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Xe,ra=U.x+Or,ya=U.y+Fr,wi=ra+be,Vo=ya+ye,Oi=Math.max(ra,na.left),lt=Math.max(ya,na.top),St=Math.min(wi,na.right),Sn=Math.min(Vo,na.bottom);return Math.max(0,(St-Oi)*(Sn-lt))},ba=function(){vn=U.y+Et,yn=vn+ye,Nn=U.x+Ze,Vt=Nn+be};var O,R,_,T,M=t,N=M.ownerDocument,A=xc(M),j=A.getComputedStyle(M),I=j.position,L=M.style.left,B=M.style.top,V=M.style.right,H=M.style.bottom,Q=M.style.overflow,z=J(J({},i[a]),s),F=N.createElement("div");(O=M.parentElement)===null||O===void 0||O.appendChild(F),F.style.left="".concat(M.offsetLeft,"px"),F.style.top="".concat(M.offsetTop,"px"),F.style.position=I,F.style.height="".concat(M.offsetHeight,"px"),F.style.width="".concat(M.offsetWidth,"px"),M.style.left="0",M.style.top="0",M.style.right="auto",M.style.bottom="auto",M.style.overflow="hidden";var q;if(Array.isArray(r))q={x:r[0],y:r[1],width:0,height:0};else{var ee,Z,D=r.getBoundingClientRect();D.x=(ee=D.x)!==null&&ee!==void 0?ee:D.left,D.y=(Z=D.y)!==null&&Z!==void 0?Z:D.top,q={x:D.x,y:D.y,width:D.width,height:D.height}}var U=M.getBoundingClientRect(),G=A.getComputedStyle(M),W=G.height,X=G.width;U.x=(R=U.x)!==null&&R!==void 0?R:U.left,U.y=(_=U.y)!==null&&_!==void 0?_:U.top;var Y=N.documentElement,ie=Y.clientWidth,ce=Y.clientHeight,fe=Y.scrollWidth,Te=Y.scrollHeight,he=Y.scrollTop,se=Y.scrollLeft,ye=U.height,be=U.width,ge=q.height,te=q.width,xe={left:0,top:0,right:ie,bottom:ce},Ee={left:-se,top:-he,right:fe-se,bottom:Te-he},_e=z.htmlRegion,je="visible",Ae="visibleFirst";_e!=="scroll"&&_e!==Ae&&(_e=je);var He=_e===Ae,Ie=kC(Ee,y),Ce=kC(xe,y),Xe=_e===je?Ce:Ie,at=He?Ce:Xe;M.style.left="auto",M.style.top="auto",M.style.right="0",M.style.bottom="0";var mt=M.getBoundingClientRect();M.style.left=L,M.style.top=B,M.style.right=V,M.style.bottom=H,M.style.overflow=Q,(T=M.parentElement)===null||T===void 0||T.removeChild(F);var ke=fc(Math.round(be/parseFloat(X)*1e3)/1e3),We=fc(Math.round(ye/parseFloat(W)*1e3)/1e3);if(ke===0||We===0||ks(r)&&!oh(r))return;var ct=z.offset,Qe=z.targetOffset,ut=t1(U,ct),Ye=oe(ut,2),ze=Ye[0],Ke=Ye[1],Ne=t1(q,Qe),Ge=oe(Ne,2),_t=Ge[0],gt=Ge[1];q.x-=_t,q.y-=gt;var Ht=z.points||[],qt=oe(Ht,2),fn=qt[0],en=qt[1],Ft=n1(en),Rt=n1(fn),xt=il(q,Ft),Gt=il(U,Rt),Bt=J({},z),Ze=xt.x-Gt.x+ze,Et=xt.y-Gt.y+Ke,st=Nr(Ze,Et),De=Nr(Ze,Et,Ce),$e=il(q,["t","l"]),Re=il(U,["t","l"]),Be=il(q,["b","r"]),tt=il(U,["b","r"]),nt=z.overflow||{},Ot=nt.adjustX,bt=nt.adjustY,vt=nt.shiftX,Nt=nt.shiftY,dn=function(Fr){return typeof Fr=="boolean"?Fr:Fr>=0},vn,yn,Nn,Vt;ba();var Jt=dn(bt),Pe=Rt[0]===Ft[0];if(Jt&&Rt[0]==="t"&&(yn>at.bottom||C.current.bt)){var qe=Et;Pe?qe-=ye-ge:qe=$e.y-tt.y-Ke;var yt=Nr(Ze,qe),$t=Nr(Ze,qe,Ce);yt>st||yt===st&&(!He||$t>=De)?(C.current.bt=!0,Et=qe,Ke=-Ke,Bt.points=[Ao(Rt,0),Ao(Ft,0)]):C.current.bt=!1}if(Jt&&Rt[0]==="b"&&(vnst||Je===st&&(!He||Ct>=De)?(C.current.tb=!0,Et=Ve,Ke=-Ke,Bt.points=[Ao(Rt,0),Ao(Ft,0)]):C.current.tb=!1}var At=dn(Ot),Fe=Rt[1]===Ft[1];if(At&&Rt[1]==="l"&&(Vt>at.right||C.current.rl)){var ft=Ze;Fe?ft-=be-te:ft=$e.x-tt.x-ze;var Mt=Nr(ft,Et),An=Nr(ft,Et,Ce);Mt>st||Mt===st&&(!He||An>=De)?(C.current.rl=!0,Ze=ft,ze=-ze,Bt.points=[Ao(Rt,1),Ao(Ft,1)]):C.current.rl=!1}if(At&&Rt[1]==="r"&&(Nnst||tr===st&&(!He||nr>=De)?(C.current.lr=!0,Ze=Fn,ze=-ze,Bt.points=[Ao(Rt,1),Ao(Ft,1)]):C.current.lr=!1}ba();var $n=vt===!0?0:vt;typeof $n=="number"&&(NnCe.right&&(Ze-=Vt-Ce.right-ze,q.x>Ce.right-$n&&(Ze+=q.x-Ce.right+$n)));var Rn=Nt===!0?0:Nt;typeof Rn=="number"&&(vnCe.bottom&&(Et-=yn-Ce.bottom-Ke,q.y>Ce.bottom-Rn&&(Et+=q.y-Ce.bottom+Rn)));var fr=U.x+Ze,_r=fr+be,Mr=U.y+Et,tn=Mr+ye,ot=q.x,it=ot+te,jt=q.y,Xt=jt+ge,ln=Math.max(fr,ot),gn=Math.min(_r,it),Bn=(ln+gn)/2,Yn=Bn-fr,ir=Math.max(Mr,jt),Pn=Math.min(tn,Xt),dr=(ir+Pn)/2,Hr=dr-Mr;c==null||c(t,Bt);var lr=mt.right-U.x-(Ze+U.width),La=mt.bottom-U.y-(Et+U.height);ke===1&&(Ze=Math.floor(Ze),lr=Math.floor(lr)),We===1&&(Et=Math.floor(Et),La=Math.floor(La));var Ul={ready:!0,offsetX:Ze/ke,offsetY:Et/We,offsetR:lr/ke,offsetB:La/We,arrowX:Yn/ke,arrowY:Hr/We,scaleX:ke,scaleY:We,align:Bt};p(Ul)}}),S=function(){h.current+=1;var R=h.current;Promise.resolve().then(function(){h.current===R&&x()})},E=function(){p(function(R){return J(J({},R),{},{ready:!1})})};return nn(E,[a]),nn(function(){e||E()},[e]),[v.ready,v.offsetX,v.offsetY,v.offsetR,v.offsetB,v.arrowX,v.arrowY,v.scaleX,v.scaleY,v.align,S]}function Zj(e,t,r,a,i){nn(function(){if(e&&t&&r){let h=function(){a(),i()};var s=t,c=r,d=Rp(s),m=Rp(c),v=xc(c),p=new Set([v].concat(Ue(d),Ue(m)));return p.forEach(function(y){y.addEventListener("scroll",h,{passive:!0})}),v.addEventListener("resize",h,{passive:!0}),a(),function(){p.forEach(function(y){y.removeEventListener("scroll",h),v.removeEventListener("resize",h)})}}},[e,t,r])}function Jj(e,t,r,a,i,s,c,d){var m=f.useRef(e);m.current=e;var v=f.useRef(!1);f.useEffect(function(){if(t&&a&&(!i||s)){var h=function(){v.current=!1},y=function(S){var E;m.current&&!c(((E=S.composedPath)===null||E===void 0||(E=E.call(S))===null||E===void 0?void 0:E[0])||S.target)&&!v.current&&d(!1)},C=xc(a);C.addEventListener("pointerdown",h,!0),C.addEventListener("mousedown",y,!0),C.addEventListener("contextmenu",y,!0);var w=xf(r);return w&&(w.addEventListener("mousedown",y,!0),w.addEventListener("contextmenu",y,!0)),function(){C.removeEventListener("pointerdown",h,!0),C.removeEventListener("mousedown",y,!0),C.removeEventListener("contextmenu",y,!0),w&&(w.removeEventListener("mousedown",y,!0),w.removeEventListener("contextmenu",y,!0))}}},[t,r,a,i,s]);function p(){v.current=!0}return p}var kj=["prefixCls","children","action","showAction","hideAction","popupVisible","defaultPopupVisible","onPopupVisibleChange","afterPopupVisibleChange","mouseEnterDelay","mouseLeaveDelay","focusDelay","blurDelay","mask","maskClosable","getPopupContainer","forceRender","autoDestroy","destroyPopupOnHide","popup","popupClassName","popupStyle","popupPlacement","builtinPlacements","popupAlign","zIndex","stretch","getPopupClassNameFromAlign","fresh","alignPoint","onPopupClick","onPopupAlign","arrow","popupMotion","maskMotion","popupTransitionName","popupAnimation","maskTransitionName","maskAnimation","className","getTriggerDOMNode"];function e6(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Tw,t=f.forwardRef(function(r,a){var i=r.prefixCls,s=i===void 0?"rc-trigger-popup":i,c=r.children,d=r.action,m=d===void 0?"hover":d,v=r.showAction,p=r.hideAction,h=r.popupVisible,y=r.defaultPopupVisible,C=r.onPopupVisibleChange,w=r.afterPopupVisibleChange,x=r.mouseEnterDelay,S=r.mouseLeaveDelay,E=S===void 0?.1:S,O=r.focusDelay,R=r.blurDelay,_=r.mask,T=r.maskClosable,M=T===void 0?!0:T,N=r.getPopupContainer,A=r.forceRender,j=r.autoDestroy,I=r.destroyPopupOnHide,L=r.popup,B=r.popupClassName,V=r.popupStyle,H=r.popupPlacement,Q=r.builtinPlacements,z=Q===void 0?{}:Q,F=r.popupAlign,q=r.zIndex,ee=r.stretch,Z=r.getPopupClassNameFromAlign,D=r.fresh,U=r.alignPoint,G=r.onPopupClick,W=r.onPopupAlign,X=r.arrow,Y=r.popupMotion,ie=r.maskMotion,ce=r.popupTransitionName,fe=r.popupAnimation,Te=r.maskTransitionName,he=r.maskAnimation,se=r.className,ye=r.getTriggerDOMNode,be=zt(r,kj),ge=j||I||!1,te=f.useState(!1),xe=oe(te,2),Ee=xe[0],_e=xe[1];nn(function(){_e(uh())},[]);var je=f.useRef({}),Ae=f.useContext(QC),He=f.useMemo(function(){return{registerSubPopup:function(St,Sn){je.current[St]=Sn,Ae==null||Ae.registerSubPopup(St,Sn)}}},[Ae]),Ie=_w(),Ce=f.useState(null),Xe=oe(Ce,2),at=Xe[0],mt=Xe[1],ke=f.useRef(null),We=Gn(function(lt){ke.current=lt,ks(lt)&&at!==lt&&mt(lt),Ae==null||Ae.registerSubPopup(Ie,lt)}),ct=f.useState(null),Qe=oe(ct,2),ut=Qe[0],Ye=Qe[1],ze=f.useRef(null),Ke=Gn(function(lt){ks(lt)&&ut!==lt&&(Ye(lt),ze.current=lt)}),Ne=f.Children.only(c),Ge=(Ne==null?void 0:Ne.props)||{},_t={},gt=Gn(function(lt){var St,Sn,zn=ut;return(zn==null?void 0:zn.contains(lt))||((St=xf(zn))===null||St===void 0?void 0:St.host)===lt||lt===zn||(at==null?void 0:at.contains(lt))||((Sn=xf(at))===null||Sn===void 0?void 0:Sn.host)===lt||lt===at||Object.values(je.current).some(function(sn){return(sn==null?void 0:sn.contains(lt))||lt===sn})}),Ht=JC(s,Y,fe,ce),qt=JC(s,ie,he,Te),fn=f.useState(y||!1),en=oe(fn,2),Ft=en[0],Rt=en[1],xt=h??Ft,Gt=Gn(function(lt){h===void 0&&Rt(lt)});nn(function(){Rt(h||!1)},[h]);var Bt=f.useRef(xt);Bt.current=xt;var Ze=f.useRef([]);Ze.current=[];var Et=Gn(function(lt){var St;Gt(lt),((St=Ze.current[Ze.current.length-1])!==null&&St!==void 0?St:xt)!==lt&&(Ze.current.push(lt),C==null||C(lt))}),st=f.useRef(),De=function(){clearTimeout(st.current)},$e=function(St){var Sn=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;De(),Sn===0?Et(St):st.current=setTimeout(function(){Et(St)},Sn*1e3)};f.useEffect(function(){return De},[]);var Re=f.useState(!1),Be=oe(Re,2),tt=Be[0],nt=Be[1];nn(function(lt){(!lt||xt)&&nt(!0)},[xt]);var Ot=f.useState(null),bt=oe(Ot,2),vt=bt[0],Nt=bt[1],dn=f.useState(null),vn=oe(dn,2),yn=vn[0],Nn=vn[1],Vt=function(St){Nn([St.clientX,St.clientY])},Jt=Qj(xt,at,U&&yn!==null?yn:ut,H,z,F,W),Pe=oe(Jt,11),qe=Pe[0],yt=Pe[1],$t=Pe[2],Ve=Pe[3],Je=Pe[4],Ct=Pe[5],At=Pe[6],Fe=Pe[7],ft=Pe[8],Mt=Pe[9],An=Pe[10],Fn=Kj(Ee,m,v,p),tr=oe(Fn,2),nr=tr[0],$n=tr[1],Rn=nr.has("click"),fr=$n.has("click")||$n.has("contextMenu"),_r=Gn(function(){tt||An()}),Mr=function(){Bt.current&&U&&fr&&$e(!1)};Zj(xt,ut,at,_r,Mr),nn(function(){_r()},[yn,H]),nn(function(){xt&&!(z!=null&&z[H])&&_r()},[JSON.stringify(F)]);var tn=f.useMemo(function(){var lt=Yj(z,s,Mt,U);return ae(lt,Z==null?void 0:Z(Mt))},[Mt,Z,z,s,U]);f.useImperativeHandle(a,function(){return{nativeElement:ze.current,popupElement:ke.current,forceAlign:_r}});var ot=f.useState(0),it=oe(ot,2),jt=it[0],Xt=it[1],ln=f.useState(0),gn=oe(ln,2),Bn=gn[0],Yn=gn[1],ir=function(){if(ee&&ut){var St=ut.getBoundingClientRect();Xt(St.width),Yn(St.height)}},Pn=function(){ir(),_r()},dr=function(St){nt(!1),An(),w==null||w(St)},Hr=function(){return new Promise(function(St){ir(),Nt(function(){return St})})};nn(function(){vt&&(An(),vt(),Nt(null))},[vt]);function lr(lt,St,Sn,zn){_t[lt]=function(sn){var io;zn==null||zn(sn),$e(St,Sn);for(var lo=arguments.length,ql=new Array(lo>1?lo-1:0),Ha=1;Ha1?Sn-1:0),sn=1;sn1?Sn-1:0),sn=1;sn1&&arguments[1]!==void 0?arguments[1]:{},r=t.fieldNames,a=t.childrenAsData,i=[],s=Ww(r,!1),c=s.label,d=s.value,m=s.options,v=s.groupLabel;function p(h,y){Array.isArray(h)&&h.forEach(function(C){if(y||!(m in C)){var w=C[d];i.push({key:r1(C,i.length),groupOption:y,data:C,label:C[c],value:w})}else{var x=C[v];x===void 0&&a&&(x=C.label),i.push({key:r1(C,i.length),group:!0,data:C,label:x}),p(C[m],!0)}})}return p(e,!1),i}function _p(e){var t=J({},e);return"props"in t||Object.defineProperty(t,"props",{get:function(){return xr(!1,"Return type is option instead of Option instance. Please read value directly instead of reading from `props`."),t}}),t}var i6=function(t,r,a){if(!r||!r.length)return null;var i=!1,s=function d(m,v){var p=hE(v),h=p[0],y=p.slice(1);if(!h)return[m];var C=m.split(h);return i=i||C.length>1,C.reduce(function(w,x){return[].concat(Ue(w),Ue(d(x,y)))},[]).filter(Boolean)},c=s(t,r);return i?typeof a<"u"?c.slice(0,a):c:null},fh=f.createContext(null);function l6(e){var t=e.visible,r=e.values;if(!t)return null;var a=50;return f.createElement("span",{"aria-live":"polite",style:{width:0,height:0,position:"absolute",overflow:"hidden",opacity:0}},"".concat(r.slice(0,a).map(function(i){var s=i.label,c=i.value;return["number","string"].includes(pt(s))?s:c}).join(", ")),r.length>a?", ...":null)}var s6=["id","prefixCls","className","showSearch","tagRender","direction","omitDomProps","displayValues","onDisplayValuesChange","emptyOptions","notFoundContent","onClear","mode","disabled","loading","getInputElement","getRawInputElement","open","defaultOpen","onDropdownVisibleChange","activeValue","onActiveValueChange","activeDescendantId","searchValue","autoClearSearchValue","onSearch","onSearchSplit","tokenSeparators","allowClear","prefix","suffixIcon","clearIcon","OptionList","animation","transitionName","dropdownStyle","dropdownClassName","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","placement","builtinPlacements","getPopupContainer","showAction","onFocus","onBlur","onKeyUp","onKeyDown","onMouseDown"],c6=["value","onChange","removeIcon","placeholder","autoFocus","maxTagCount","maxTagTextLength","maxTagPlaceholder","choiceTransitionName","onInputKeyDown","onPopupScroll","tabIndex"],Mp=function(t){return t==="tags"||t==="multiple"},u6=f.forwardRef(function(e,t){var r,a=e.id,i=e.prefixCls,s=e.className,c=e.showSearch,d=e.tagRender,m=e.direction,v=e.omitDomProps,p=e.displayValues,h=e.onDisplayValuesChange,y=e.emptyOptions,C=e.notFoundContent,w=C===void 0?"Not Found":C,x=e.onClear,S=e.mode,E=e.disabled,O=e.loading,R=e.getInputElement,_=e.getRawInputElement,T=e.open,M=e.defaultOpen,N=e.onDropdownVisibleChange,A=e.activeValue,j=e.onActiveValueChange,I=e.activeDescendantId,L=e.searchValue,B=e.autoClearSearchValue,V=e.onSearch,H=e.onSearchSplit,Q=e.tokenSeparators,z=e.allowClear,F=e.prefix,q=e.suffixIcon,ee=e.clearIcon,Z=e.OptionList,D=e.animation,U=e.transitionName,G=e.dropdownStyle,W=e.dropdownClassName,X=e.dropdownMatchSelectWidth,Y=e.dropdownRender,ie=e.dropdownAlign,ce=e.placement,fe=e.builtinPlacements,Te=e.getPopupContainer,he=e.showAction,se=he===void 0?[]:he,ye=e.onFocus,be=e.onBlur,ge=e.onKeyUp,te=e.onKeyDown,xe=e.onMouseDown,Ee=zt(e,s6),_e=Mp(S),je=(c!==void 0?c:_e)||S==="combobox",Ae=J({},Ee);c6.forEach(function(ot){delete Ae[ot]}),v==null||v.forEach(function(ot){delete Ae[ot]});var He=f.useState(!1),Ie=oe(He,2),Ce=Ie[0],Xe=Ie[1];f.useEffect(function(){Xe(uh())},[]);var at=f.useRef(null),mt=f.useRef(null),ke=f.useRef(null),We=f.useRef(null),ct=f.useRef(null),Qe=f.useRef(!1),ut=gj(),Ye=oe(ut,3),ze=Ye[0],Ke=Ye[1],Ne=Ye[2];f.useImperativeHandle(t,function(){var ot,it;return{focus:(ot=We.current)===null||ot===void 0?void 0:ot.focus,blur:(it=We.current)===null||it===void 0?void 0:it.blur,scrollTo:function(Xt){var ln;return(ln=ct.current)===null||ln===void 0?void 0:ln.scrollTo(Xt)},nativeElement:at.current||mt.current}});var Ge=f.useMemo(function(){var ot;if(S!=="combobox")return L;var it=(ot=p[0])===null||ot===void 0?void 0:ot.value;return typeof it=="string"||typeof it=="number"?String(it):""},[L,S,p]),_t=S==="combobox"&&typeof R=="function"&&R()||null,gt=typeof _=="function"&&_(),Ht=Ci(mt,gt==null||(r=gt.props)===null||r===void 0?void 0:r.ref),qt=f.useState(!1),fn=oe(qt,2),en=fn[0],Ft=fn[1];nn(function(){Ft(!0)},[]);var Rt=ur(!1,{defaultValue:M,value:T}),xt=oe(Rt,2),Gt=xt[0],Bt=xt[1],Ze=en?Gt:!1,Et=!w&&y;(E||Et&&Ze&&S==="combobox")&&(Ze=!1);var st=Et?!1:Ze,De=f.useCallback(function(ot){var it=ot!==void 0?ot:!Ze;E||(Bt(it),Ze!==it&&(N==null||N(it)))},[E,Ze,Bt,N]),$e=f.useMemo(function(){return(Q||[]).some(function(ot){return[` +`,`\r +`].includes(ot)})},[Q]),Re=f.useContext(fh)||{},Be=Re.maxCount,tt=Re.rawValues,nt=function(it,jt,Xt){if(!(_e&&Tp(Be)&&(tt==null?void 0:tt.size)>=Be)){var ln=!0,gn=it;j==null||j(null);var Bn=i6(it,Q,Tp(Be)?Be-tt.size:void 0),Yn=Xt?null:Bn;return S!=="combobox"&&Yn&&(gn="",H==null||H(Yn),De(!1),ln=!1),V&&Ge!==gn&&V(gn,{source:jt?"typing":"effect"}),ln}},Ot=function(it){!it||!it.trim()||V(it,{source:"submit"})};f.useEffect(function(){!Ze&&!_e&&S!=="combobox"&&nt("",!1,!1)},[Ze]),f.useEffect(function(){Gt&&E&&Bt(!1),E&&!Qe.current&&Ke(!1)},[E]);var bt=Lw(),vt=oe(bt,2),Nt=vt[0],dn=vt[1],vn=f.useRef(!1),yn=function(it){var jt=Nt(),Xt=it.key,ln=Xt==="Enter";if(ln&&(S!=="combobox"&&it.preventDefault(),Ze||De(!0)),dn(!!Ge),Xt==="Backspace"&&!jt&&_e&&!Ge&&p.length){for(var gn=Ue(p),Bn=null,Yn=gn.length-1;Yn>=0;Yn-=1){var ir=gn[Yn];if(!ir.disabled){gn.splice(Yn,1),Bn=ir;break}}Bn&&h(gn,{type:"remove",values:[Bn]})}for(var Pn=arguments.length,dr=new Array(Pn>1?Pn-1:0),Hr=1;Hr1?jt-1:0),ln=1;ln1?Bn-1:0),ir=1;ir"u"?"undefined":pt(navigator))==="object"&&/Firefox/i.test(navigator.userAgent);const Xw=(function(e,t,r,a){var i=f.useRef(!1),s=f.useRef(null);function c(){clearTimeout(s.current),i.current=!0,s.current=setTimeout(function(){i.current=!1},50)}var d=f.useRef({top:e,bottom:t,left:r,right:a});return d.current.top=e,d.current.bottom=t,d.current.left=r,d.current.right=a,function(m,v){var p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,h=m?v<0&&d.current.left||v>0&&d.current.right:v<0&&d.current.top||v>0&&d.current.bottom;return p&&h?(clearTimeout(s.current),i.current=!1):(!h||i.current)&&c(),!i.current&&h}});function g6(e,t,r,a,i,s,c){var d=f.useRef(0),m=f.useRef(null),v=f.useRef(null),p=f.useRef(!1),h=Xw(t,r,a,i);function y(O,R){if(bn.cancel(m.current),!h(!1,R)){var _=O;if(!_._virtualHandled)_._virtualHandled=!0;else return;d.current+=R,v.current=R,a1||_.preventDefault(),m.current=bn(function(){var T=p.current?10:1;c(d.current*T,!1),d.current=0})}}function C(O,R){c(R,!0),a1||O.preventDefault()}var w=f.useRef(null),x=f.useRef(null);function S(O){if(e){bn.cancel(x.current),x.current=bn(function(){w.current=null},2);var R=O.deltaX,_=O.deltaY,T=O.shiftKey,M=R,N=_;(w.current==="sx"||!w.current&&T&&_&&!R)&&(M=_,N=0,w.current="sx");var A=Math.abs(M),j=Math.abs(N);w.current===null&&(w.current=s&&A>j?"x":"y"),w.current==="y"?y(O,N):C(O,M)}}function E(O){e&&(p.current=O.detail===v.current)}return[S,E]}function p6(e,t,r,a){var i=f.useMemo(function(){return[new Map,[]]},[e,r.id,a]),s=oe(i,2),c=s[0],d=s[1],m=function(p){var h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p,y=c.get(p),C=c.get(h);if(y===void 0||C===void 0)for(var w=e.length,x=d.length;x0&&arguments[0]!==void 0?arguments[0]:!1;p();var w=function(){var E=!1;d.current.forEach(function(O,R){if(O&&O.offsetParent){var _=O.offsetHeight,T=getComputedStyle(O),M=T.marginTop,N=T.marginBottom,A=o1(M),j=o1(N),I=_+A+j;m.current.get(R)!==I&&(m.current.set(R,I),E=!0)}}),E&&c(function(O){return O+1})};if(C)w();else{v.current+=1;var x=v.current;Promise.resolve().then(function(){x===v.current&&w()})}}function y(C,w){var x=e(C);d.current.get(x),w?(d.current.set(x,w),h()):d.current.delete(x)}return f.useEffect(function(){return p},[]),[y,h,m.current,s]}var i1=14/15;function y6(e,t,r){var a=f.useRef(!1),i=f.useRef(0),s=f.useRef(0),c=f.useRef(null),d=f.useRef(null),m,v=function(C){if(a.current){var w=Math.ceil(C.touches[0].pageX),x=Math.ceil(C.touches[0].pageY),S=i.current-w,E=s.current-x,O=Math.abs(S)>Math.abs(E);O?i.current=w:s.current=x;var R=r(O,O?S:E,!1,C);R&&C.preventDefault(),clearInterval(d.current),R&&(d.current=setInterval(function(){O?S*=i1:E*=i1;var _=Math.floor(O?S:E);(!r(O,_,!0)||Math.abs(_)<=.1)&&clearInterval(d.current)},16))}},p=function(){a.current=!1,m()},h=function(C){m(),C.touches.length===1&&!a.current&&(a.current=!0,i.current=Math.ceil(C.touches[0].pageX),s.current=Math.ceil(C.touches[0].pageY),c.current=C.target,c.current.addEventListener("touchmove",v,{passive:!1}),c.current.addEventListener("touchend",p,{passive:!0}))};m=function(){c.current&&(c.current.removeEventListener("touchmove",v),c.current.removeEventListener("touchend",p))},nn(function(){return e&&t.current.addEventListener("touchstart",h,{passive:!0}),function(){var y;(y=t.current)===null||y===void 0||y.removeEventListener("touchstart",h),m(),clearInterval(d.current)}},[e])}function l1(e){return Math.floor(Math.pow(e,.5))}function Np(e,t){var r="touches"in e?e.touches[0]:e;return r[t?"pageX":"pageY"]-window[t?"scrollX":"scrollY"]}function S6(e,t,r){f.useEffect(function(){var a=t.current;if(e&&a){var i=!1,s,c,d=function(){bn.cancel(s)},m=function y(){d(),s=bn(function(){r(c),y()})},v=function(){i=!1,d()},p=function(C){if(!(C.target.draggable||C.button!==0)){var w=C;w._virtualHandled||(w._virtualHandled=!0,i=!0)}},h=function(C){if(i){var w=Np(C,!1),x=a.getBoundingClientRect(),S=x.top,E=x.bottom;if(w<=S){var O=S-w;c=-l1(O),m()}else if(w>=E){var R=w-E;c=l1(R),m()}else d()}};return a.addEventListener("mousedown",p),a.ownerDocument.addEventListener("mouseup",v),a.ownerDocument.addEventListener("mousemove",h),a.ownerDocument.addEventListener("dragend",v),function(){a.removeEventListener("mousedown",p),a.ownerDocument.removeEventListener("mouseup",v),a.ownerDocument.removeEventListener("mousemove",h),a.ownerDocument.removeEventListener("dragend",v),d()}}},[e])}var C6=10;function x6(e,t,r,a,i,s,c,d){var m=f.useRef(),v=f.useState(null),p=oe(v,2),h=p[0],y=p[1];return nn(function(){if(h&&h.times=0;H-=1){var Q=i(t[H]),z=r.get(Q);if(z===void 0){O=!0;break}if(V-=z,V<=0)break}switch(T){case"top":_=N-S;break;case"bottom":_=A-E+S;break;default:{var F=e.current.scrollTop,q=F+E;Nq&&(R="bottom")}}_!==null&&c(_),_!==h.lastTop&&(O=!0)}O&&y(J(J({},h),{},{times:h.times+1,targetAlign:R,lastTop:_}))}},[h,e.current]),function(C){if(C==null){d();return}if(bn.cancel(m.current),typeof C=="number")c(C);else if(C&&pt(C)==="object"){var w,x=C.align;"index"in C?w=C.index:w=t.findIndex(function(O){return i(O)===C.key});var S=C.offset,E=S===void 0?0:S;y({times:0,index:w,offset:E,originAlign:x})}}}var s1=f.forwardRef(function(e,t){var r=e.prefixCls,a=e.rtl,i=e.scrollOffset,s=e.scrollRange,c=e.onStartMove,d=e.onStopMove,m=e.onScroll,v=e.horizontal,p=e.spinSize,h=e.containerSize,y=e.style,C=e.thumbStyle,w=e.showScrollBar,x=f.useState(!1),S=oe(x,2),E=S[0],O=S[1],R=f.useState(null),_=oe(R,2),T=_[0],M=_[1],N=f.useState(null),A=oe(N,2),j=A[0],I=A[1],L=!a,B=f.useRef(),V=f.useRef(),H=f.useState(w),Q=oe(H,2),z=Q[0],F=Q[1],q=f.useRef(),ee=function(){w===!0||w===!1||(clearTimeout(q.current),F(!0),q.current=setTimeout(function(){F(!1)},3e3))},Z=s-h||0,D=h-p||0,U=f.useMemo(function(){if(i===0||Z===0)return 0;var he=i/Z;return he*D},[i,Z,D]),G=function(se){se.stopPropagation(),se.preventDefault()},W=f.useRef({top:U,dragging:E,pageY:T,startTop:j});W.current={top:U,dragging:E,pageY:T,startTop:j};var X=function(se){O(!0),M(Np(se,v)),I(W.current.top),c(),se.stopPropagation(),se.preventDefault()};f.useEffect(function(){var he=function(ge){ge.preventDefault()},se=B.current,ye=V.current;return se.addEventListener("touchstart",he,{passive:!1}),ye.addEventListener("touchstart",X,{passive:!1}),function(){se.removeEventListener("touchstart",he),ye.removeEventListener("touchstart",X)}},[]);var Y=f.useRef();Y.current=Z;var ie=f.useRef();ie.current=D,f.useEffect(function(){if(E){var he,se=function(ge){var te=W.current,xe=te.dragging,Ee=te.pageY,_e=te.startTop;bn.cancel(he);var je=B.current.getBoundingClientRect(),Ae=h/(v?je.width:je.height);if(xe){var He=(Np(ge,v)-Ee)*Ae,Ie=_e;!L&&v?Ie-=He:Ie+=He;var Ce=Y.current,Xe=ie.current,at=Xe?Ie/Xe:0,mt=Math.ceil(at*Ce);mt=Math.max(mt,0),mt=Math.min(mt,Ce),he=bn(function(){m(mt,v)})}},ye=function(){O(!1),d()};return window.addEventListener("mousemove",se,{passive:!0}),window.addEventListener("touchmove",se,{passive:!0}),window.addEventListener("mouseup",ye,{passive:!0}),window.addEventListener("touchend",ye,{passive:!0}),function(){window.removeEventListener("mousemove",se),window.removeEventListener("touchmove",se),window.removeEventListener("mouseup",ye),window.removeEventListener("touchend",ye),bn.cancel(he)}}},[E]),f.useEffect(function(){return ee(),function(){clearTimeout(q.current)}},[i]),f.useImperativeHandle(t,function(){return{delayHidden:ee}});var ce="".concat(r,"-scrollbar"),fe={position:"absolute",visibility:z?null:"hidden"},Te={position:"absolute",borderRadius:99,background:"var(--rc-virtual-list-scrollbar-bg, rgba(0, 0, 0, 0.5))",cursor:"pointer",userSelect:"none"};return v?(Object.assign(fe,{height:8,left:0,right:0,bottom:0}),Object.assign(Te,K({height:"100%",width:p},L?"left":"right",U))):(Object.assign(fe,K({width:8,top:0,bottom:0},L?"right":"left",0)),Object.assign(Te,{width:"100%",height:p,top:U})),f.createElement("div",{ref:B,className:ae(ce,K(K(K({},"".concat(ce,"-horizontal"),v),"".concat(ce,"-vertical"),!v),"".concat(ce,"-visible"),z)),style:J(J({},fe),y),onMouseDown:G,onMouseMove:ee},f.createElement("div",{ref:V,className:ae("".concat(ce,"-thumb"),K({},"".concat(ce,"-thumb-moving"),E)),style:J(J({},Te),C),onMouseDown:X}))}),E6=20;function c1(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=e/t*e;return isNaN(r)&&(r=0),r=Math.max(r,E6),Math.floor(r)}var w6=["prefixCls","className","height","itemHeight","fullHeight","style","data","children","itemKey","virtual","direction","scrollWidth","component","onScroll","onVirtualScroll","onVisibleChange","innerProps","extraRender","styles","showScrollBar"],O6=[],$6={overflowY:"auto",overflowAnchor:"none"};function R6(e,t){var r=e.prefixCls,a=r===void 0?"rc-virtual-list":r,i=e.className,s=e.height,c=e.itemHeight,d=e.fullHeight,m=d===void 0?!0:d,v=e.style,p=e.data,h=e.children,y=e.itemKey,C=e.virtual,w=e.direction,x=e.scrollWidth,S=e.component,E=S===void 0?"div":S,O=e.onScroll,R=e.onVirtualScroll,_=e.onVisibleChange,T=e.innerProps,M=e.extraRender,N=e.styles,A=e.showScrollBar,j=A===void 0?"optional":A,I=zt(e,w6),L=f.useCallback(function(Pe){return typeof y=="function"?y(Pe):Pe==null?void 0:Pe[y]},[y]),B=b6(L),V=oe(B,4),H=V[0],Q=V[1],z=V[2],F=V[3],q=!!(C!==!1&&s&&c),ee=f.useMemo(function(){return Object.values(z.maps).reduce(function(Pe,qe){return Pe+qe},0)},[z.id,z.maps]),Z=q&&p&&(Math.max(c*p.length,ee)>s||!!x),D=w==="rtl",U=ae(a,K({},"".concat(a,"-rtl"),D),i),G=p||O6,W=f.useRef(),X=f.useRef(),Y=f.useRef(),ie=f.useState(0),ce=oe(ie,2),fe=ce[0],Te=ce[1],he=f.useState(0),se=oe(he,2),ye=se[0],be=se[1],ge=f.useState(!1),te=oe(ge,2),xe=te[0],Ee=te[1],_e=function(){Ee(!0)},je=function(){Ee(!1)},Ae={getKey:L};function He(Pe){Te(function(qe){var yt;typeof Pe=="function"?yt=Pe(qe):yt=Pe;var $t=Ft(yt);return W.current.scrollTop=$t,$t})}var Ie=f.useRef({start:0,end:G.length}),Ce=f.useRef(),Xe=v6(G,L),at=oe(Xe,1),mt=at[0];Ce.current=mt;var ke=f.useMemo(function(){if(!q)return{scrollHeight:void 0,start:0,end:G.length-1,offset:void 0};if(!Z){var Pe;return{scrollHeight:((Pe=X.current)===null||Pe===void 0?void 0:Pe.offsetHeight)||0,start:0,end:G.length-1,offset:void 0}}for(var qe=0,yt,$t,Ve,Je=G.length,Ct=0;Ct=fe&&yt===void 0&&(yt=Ct,$t=qe),Mt>fe+s&&Ve===void 0&&(Ve=Ct),qe=Mt}return yt===void 0&&(yt=0,$t=0,Ve=Math.ceil(s/c)),Ve===void 0&&(Ve=G.length-1),Ve=Math.min(Ve+1,G.length-1),{scrollHeight:qe,start:yt,end:Ve,offset:$t}},[Z,q,fe,G,F,s]),We=ke.scrollHeight,ct=ke.start,Qe=ke.end,ut=ke.offset;Ie.current.start=ct,Ie.current.end=Qe,f.useLayoutEffect(function(){var Pe=z.getRecord();if(Pe.size===1){var qe=Array.from(Pe.keys())[0],yt=Pe.get(qe),$t=G[ct];if($t&&yt===void 0){var Ve=L($t);if(Ve===qe){var Je=z.get(qe),Ct=Je-c;He(function(At){return At+Ct})}}}z.resetRecord()},[We]);var Ye=f.useState({width:0,height:s}),ze=oe(Ye,2),Ke=ze[0],Ne=ze[1],Ge=function(qe){Ne({width:qe.offsetWidth,height:qe.offsetHeight})},_t=f.useRef(),gt=f.useRef(),Ht=f.useMemo(function(){return c1(Ke.width,x)},[Ke.width,x]),qt=f.useMemo(function(){return c1(Ke.height,We)},[Ke.height,We]),fn=We-s,en=f.useRef(fn);en.current=fn;function Ft(Pe){var qe=Pe;return Number.isNaN(en.current)||(qe=Math.min(qe,en.current)),qe=Math.max(qe,0),qe}var Rt=fe<=0,xt=fe>=fn,Gt=ye<=0,Bt=ye>=x,Ze=Xw(Rt,xt,Gt,Bt),Et=function(){return{x:D?-ye:ye,y:fe}},st=f.useRef(Et()),De=Gn(function(Pe){if(R){var qe=J(J({},Et()),Pe);(st.current.x!==qe.x||st.current.y!==qe.y)&&(R(qe),st.current=qe)}});function $e(Pe,qe){var yt=Pe;qe?(Bo.flushSync(function(){be(yt)}),De()):He(yt)}function Re(Pe){var qe=Pe.currentTarget.scrollTop;qe!==fe&&He(qe),O==null||O(Pe),De()}var Be=function(qe){var yt=qe,$t=x?x-Ke.width:0;return yt=Math.max(yt,0),yt=Math.min(yt,$t),yt},tt=Gn(function(Pe,qe){qe?(Bo.flushSync(function(){be(function(yt){var $t=yt+(D?-Pe:Pe);return Be($t)})}),De()):He(function(yt){var $t=yt+Pe;return $t})}),nt=g6(q,Rt,xt,Gt,Bt,!!x,tt),Ot=oe(nt,2),bt=Ot[0],vt=Ot[1];y6(q,W,function(Pe,qe,yt,$t){var Ve=$t;return Ze(Pe,qe,yt)?!1:!Ve||!Ve._virtualHandled?(Ve&&(Ve._virtualHandled=!0),bt({preventDefault:function(){},deltaX:Pe?qe:0,deltaY:Pe?0:qe}),!0):!1}),S6(Z,W,function(Pe){He(function(qe){return qe+Pe})}),nn(function(){function Pe(yt){var $t=Rt&&yt.detail<0,Ve=xt&&yt.detail>0;q&&!$t&&!Ve&&yt.preventDefault()}var qe=W.current;return qe.addEventListener("wheel",bt,{passive:!1}),qe.addEventListener("DOMMouseScroll",vt,{passive:!0}),qe.addEventListener("MozMousePixelScroll",Pe,{passive:!1}),function(){qe.removeEventListener("wheel",bt),qe.removeEventListener("DOMMouseScroll",vt),qe.removeEventListener("MozMousePixelScroll",Pe)}},[q,Rt,xt]),nn(function(){if(x){var Pe=Be(ye);be(Pe),De({x:Pe})}},[Ke.width,x]);var Nt=function(){var qe,yt;(qe=_t.current)===null||qe===void 0||qe.delayHidden(),(yt=gt.current)===null||yt===void 0||yt.delayHidden()},dn=x6(W,G,z,c,L,function(){return Q(!0)},He,Nt);f.useImperativeHandle(t,function(){return{nativeElement:Y.current,getScrollInfo:Et,scrollTo:function(qe){function yt($t){return $t&&pt($t)==="object"&&("left"in $t||"top"in $t)}yt(qe)?(qe.left!==void 0&&be(Be(qe.left)),dn(qe.top)):dn(qe)}}}),nn(function(){if(_){var Pe=G.slice(ct,Qe+1);_(Pe,G)}},[ct,Qe,G]);var vn=p6(G,L,z,c),yn=M==null?void 0:M({start:ct,end:Qe,virtual:Z,offsetX:ye,offsetY:ut,rtl:D,getSize:vn}),Nn=d6(G,ct,Qe,x,ye,H,h,Ae),Vt=null;s&&(Vt=J(K({},m?"height":"maxHeight",s),$6),q&&(Vt.overflowY="hidden",x&&(Vt.overflowX="hidden"),xe&&(Vt.pointerEvents="none")));var Jt={};return D&&(Jt.dir="rtl"),f.createElement("div",Le({ref:Y,style:J(J({},v),{},{position:"relative"}),className:U},Jt,I),f.createElement(pa,{onResize:Ge},f.createElement(E,{className:"".concat(a,"-holder"),style:Vt,ref:W,onScroll:Re,onMouseEnter:Nt},f.createElement(Kw,{prefixCls:a,height:We,offsetX:ye,offsetY:ut,scrollWidth:x,onInnerResize:Q,ref:X,innerProps:T,rtl:D,extra:yn},Nn))),Z&&We>s&&f.createElement(s1,{ref:_t,prefixCls:a,scrollOffset:fe,scrollRange:We,rtl:D,onScroll:$e,onStartMove:_e,onStopMove:je,spinSize:qt,containerSize:Ke.height,style:N==null?void 0:N.verticalScrollBar,thumbStyle:N==null?void 0:N.verticalScrollBarThumb,showScrollBar:j}),Z&&x>Ke.width&&f.createElement(s1,{ref:gt,prefixCls:a,scrollOffset:ye,scrollRange:x,rtl:D,onScroll:$e,onStartMove:_e,onStopMove:je,spinSize:Ht,containerSize:Ke.width,horizontal:!0,style:N==null?void 0:N.horizontalScrollBar,thumbStyle:N==null?void 0:N.horizontalScrollBarThumb,showScrollBar:j}))}var Yw=f.forwardRef(R6);Yw.displayName="List";function T6(){return/(mac\sos|macintosh)/i.test(navigator.appVersion)}var _6=["disabled","title","children","style","className"];function u1(e){return typeof e=="string"||typeof e=="number"}var M6=function(t,r){var a=vj(),i=a.prefixCls,s=a.id,c=a.open,d=a.multiple,m=a.mode,v=a.searchValue,p=a.toggleOpen,h=a.notFoundContent,y=a.onPopupScroll,C=f.useContext(fh),w=C.maxCount,x=C.flattenOptions,S=C.onActiveValue,E=C.defaultActiveFirstOption,O=C.onSelect,R=C.menuItemSelectedIcon,_=C.rawValues,T=C.fieldNames,M=C.virtual,N=C.direction,A=C.listHeight,j=C.listItemHeight,I=C.optionRender,L="".concat(i,"-item"),B=pc(function(){return x},[c,x],function(he,se){return se[0]&&he[1]!==se[1]}),V=f.useRef(null),H=f.useMemo(function(){return d&&Tp(w)&&(_==null?void 0:_.size)>=w},[d,w,_==null?void 0:_.size]),Q=function(se){se.preventDefault()},z=function(se){var ye;(ye=V.current)===null||ye===void 0||ye.scrollTo(typeof se=="number"?{index:se}:se)},F=f.useCallback(function(he){return m==="combobox"?!1:_.has(he)},[m,Ue(_).toString(),_.size]),q=function(se){for(var ye=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,be=B.length,ge=0;ge1&&arguments[1]!==void 0?arguments[1]:!1;U(se);var be={source:ye?"keyboard":"mouse"},ge=B[se];if(!ge){S(null,-1,be);return}S(ge.value,se,be)};f.useEffect(function(){G(E!==!1?q(0):-1)},[B.length,v]);var W=f.useCallback(function(he){return m==="combobox"?String(he).toLowerCase()===v.toLowerCase():_.has(he)},[m,v,Ue(_).toString(),_.size]);f.useEffect(function(){var he=setTimeout(function(){if(!d&&c&&_.size===1){var ye=Array.from(_)[0],be=B.findIndex(function(ge){var te=ge.data;return v?String(te.value).startsWith(v):te.value===ye});be!==-1&&(G(be),z(be))}});if(c){var se;(se=V.current)===null||se===void 0||se.scrollTo(void 0)}return function(){return clearTimeout(he)}},[c,v]);var X=function(se){se!==void 0&&O(se,{selected:!_.has(se)}),d||p(!1)};if(f.useImperativeHandle(r,function(){return{onKeyDown:function(se){var ye=se.which,be=se.ctrlKey;switch(ye){case rt.N:case rt.P:case rt.UP:case rt.DOWN:{var ge=0;if(ye===rt.UP?ge=-1:ye===rt.DOWN?ge=1:T6()&&be&&(ye===rt.N?ge=1:ye===rt.P&&(ge=-1)),ge!==0){var te=q(D+ge,ge);z(te),G(te,!0)}break}case rt.TAB:case rt.ENTER:{var xe,Ee=B[D];Ee&&!(Ee!=null&&(xe=Ee.data)!==null&&xe!==void 0&&xe.disabled)&&!H?X(Ee.value):X(void 0),c&&se.preventDefault();break}case rt.ESC:p(!1),c&&se.stopPropagation()}},onKeyUp:function(){},scrollTo:function(se){z(se)}}}),B.length===0)return f.createElement("div",{role:"listbox",id:"".concat(s,"_list"),className:"".concat(L,"-empty"),onMouseDown:Q},h);var Y=Object.keys(T).map(function(he){return T[he]}),ie=function(se){return se.label};function ce(he,se){var ye=he.group;return{role:ye?"presentation":"option",id:"".concat(s,"_list_").concat(se)}}var fe=function(se){var ye=B[se];if(!ye)return null;var be=ye.data||{},ge=be.value,te=ye.group,xe=ro(be,!0),Ee=ie(ye);return ye?f.createElement("div",Le({"aria-label":typeof Ee=="string"&&!te?Ee:null},xe,{key:se},ce(ye,se),{"aria-selected":W(ge)}),ge):null},Te={role:"listbox",id:"".concat(s,"_list")};return f.createElement(f.Fragment,null,M&&f.createElement("div",Le({},Te,{style:{height:0,width:0,overflow:"hidden"}}),fe(D-1),fe(D),fe(D+1)),f.createElement(Yw,{itemKey:"key",ref:V,data:B,height:A,itemHeight:j,fullHeight:!1,onMouseDown:Q,onScroll:y,virtual:M,direction:N,innerProps:M?null:Te},function(he,se){var ye=he.group,be=he.groupOption,ge=he.data,te=he.label,xe=he.value,Ee=ge.key;if(ye){var _e,je=(_e=ge.title)!==null&&_e!==void 0?_e:u1(te)?te.toString():void 0;return f.createElement("div",{className:ae(L,"".concat(L,"-group"),ge.className),title:je},te!==void 0?te:Ee)}var Ae=ge.disabled,He=ge.title;ge.children;var Ie=ge.style,Ce=ge.className,Xe=zt(ge,_6),at=or(Xe,Y),mt=F(xe),ke=Ae||!mt&&H,We="".concat(L,"-option"),ct=ae(L,We,Ce,K(K(K(K({},"".concat(We,"-grouped"),be),"".concat(We,"-active"),D===se&&!ke),"".concat(We,"-disabled"),ke),"".concat(We,"-selected"),mt)),Qe=ie(he),ut=!R||typeof R=="function"||mt,Ye=typeof Qe=="number"?Qe:Qe||xe,ze=u1(Ye)?Ye.toString():void 0;return He!==void 0&&(ze=He),f.createElement("div",Le({},ro(at),M?{}:ce(he,se),{"aria-selected":W(xe),className:ct,title:ze,onMouseMove:function(){D===se||ke||G(se)},onClick:function(){ke||X(xe)},style:Ie}),f.createElement("div",{className:"".concat(We,"-content")},typeof I=="function"?I(he,{index:se}):Ye),f.isValidElement(R)||mt,ut&&f.createElement(sd,{className:"".concat(L,"-option-state"),customizeIcon:R,customizeIconProps:{value:xe,disabled:ke,isSelected:mt}},mt?"✓":null))}))},N6=f.forwardRef(M6);const A6=(function(e,t){var r=f.useRef({values:new Map,options:new Map}),a=f.useMemo(function(){var s=r.current,c=s.values,d=s.options,m=e.map(function(h){if(h.label===void 0){var y;return J(J({},h),{},{label:(y=c.get(h.value))===null||y===void 0?void 0:y.label})}return h}),v=new Map,p=new Map;return m.forEach(function(h){v.set(h.value,h),p.set(h.value,t.get(h.value)||d.get(h.value))}),r.current.values=v,r.current.options=p,m},[e,t]),i=f.useCallback(function(s){return t.get(s)||r.current.options.get(s)},[t]);return[a,i]});function og(e,t){return qw(e).join("").toUpperCase().includes(t)}const z6=(function(e,t,r,a,i){return f.useMemo(function(){if(!r||a===!1)return e;var s=t.options,c=t.label,d=t.value,m=[],v=typeof a=="function",p=r.toUpperCase(),h=v?a:function(C,w){return i?og(w[i],p):w[s]?og(w[c!=="children"?c:"label"],p):og(w[d],p)},y=v?function(C){return _p(C)}:function(C){return C};return e.forEach(function(C){if(C[s]){var w=h(r,y(C));if(w)m.push(C);else{var x=C[s].filter(function(S){return h(r,y(S))});x.length&&m.push(J(J({},C),{},K({},s,x)))}return}h(r,y(C))&&m.push(C)}),m},[e,a,i,r,t])});var f1=0,j6=Rr();function D6(){var e;return j6?(e=f1,f1+=1):e="TEST_OR_SSR",e}function I6(e){var t=f.useState(),r=oe(t,2),a=r[0],i=r[1];return f.useEffect(function(){i("rc_select_".concat(D6()))},[]),e||a}var P6=["children","value"],B6=["children"];function L6(e){var t=e,r=t.key,a=t.props,i=a.children,s=a.value,c=zt(a,P6);return J({key:r,value:s!==void 0?s:r,children:i},c)}function Qw(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return kr(e).map(function(r,a){if(!f.isValidElement(r)||!r.type)return null;var i=r,s=i.type.isSelectOptGroup,c=i.key,d=i.props,m=d.children,v=zt(d,B6);return t||!s?L6(r):J(J({key:"__RC_SELECT_GRP__".concat(c===null?a:c,"__"),label:c},v),{},{options:Qw(m)})}).filter(function(r){return r})}var H6=function(t,r,a,i,s){return f.useMemo(function(){var c=t,d=!t;d&&(c=Qw(r));var m=new Map,v=new Map,p=function(C,w,x){x&&typeof x=="string"&&C.set(w[x],w)},h=function y(C){for(var w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,x=0;x0?De(Be.options):Be.options}):Be})},Ye=f.useMemo(function(){return O?ut(Qe):Qe},[Qe,O,Te]),ze=f.useMemo(function(){return o6(Ye,{fieldNames:ie,childrenAsData:X})},[Ye,ie,X]),Ke=function($e){var Re=te($e);if(je(Re),Z&&(Re.length!==Ce.length||Re.some(function(nt,Ot){var bt;return((bt=Ce[Ot])===null||bt===void 0?void 0:bt.value)!==(nt==null?void 0:nt.value)}))){var Be=ee?Re:Re.map(function(nt){return nt.value}),tt=Re.map(function(nt){return _p(Xe(nt.value))});Z(W?Be:Be[0],W?tt:tt[0])}},Ne=f.useState(null),Ge=oe(Ne,2),_t=Ge[0],gt=Ge[1],Ht=f.useState(0),qt=oe(Ht,2),fn=qt[0],en=qt[1],Ft=A!==void 0?A:a!=="combobox",Rt=f.useCallback(function(De,$e){var Re=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Be=Re.source,tt=Be===void 0?"keyboard":Be;en($e),c&&a==="combobox"&&De!==null&&tt==="keyboard"&>(String(De))},[c,a]),xt=function($e,Re,Be){var tt=function(){var Vt,Jt=Xe($e);return[ee?{label:Jt==null?void 0:Jt[ie.label],value:$e,key:(Vt=Jt==null?void 0:Jt.key)!==null&&Vt!==void 0?Vt:$e}:$e,_p(Jt)]};if(Re&&C){var nt=tt(),Ot=oe(nt,2),bt=Ot[0],vt=Ot[1];C(bt,vt)}else if(!Re&&w&&Be!=="clear"){var Nt=tt(),dn=oe(Nt,2),vn=dn[0],yn=dn[1];w(vn,yn)}},Gt=d1(function(De,$e){var Re,Be=W?$e.selected:!0;Be?Re=W?[].concat(Ue(Ce),[De]):[De]:Re=Ce.filter(function(tt){return tt.value!==De}),Ke(Re),xt(De,Be),a==="combobox"?gt(""):(!Mp||y)&&(he(""),gt(""))}),Bt=function($e,Re){Ke($e);var Be=Re.type,tt=Re.values;(Be==="remove"||Be==="clear")&&tt.forEach(function(nt){xt(nt.value,!1,Be)})},Ze=function($e,Re){if(he($e),gt(null),Re.source==="submit"){var Be=($e||"").trim();if(Be){var tt=Array.from(new Set([].concat(Ue(mt),[Be])));Ke(tt),xt(Be,!0),he("")}return}Re.source!=="blur"&&(a==="combobox"&&Ke($e),p==null||p($e))},Et=function($e){var Re=$e;a!=="tags"&&(Re=$e.map(function(tt){var nt=be.get(tt);return nt==null?void 0:nt.value}).filter(function(tt){return tt!==void 0}));var Be=Array.from(new Set([].concat(Ue(mt),Ue(Re))));Ke(Be),Be.forEach(function(tt){xt(tt,!0)})},st=f.useMemo(function(){var De=I!==!1&&S!==!1;return J(J({},se),{},{flattenOptions:ze,onActiveValue:Rt,defaultActiveFirstOption:Ft,onSelect:Gt,menuItemSelectedIcon:j,rawValues:mt,fieldNames:ie,virtual:De,direction:L,listHeight:V,listItemHeight:Q,childrenAsData:X,maxCount:D,optionRender:M})},[D,se,ze,Rt,Ft,Gt,j,mt,ie,I,S,L,V,Q,X,M]);return f.createElement(fh.Provider,{value:st},f.createElement(u6,Le({},U,{id:G,prefixCls:s,ref:t,omitDomProps:V6,mode:a,displayValues:at,onDisplayValuesChange:Bt,direction:L,searchValue:Te,onSearch:Ze,autoClearSearchValue:y,onSearchSplit:Et,dropdownMatchSelectWidth:S,OptionList:N6,emptyOptions:!ze.length,activeValue:_t,activeDescendantId:"".concat(G,"_list_").concat(fn)})))}),vh=q6;vh.Option=mh;vh.OptGroup=dh;function Mf(e,t,r){return ae({[`${e}-status-success`]:t==="success",[`${e}-status-warning`]:t==="warning",[`${e}-status-error`]:t==="error",[`${e}-status-validating`]:t==="validating",[`${e}-has-feedback`]:r})}const ud=(e,t)=>t||e,G6=()=>{const[,e]=ta(),[t]=zl("Empty"),a=new On(e.colorBgBase).toHsl().l<.5?{opacity:.65}:{};return f.createElement("svg",{style:a,width:"184",height:"152",viewBox:"0 0 184 152",xmlns:"http://www.w3.org/2000/svg"},f.createElement("title",null,(t==null?void 0:t.description)||"Empty"),f.createElement("g",{fill:"none",fillRule:"evenodd"},f.createElement("g",{transform:"translate(24 31.67)"},f.createElement("ellipse",{fillOpacity:".8",fill:"#F5F5F7",cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"}),f.createElement("path",{d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z",fill:"#AEB8C2"}),f.createElement("path",{d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",fill:"url(#linearGradient-1)",transform:"translate(13.56)"}),f.createElement("path",{d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z",fill:"#F5F5F7"}),f.createElement("path",{d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z",fill:"#DCE0E6"})),f.createElement("path",{d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z",fill:"#DCE0E6"}),f.createElement("g",{transform:"translate(149.65 15.383)",fill:"#FFF"},f.createElement("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"}),f.createElement("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"}))))},W6=()=>{const[,e]=ta(),[t]=zl("Empty"),{colorFill:r,colorFillTertiary:a,colorFillQuaternary:i,colorBgContainer:s}=e,{borderColor:c,shadowColor:d,contentColor:m}=f.useMemo(()=>({borderColor:new On(r).onBackground(s).toHexString(),shadowColor:new On(a).onBackground(s).toHexString(),contentColor:new On(i).onBackground(s).toHexString()}),[r,a,i,s]);return f.createElement("svg",{width:"64",height:"41",viewBox:"0 0 64 41",xmlns:"http://www.w3.org/2000/svg"},f.createElement("title",null,(t==null?void 0:t.description)||"Empty"),f.createElement("g",{transform:"translate(0 1)",fill:"none",fillRule:"evenodd"},f.createElement("ellipse",{fill:d,cx:"32",cy:"33",rx:"32",ry:"7"}),f.createElement("g",{fillRule:"nonzero",stroke:c},f.createElement("path",{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"}),f.createElement("path",{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:m}))))},K6=e=>{const{componentCls:t,margin:r,marginXS:a,marginXL:i,fontSize:s,lineHeight:c}=e;return{[t]:{marginInline:a,fontSize:s,lineHeight:c,textAlign:"center",[`${t}-image`]:{height:e.emptyImgHeight,marginBottom:a,opacity:e.opacityImage,img:{height:"100%"},svg:{maxWidth:"100%",height:"100%",margin:"auto"}},[`${t}-description`]:{color:e.colorTextDescription},[`${t}-footer`]:{marginTop:r},"&-normal":{marginBlock:i,color:e.colorTextDescription,[`${t}-description`]:{color:e.colorTextDescription},[`${t}-image`]:{height:e.emptyImgHeightMD}},"&-small":{marginBlock:a,color:e.colorTextDescription,[`${t}-image`]:{height:e.emptyImgHeightSM}}}}},X6=_n("Empty",e=>{const{componentCls:t,controlHeightLG:r,calc:a}=e,i=un(e,{emptyImgCls:`${t}-img`,emptyImgHeight:a(r).mul(2.5).equal(),emptyImgHeightMD:r,emptyImgHeightSM:a(r).mul(.875).equal()});return K6(i)});var Y6=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var t;const{className:r,rootClassName:a,prefixCls:i,image:s,description:c,children:d,imageStyle:m,style:v,classNames:p,styles:h}=e,y=Y6(e,["className","rootClassName","prefixCls","image","description","children","imageStyle","style","classNames","styles"]),{getPrefixCls:C,direction:w,className:x,style:S,classNames:E,styles:O,image:R}=Lr("empty"),_=C("empty",i),[T,M,N]=X6(_),[A]=zl("Empty"),j=typeof c<"u"?c:A==null?void 0:A.description,I=typeof j=="string"?j:"empty",L=(t=s??R)!==null&&t!==void 0?t:Zw;let B=null;return typeof L=="string"?B=f.createElement("img",{draggable:!1,alt:I,src:L}):B=L,T(f.createElement("div",Object.assign({className:ae(M,N,_,x,{[`${_}-normal`]:L===Jw,[`${_}-rtl`]:w==="rtl"},r,a,E.root,p==null?void 0:p.root),style:Object.assign(Object.assign(Object.assign(Object.assign({},O.root),S),h==null?void 0:h.root),v)},y),f.createElement("div",{className:ae(`${_}-image`,E.image,p==null?void 0:p.image),style:Object.assign(Object.assign(Object.assign({},m),O.image),h==null?void 0:h.image)},B),j&&f.createElement("div",{className:ae(`${_}-description`,E.description,p==null?void 0:p.description),style:Object.assign(Object.assign({},O.description),h==null?void 0:h.description)},j),d&&f.createElement("div",{className:ae(`${_}-footer`,E.footer,p==null?void 0:p.footer),style:Object.assign(Object.assign({},O.footer),h==null?void 0:h.footer)},d)))};si.PRESENTED_IMAGE_DEFAULT=Zw;si.PRESENTED_IMAGE_SIMPLE=Jw;const Q6=e=>{const{componentName:t}=e,{getPrefixCls:r}=f.useContext(It),a=r("empty");switch(t){case"Table":case"List":return ue.createElement(si,{image:si.PRESENTED_IMAGE_SIMPLE});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return ue.createElement(si,{image:si.PRESENTED_IMAGE_SIMPLE,className:`${a}-small`});case"Table.filter":return null;default:return ue.createElement(si,null)}},fd=(e,t,r)=>{var a,i;const{variant:s,[e]:c}=f.useContext(It),d=f.useContext(z4),m=c==null?void 0:c.variant;let v;typeof t<"u"?v=t:r===!1?v="borderless":v=(i=(a=d??m)!==null&&a!==void 0?a:s)!==null&&i!==void 0?i:"outlined";const p=yM.includes(v);return[v,p]},Z6=e=>{const r={overflow:{adjustX:!0,adjustY:!0,shiftY:!0},htmlRegion:e==="scroll"?"scroll":"visible",dynamicInset:!0};return{bottomLeft:Object.assign(Object.assign({},r),{points:["tl","bl"],offset:[0,4]}),bottomRight:Object.assign(Object.assign({},r),{points:["tr","br"],offset:[0,4]}),topLeft:Object.assign(Object.assign({},r),{points:["bl","tl"],offset:[0,-4]}),topRight:Object.assign(Object.assign({},r),{points:["br","tr"],offset:[0,-4]})}};function J6(e,t){return e||Z6(t)}const m1=e=>{const{optionHeight:t,optionFontSize:r,optionLineHeight:a,optionPadding:i}=e;return{position:"relative",display:"block",minHeight:t,padding:i,color:e.colorText,fontWeight:"normal",fontSize:r,lineHeight:a,boxSizing:"border-box"}},k6=e=>{const{antCls:t,componentCls:r}=e,a=`${r}-item`,i=`&${t}-slide-up-enter${t}-slide-up-enter-active`,s=`&${t}-slide-up-appear${t}-slide-up-appear-active`,c=`&${t}-slide-up-leave${t}-slide-up-leave-active`,d=`${r}-dropdown-placement-`,m=`${a}-option-selected`;return[{[`${r}-dropdown`]:Object.assign(Object.assign({},Tr(e)),{position:"absolute",top:-9999,zIndex:e.zIndexPopup,boxSizing:"border-box",padding:e.paddingXXS,overflow:"hidden",fontSize:e.fontSize,fontVariant:"initial",backgroundColor:e.colorBgElevated,borderRadius:e.borderRadiusLG,outline:"none",boxShadow:e.boxShadowSecondary,[` + ${i}${d}bottomLeft, + ${s}${d}bottomLeft + `]:{animationName:yw},[` + ${i}${d}topLeft, + ${s}${d}topLeft, + ${i}${d}topRight, + ${s}${d}topRight + `]:{animationName:Cw},[`${c}${d}bottomLeft`]:{animationName:Sw},[` + ${c}${d}topLeft, + ${c}${d}topRight + `]:{animationName:xw},"&-hidden":{display:"none"},[a]:Object.assign(Object.assign({},m1(e)),{cursor:"pointer",transition:`background ${e.motionDurationSlow} ease`,borderRadius:e.borderRadiusSM,"&-group":{color:e.colorTextDescription,fontSize:e.fontSizeSM,cursor:"default"},"&-option":{display:"flex","&-content":Object.assign({flex:"auto"},hi),"&-state":{flex:"none",display:"flex",alignItems:"center"},[`&-active:not(${a}-option-disabled)`]:{backgroundColor:e.optionActiveBg},[`&-selected:not(${a}-option-disabled)`]:{color:e.optionSelectedColor,fontWeight:e.optionSelectedFontWeight,backgroundColor:e.optionSelectedBg,[`${a}-option-state`]:{color:e.colorPrimary}},"&-disabled":{[`&${a}-option-selected`]:{backgroundColor:e.colorBgContainerDisabled},color:e.colorTextDisabled,cursor:"not-allowed"},"&-grouped":{paddingInlineStart:e.calc(e.controlPaddingHorizontal).mul(2).equal()}},"&-empty":Object.assign(Object.assign({},m1(e)),{color:e.colorTextDisabled})}),[`${m}:has(+ ${m})`]:{borderEndStartRadius:0,borderEndEndRadius:0,[`& + ${m}`]:{borderStartStartRadius:0,borderStartEndRadius:0}},"&-rtl":{direction:"rtl"}})},$f(e,"slide-up"),$f(e,"slide-down"),_C(e,"move-up"),_C(e,"move-down")]},e5=e=>{const{multipleSelectItemHeight:t,paddingXXS:r,lineWidth:a,INTERNAL_FIXED_ITEM_MARGIN:i}=e,s=e.max(e.calc(r).sub(a).equal(),0),c=e.max(e.calc(s).sub(i).equal(),0);return{basePadding:s,containerPadding:c,itemHeight:de(t),itemLineHeight:de(e.calc(t).sub(e.calc(e.lineWidth).mul(2)).equal())}},t5=e=>{const{multipleSelectItemHeight:t,selectHeight:r,lineWidth:a}=e;return e.calc(r).sub(t).div(2).sub(a).equal()},n5=e=>{const{componentCls:t,iconCls:r,borderRadiusSM:a,motionDurationSlow:i,paddingXS:s,multipleItemColorDisabled:c,multipleItemBorderColorDisabled:d,colorIcon:m,colorIconHover:v,INTERNAL_FIXED_ITEM_MARGIN:p}=e;return{[`${t}-selection-overflow`]:{position:"relative",display:"flex",flex:"auto",flexWrap:"wrap",maxWidth:"100%","&-item":{flex:"none",alignSelf:"center",maxWidth:"calc(100% - 4px)",display:"inline-flex"},[`${t}-selection-item`]:{display:"flex",alignSelf:"center",flex:"none",boxSizing:"border-box",maxWidth:"100%",marginBlock:p,borderRadius:a,cursor:"default",transition:`font-size ${i}, line-height ${i}, height ${i}`,marginInlineEnd:e.calc(p).mul(2).equal(),paddingInlineStart:s,paddingInlineEnd:e.calc(s).div(2).equal(),[`${t}-disabled&`]:{color:c,borderColor:d,cursor:"not-allowed"},"&-content":{display:"inline-block",marginInlineEnd:e.calc(s).div(2).equal(),overflow:"hidden",whiteSpace:"pre",textOverflow:"ellipsis"},"&-remove":Object.assign(Object.assign({},Wf()),{display:"inline-flex",alignItems:"center",color:m,fontWeight:"bold",fontSize:10,lineHeight:"inherit",cursor:"pointer",[`> ${r}`]:{verticalAlign:"-0.2em"},"&:hover":{color:v}})}}}},r5=(e,t)=>{const{componentCls:r,INTERNAL_FIXED_ITEM_MARGIN:a}=e,i=`${r}-selection-overflow`,s=e.multipleSelectItemHeight,c=t5(e),d=t?`${r}-${t}`:"",m=e5(e);return{[`${r}-multiple${d}`]:Object.assign(Object.assign({},n5(e)),{[`${r}-selector`]:{display:"flex",alignItems:"center",width:"100%",height:"100%",paddingInline:m.basePadding,paddingBlock:m.containerPadding,borderRadius:e.borderRadius,[`${r}-disabled&`]:{background:e.multipleSelectorBgDisabled,cursor:"not-allowed"},"&:after":{display:"inline-block",width:0,margin:`${de(a)} 0`,lineHeight:de(s),visibility:"hidden",content:'"\\a0"'}},[`${r}-selection-item`]:{height:m.itemHeight,lineHeight:de(m.itemLineHeight)},[`${r}-selection-wrap`]:{alignSelf:"flex-start","&:after":{lineHeight:de(s),marginBlock:a}},[`${r}-prefix`]:{marginInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(m.basePadding).equal()},[`${i}-item + ${i}-item, + ${r}-prefix + ${r}-selection-wrap + `]:{[`${r}-selection-search`]:{marginInlineStart:0},[`${r}-selection-placeholder`]:{insetInlineStart:0}},[`${i}-item-suffix`]:{minHeight:m.itemHeight,marginBlock:a},[`${r}-selection-search`]:{display:"inline-flex",position:"relative",maxWidth:"100%",marginInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(c).equal(),"\n &-input,\n &-mirror\n ":{height:s,fontFamily:e.fontFamily,lineHeight:de(s),transition:`all ${e.motionDurationSlow}`},"&-input":{width:"100%",minWidth:4.1},"&-mirror":{position:"absolute",top:0,insetInlineStart:0,insetInlineEnd:"auto",zIndex:999,whiteSpace:"pre",visibility:"hidden"}},[`${r}-selection-placeholder`]:{position:"absolute",top:"50%",insetInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(m.basePadding).equal(),insetInlineEnd:e.inputPaddingHorizontalBase,transform:"translateY(-50%)",transition:`all ${e.motionDurationSlow}`}})}};function ig(e,t){const{componentCls:r}=e,a=t?`${r}-${t}`:"",i={[`${r}-multiple${a}`]:{fontSize:e.fontSize,[`${r}-selector`]:{[`${r}-show-search&`]:{cursor:"text"}},[` + &${r}-show-arrow ${r}-selector, + &${r}-allow-clear ${r}-selector + `]:{paddingInlineEnd:e.calc(e.fontSizeIcon).add(e.controlPaddingHorizontal).equal()}}};return[r5(e,t),i]}const a5=e=>{const{componentCls:t}=e,r=un(e,{selectHeight:e.controlHeightSM,multipleSelectItemHeight:e.multipleItemHeightSM,borderRadius:e.borderRadiusSM,borderRadiusSM:e.borderRadiusXS}),a=un(e,{fontSize:e.fontSizeLG,selectHeight:e.controlHeightLG,multipleSelectItemHeight:e.multipleItemHeightLG,borderRadius:e.borderRadiusLG,borderRadiusSM:e.borderRadius});return[ig(e),ig(r,"sm"),{[`${t}-multiple${t}-sm`]:{[`${t}-selection-placeholder`]:{insetInline:e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal()},[`${t}-selection-search`]:{marginInlineStart:2}}},ig(a,"lg")]};function lg(e,t){const{componentCls:r,inputPaddingHorizontalBase:a,borderRadius:i}=e,s=e.calc(e.controlHeight).sub(e.calc(e.lineWidth).mul(2)).equal(),c=t?`${r}-${t}`:"";return{[`${r}-single${c}`]:{fontSize:e.fontSize,height:e.controlHeight,[`${r}-selector`]:Object.assign(Object.assign({},Tr(e,!0)),{display:"flex",borderRadius:i,flex:"1 1 auto",[`${r}-selection-wrap:after`]:{lineHeight:de(s)},[`${r}-selection-search`]:{position:"absolute",inset:0,width:"100%","&-input":{width:"100%",WebkitAppearance:"textfield"}},[` + ${r}-selection-item, + ${r}-selection-placeholder + `]:{display:"block",padding:0,lineHeight:de(s),transition:`all ${e.motionDurationSlow}, visibility 0s`,alignSelf:"center"},[`${r}-selection-placeholder`]:{transition:"none",pointerEvents:"none"},[["&:after",`${r}-selection-item:empty:after`,`${r}-selection-placeholder:empty:after`].join(",")]:{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'}}),[` + &${r}-show-arrow ${r}-selection-item, + &${r}-show-arrow ${r}-selection-search, + &${r}-show-arrow ${r}-selection-placeholder + `]:{paddingInlineEnd:e.showArrowPaddingInlineEnd},[`&${r}-open ${r}-selection-item`]:{color:e.colorTextPlaceholder},[`&:not(${r}-customize-input)`]:{[`${r}-selector`]:{width:"100%",height:"100%",alignItems:"center",padding:`0 ${de(a)}`,[`${r}-selection-search-input`]:{height:s,fontSize:e.fontSize},"&:after":{lineHeight:de(s)}}},[`&${r}-customize-input`]:{[`${r}-selector`]:{"&:after":{display:"none"},[`${r}-selection-search`]:{position:"static",width:"100%"},[`${r}-selection-placeholder`]:{position:"absolute",insetInlineStart:0,insetInlineEnd:0,padding:`0 ${de(a)}`,"&:after":{display:"none"}}}}}}}function o5(e){const{componentCls:t}=e,r=e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal();return[lg(e),lg(un(e,{controlHeight:e.controlHeightSM,borderRadius:e.borderRadiusSM}),"sm"),{[`${t}-single${t}-sm`]:{[`&:not(${t}-customize-input)`]:{[`${t}-selector`]:{padding:`0 ${de(r)}`},[`&${t}-show-arrow ${t}-selection-search`]:{insetInlineEnd:e.calc(r).add(e.calc(e.fontSize).mul(1.5)).equal()},[` + &${t}-show-arrow ${t}-selection-item, + &${t}-show-arrow ${t}-selection-placeholder + `]:{paddingInlineEnd:e.calc(e.fontSize).mul(1.5).equal()}}}},lg(un(e,{controlHeight:e.singleItemHeightLG,fontSize:e.fontSizeLG,borderRadius:e.borderRadiusLG}),"lg")]}const i5=e=>{const{fontSize:t,lineHeight:r,lineWidth:a,controlHeight:i,controlHeightSM:s,controlHeightLG:c,paddingXXS:d,controlPaddingHorizontal:m,zIndexPopupBase:v,colorText:p,fontWeightStrong:h,controlItemBgActive:y,controlItemBgHover:C,colorBgContainer:w,colorFillSecondary:x,colorBgContainerDisabled:S,colorTextDisabled:E,colorPrimaryHover:O,colorPrimary:R,controlOutline:_}=e,T=d*2,M=a*2,N=Math.min(i-T,i-M),A=Math.min(s-T,s-M),j=Math.min(c-T,c-M);return{INTERNAL_FIXED_ITEM_MARGIN:Math.floor(d/2),zIndexPopup:v+50,optionSelectedColor:p,optionSelectedFontWeight:h,optionSelectedBg:y,optionActiveBg:C,optionPadding:`${(i-t*r)/2}px ${m}px`,optionFontSize:t,optionLineHeight:r,optionHeight:i,selectorBg:w,clearBg:w,singleItemHeightLG:c,multipleItemBg:x,multipleItemBorderColor:"transparent",multipleItemHeight:N,multipleItemHeightSM:A,multipleItemHeightLG:j,multipleSelectorBgDisabled:S,multipleItemColorDisabled:E,multipleItemBorderColorDisabled:"transparent",showArrowPaddingInlineEnd:Math.ceil(e.fontSize*1.25),hoverBorderColor:O,activeBorderColor:R,activeOutlineColor:_,selectAffixPadding:d}},kw=(e,t)=>{const{componentCls:r,antCls:a,controlOutlineWidth:i}=e;return{[`&:not(${r}-customize-input) ${r}-selector`]:{border:`${de(e.lineWidth)} ${e.lineType} ${t.borderColor}`,background:e.selectorBg},[`&:not(${r}-disabled):not(${r}-customize-input):not(${a}-pagination-size-changer)`]:{[`&:hover ${r}-selector`]:{borderColor:t.hoverBorderHover},[`${r}-focused& ${r}-selector`]:{borderColor:t.activeBorderColor,boxShadow:`0 0 0 ${de(i)} ${t.activeOutlineColor}`,outline:0},[`${r}-prefix`]:{color:t.color}}}},v1=(e,t)=>({[`&${e.componentCls}-status-${t.status}`]:Object.assign({},kw(e,t))}),l5=e=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign({},kw(e,{borderColor:e.colorBorder,hoverBorderHover:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeOutlineColor:e.activeOutlineColor,color:e.colorText})),v1(e,{status:"error",borderColor:e.colorError,hoverBorderHover:e.colorErrorHover,activeBorderColor:e.colorError,activeOutlineColor:e.colorErrorOutline,color:e.colorError})),v1(e,{status:"warning",borderColor:e.colorWarning,hoverBorderHover:e.colorWarningHover,activeBorderColor:e.colorWarning,activeOutlineColor:e.colorWarningOutline,color:e.colorWarning})),{[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.multipleItemBg,border:`${de(e.lineWidth)} ${e.lineType} ${e.multipleItemBorderColor}`}})}),eO=(e,t)=>{const{componentCls:r,antCls:a}=e;return{[`&:not(${r}-customize-input) ${r}-selector`]:{background:t.bg,border:`${de(e.lineWidth)} ${e.lineType} transparent`,color:t.color},[`&:not(${r}-disabled):not(${r}-customize-input):not(${a}-pagination-size-changer)`]:{[`&:hover ${r}-selector`]:{background:t.hoverBg},[`${r}-focused& ${r}-selector`]:{background:e.selectorBg,borderColor:t.activeBorderColor,outline:0}}}},g1=(e,t)=>({[`&${e.componentCls}-status-${t.status}`]:Object.assign({},eO(e,t))}),s5=e=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign({},eO(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.activeBorderColor,color:e.colorText})),g1(e,{status:"error",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,color:e.colorError})),g1(e,{status:"warning",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,color:e.colorWarning})),{[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{borderColor:e.colorBorder,background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.colorBgContainer,border:`${de(e.lineWidth)} ${e.lineType} ${e.colorSplit}`}})}),c5=e=>({"&-borderless":{[`${e.componentCls}-selector`]:{background:"transparent",border:`${de(e.lineWidth)} ${e.lineType} transparent`},[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.multipleItemBg,border:`${de(e.lineWidth)} ${e.lineType} ${e.multipleItemBorderColor}`},[`&${e.componentCls}-status-error`]:{[`${e.componentCls}-prefix, ${e.componentCls}-selection-item`]:{color:e.colorError}},[`&${e.componentCls}-status-warning`]:{[`${e.componentCls}-prefix, ${e.componentCls}-selection-item`]:{color:e.colorWarning}}}}),tO=(e,t)=>{const{componentCls:r,antCls:a}=e;return{[`&:not(${r}-customize-input) ${r}-selector`]:{borderWidth:`${de(e.lineWidth)} 0`,borderStyle:`${e.lineType} none`,borderColor:`transparent transparent ${t.borderColor} transparent`,background:e.selectorBg,borderRadius:0},[`&:not(${r}-disabled):not(${r}-customize-input):not(${a}-pagination-size-changer)`]:{[`&:hover ${r}-selector`]:{borderColor:`transparent transparent ${t.hoverBorderHover} transparent`},[`${r}-focused& ${r}-selector`]:{borderColor:`transparent transparent ${t.activeBorderColor} transparent`,outline:0},[`${r}-prefix`]:{color:t.color}}}},p1=(e,t)=>({[`&${e.componentCls}-status-${t.status}`]:Object.assign({},tO(e,t))}),u5=e=>({"&-underlined":Object.assign(Object.assign(Object.assign(Object.assign({},tO(e,{borderColor:e.colorBorder,hoverBorderHover:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeOutlineColor:e.activeOutlineColor,color:e.colorText})),p1(e,{status:"error",borderColor:e.colorError,hoverBorderHover:e.colorErrorHover,activeBorderColor:e.colorError,activeOutlineColor:e.colorErrorOutline,color:e.colorError})),p1(e,{status:"warning",borderColor:e.colorWarning,hoverBorderHover:e.colorWarningHover,activeBorderColor:e.colorWarning,activeOutlineColor:e.colorWarningOutline,color:e.colorWarning})),{[`&${e.componentCls}-disabled`]:{[`&:not(${e.componentCls}-customize-input) ${e.componentCls}-selector`]:{color:e.colorTextDisabled}},[`&${e.componentCls}-multiple ${e.componentCls}-selection-item`]:{background:e.multipleItemBg,border:`${de(e.lineWidth)} ${e.lineType} ${e.multipleItemBorderColor}`}})}),f5=e=>({[e.componentCls]:Object.assign(Object.assign(Object.assign(Object.assign({},l5(e)),s5(e)),c5(e)),u5(e))}),d5=e=>{const{componentCls:t}=e;return{position:"relative",transition:`all ${e.motionDurationMid} ${e.motionEaseInOut}`,input:{cursor:"pointer"},[`${t}-show-search&`]:{cursor:"text",input:{cursor:"auto",color:"inherit",height:"100%"}},[`${t}-disabled&`]:{cursor:"not-allowed",input:{cursor:"not-allowed"}}}},m5=e=>{const{componentCls:t}=e;return{[`${t}-selection-search-input`]:{margin:0,padding:0,background:"transparent",border:"none",outline:"none",appearance:"none",fontFamily:"inherit","&::-webkit-search-cancel-button":{display:"none",appearance:"none"}}}},v5=e=>{const{antCls:t,componentCls:r,inputPaddingHorizontalBase:a,iconCls:i}=e,s={[`${r}-clear`]:{opacity:1,background:e.colorBgBase,borderRadius:"50%"}};return{[r]:Object.assign(Object.assign({},Tr(e)),{position:"relative",display:"inline-flex",cursor:"pointer",[`&:not(${r}-customize-input) ${r}-selector`]:Object.assign(Object.assign({},d5(e)),m5(e)),[`${r}-selection-item`]:Object.assign(Object.assign({flex:1,fontWeight:"normal",position:"relative",userSelect:"none"},hi),{[`> ${t}-typography`]:{display:"inline"}}),[`${r}-selection-placeholder`]:Object.assign(Object.assign({},hi),{flex:1,color:e.colorTextPlaceholder,pointerEvents:"none"}),[`${r}-arrow`]:Object.assign(Object.assign({},Wf()),{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:a,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,lineHeight:1,textAlign:"center",pointerEvents:"none",display:"flex",alignItems:"center",transition:`opacity ${e.motionDurationSlow} ease`,[i]:{verticalAlign:"top",transition:`transform ${e.motionDurationSlow}`,"> svg":{verticalAlign:"top"},[`&:not(${r}-suffix)`]:{pointerEvents:"auto"}},[`${r}-disabled &`]:{cursor:"not-allowed"},"> *:not(:last-child)":{marginInlineEnd:8}}),[`${r}-selection-wrap`]:{display:"flex",width:"100%",position:"relative",minWidth:0,"&:after":{content:'"\\a0"',width:0,overflow:"hidden"}},[`${r}-prefix`]:{flex:"none",marginInlineEnd:e.selectAffixPadding},[`${r}-clear`]:{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:a,zIndex:1,display:"inline-block",width:e.fontSizeIcon,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,fontStyle:"normal",lineHeight:1,textAlign:"center",textTransform:"none",cursor:"pointer",opacity:0,transition:`color ${e.motionDurationMid} ease, opacity ${e.motionDurationSlow} ease`,textRendering:"auto",transform:"translateZ(0)","&:before":{display:"block"},"&:hover":{color:e.colorIcon}},"@media(hover:none)":s,"&:hover":s}),[`${r}-status`]:{"&-error, &-warning, &-success, &-validating":{[`&${r}-has-feedback`]:{[`${r}-clear`]:{insetInlineEnd:e.calc(a).add(e.fontSize).add(e.paddingXS).equal()}}}}}},g5=e=>{const{componentCls:t}=e;return[{[t]:{[`&${t}-in-form-item`]:{width:"100%"}}},v5(e),o5(e),a5(e),k6(e),{[`${t}-rtl`]:{direction:"rtl"}},od(e,{borderElCls:`${t}-selector`,focusElCls:`${t}-focused`})]},p5=_n("Select",(e,{rootPrefixCls:t})=>{const r=un(e,{rootPrefixCls:t,inputPaddingHorizontalBase:e.calc(e.paddingSM).sub(1).equal(),multipleSelectItemHeight:e.multipleItemHeight,selectHeight:e.controlHeight});return[g5(r),f5(r)]},i5,{unitless:{optionLineHeight:!0,optionSelectedFontWeight:!0}});var h5={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"},b5=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:h5}))},nO=f.forwardRef(b5),y5={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"},S5=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:y5}))},C5=f.forwardRef(S5),x5={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z"}}]},name:"search",theme:"outlined"},E5=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:x5}))},rO=f.forwardRef(E5);function w5({suffixIcon:e,clearIcon:t,menuItemSelectedIcon:r,removeIcon:a,loading:i,multiple:s,hasFeedback:c,prefixCls:d,showSuffixIcon:m,feedbackIcon:v,showArrow:p,componentName:h}){const y=t??f.createElement(Yf,null),C=E=>e===null&&!c&&!p?null:f.createElement(f.Fragment,null,m!==!1&&E,c&&v);let w=null;if(e!==void 0)w=C(e);else if(i)w=C(f.createElement(Qf,{spin:!0}));else{const E=`${d}-suffix`;w=({open:O,showSearch:R})=>C(O&&R?f.createElement(rO,{className:E}):f.createElement(C5,{className:E}))}let x=null;r!==void 0?x=r:s?x=f.createElement(nO,null):x=null;let S=null;return a!==void 0?S=a:S=f.createElement(bc,null),{clearIcon:y,suffixIcon:w,itemIcon:x,removeIcon:S}}function O5(e){return ue.useMemo(()=>{if(e)return(...t)=>ue.createElement(Tf,{space:!0},e.apply(void 0,t))},[e])}function $5(e,t){return t!==void 0?t:e!==null}var R5=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var r,a,i,s,c;const{prefixCls:d,bordered:m,className:v,rootClassName:p,getPopupContainer:h,popupClassName:y,dropdownClassName:C,listHeight:w=256,placement:x,listItemHeight:S,size:E,disabled:O,notFoundContent:R,status:_,builtinPlacements:T,dropdownMatchSelectWidth:M,popupMatchSelectWidth:N,direction:A,style:j,allowClear:I,variant:L,dropdownStyle:B,transitionName:V,tagRender:H,maxCount:Q,prefix:z,dropdownRender:F,popupRender:q,onDropdownVisibleChange:ee,onOpenChange:Z,styles:D,classNames:U}=e,G=R5(e,["prefixCls","bordered","className","rootClassName","getPopupContainer","popupClassName","dropdownClassName","listHeight","placement","listItemHeight","size","disabled","notFoundContent","status","builtinPlacements","dropdownMatchSelectWidth","popupMatchSelectWidth","direction","style","allowClear","variant","dropdownStyle","transitionName","tagRender","maxCount","prefix","dropdownRender","popupRender","onDropdownVisibleChange","onOpenChange","styles","classNames"]),{getPopupContainer:W,getPrefixCls:X,renderEmpty:Y,direction:ie,virtual:ce,popupMatchSelectWidth:fe,popupOverflow:Te}=f.useContext(It),{showSearch:he,style:se,styles:ye,className:be,classNames:ge}=Lr("select"),[,te]=ta(),xe=S??(te==null?void 0:te.controlHeight),Ee=X("select",d),_e=X(),je=A??ie,{compactSize:Ae,compactItemClassnames:He}=Il(Ee,je),[Ie,Ce]=fd("select",L,m),Xe=Dl(Ee),[at,mt,ke]=p5(Ee,Xe),We=f.useMemo(()=>{const{mode:Be}=e;if(Be!=="combobox")return Be===aO?"combobox":Be},[e.mode]),ct=We==="multiple"||We==="tags",Qe=$5(e.suffixIcon,e.showArrow),ut=(r=N??M)!==null&&r!==void 0?r:fe,Ye=((a=D==null?void 0:D.popup)===null||a===void 0?void 0:a.root)||((i=ye.popup)===null||i===void 0?void 0:i.root)||B,ze=O5(q||F),Ke=Z||ee,{status:Ne,hasFeedback:Ge,isFormItemInput:_t,feedbackIcon:gt}=f.useContext(ao),Ht=ud(Ne,_);let qt;R!==void 0?qt=R:We==="combobox"?qt=null:qt=(Y==null?void 0:Y("Select"))||f.createElement(Q6,{componentName:"Select"});const{suffixIcon:fn,itemIcon:en,removeIcon:Ft,clearIcon:Rt}=w5(Object.assign(Object.assign({},G),{multiple:ct,hasFeedback:Ge,feedbackIcon:gt,showSuffixIcon:Qe,prefixCls:Ee,componentName:"Select"})),xt=I===!0?{clearIcon:Rt}:I,Gt=or(G,["suffixIcon","itemIcon"]),Bt=ae(((s=U==null?void 0:U.popup)===null||s===void 0?void 0:s.root)||((c=ge==null?void 0:ge.popup)===null||c===void 0?void 0:c.root)||y||C,{[`${Ee}-dropdown-${je}`]:je==="rtl"},p,ge.root,U==null?void 0:U.root,ke,Xe,mt),Ze=Ta(Be=>{var tt;return(tt=E??Ae)!==null&&tt!==void 0?tt:Be}),Et=f.useContext(Lo),st=O??Et,De=ae({[`${Ee}-lg`]:Ze==="large",[`${Ee}-sm`]:Ze==="small",[`${Ee}-rtl`]:je==="rtl",[`${Ee}-${Ie}`]:Ce,[`${Ee}-in-form-item`]:_t},Mf(Ee,Ht,Ge),He,be,v,ge.root,U==null?void 0:U.root,p,ke,Xe,mt),$e=f.useMemo(()=>x!==void 0?x:je==="rtl"?"bottomRight":"bottomLeft",[x,je]),[Re]=lw("SelectLike",Ye==null?void 0:Ye.zIndex);return at(f.createElement(vh,Object.assign({ref:t,virtual:ce,showSearch:he},Gt,{style:Object.assign(Object.assign(Object.assign(Object.assign({},ye.root),D==null?void 0:D.root),se),j),dropdownMatchSelectWidth:ut,transitionName:ah(_e,"slide-up",V),builtinPlacements:J6(T,Te),listHeight:w,listItemHeight:xe,mode:We,prefixCls:Ee,placement:$e,direction:je,prefix:z,suffixIcon:fn,menuItemSelectedIcon:en,removeIcon:Ft,allowClear:xt,notFoundContent:qt,className:De,getPopupContainer:h||W,dropdownClassName:Bt,disabled:st,dropdownStyle:Object.assign(Object.assign({},Ye),{zIndex:Re}),maxCount:ct?Q:void 0,tagRender:ct?H:void 0,dropdownRender:ze,onDropdownVisibleChange:Ke})))},Ll=f.forwardRef(T5),_5=dj(Ll,"dropdownAlign");Ll.SECRET_COMBOBOX_MODE_DO_NOT_USE=aO;Ll.Option=mh;Ll.OptGroup=dh;Ll._InternalPanelDoNotUseOrYouWillBeFired=_5;const oO=(e,t)=>{typeof(e==null?void 0:e.addEventListener)<"u"?e.addEventListener("change",t):typeof(e==null?void 0:e.addListener)<"u"&&e.addListener(t)},iO=(e,t)=>{typeof(e==null?void 0:e.removeEventListener)<"u"?e.removeEventListener("change",t):typeof(e==null?void 0:e.removeListener)<"u"&&e.removeListener(t)},Rl=["xxl","xl","lg","md","sm","xs"],M5=e=>({xs:`(max-width: ${e.screenXSMax}px)`,sm:`(min-width: ${e.screenSM}px)`,md:`(min-width: ${e.screenMD}px)`,lg:`(min-width: ${e.screenLG}px)`,xl:`(min-width: ${e.screenXL}px)`,xxl:`(min-width: ${e.screenXXL}px)`}),N5=e=>{const t=e,r=[].concat(Rl).reverse();return r.forEach((a,i)=>{const s=a.toUpperCase(),c=`screen${s}Min`,d=`screen${s}`;if(!(t[c]<=t[d]))throw new Error(`${c}<=${d} fails : !(${t[c]}<=${t[d]})`);if(i{if(t){for(const r of Rl)if(e[r]&&(t==null?void 0:t[r])!==void 0)return t[r]}},A5=()=>{const[,e]=ta(),t=M5(N5(e));return ue.useMemo(()=>{const r=new Map;let a=-1,i={};return{responsiveMap:t,matchHandlers:{},dispatch(s){return i=s,r.forEach(c=>c(i)),r.size>=1},subscribe(s){return r.size||this.register(),a+=1,r.set(a,s),s(i),a},unsubscribe(s){r.delete(s),r.size||this.unregister()},register(){Object.entries(t).forEach(([s,c])=>{const d=({matches:v})=>{this.dispatch(Object.assign(Object.assign({},i),{[s]:v}))},m=window.matchMedia(c);oO(m,d),this.matchHandlers[c]={mql:m,listener:d},d(m)})},unregister(){Object.values(t).forEach(s=>{const c=this.matchHandlers[s];iO(c==null?void 0:c.mql,c==null?void 0:c.listener)}),r.clear()}}},[t])};function gh(e=!0,t={}){const r=f.useRef(t),[,a]=EA(),i=A5();return nn(()=>{const s=i.subscribe(c=>{r.current=c,e&&a()});return()=>i.unsubscribe(s)},[]),r.current}function sO(e){var t=e.children,r=e.prefixCls,a=e.id,i=e.overlayInnerStyle,s=e.bodyClassName,c=e.className,d=e.style;return f.createElement("div",{className:ae("".concat(r,"-content"),c),style:d},f.createElement("div",{className:ae("".concat(r,"-inner"),s),id:a,role:"tooltip",style:i},typeof t=="function"?t():t))}var ll={shiftX:64,adjustY:1},sl={adjustX:1,shiftY:!0},va=[0,0],z5={left:{points:["cr","cl"],overflow:sl,offset:[-4,0],targetOffset:va},right:{points:["cl","cr"],overflow:sl,offset:[4,0],targetOffset:va},top:{points:["bc","tc"],overflow:ll,offset:[0,-4],targetOffset:va},bottom:{points:["tc","bc"],overflow:ll,offset:[0,4],targetOffset:va},topLeft:{points:["bl","tl"],overflow:ll,offset:[0,-4],targetOffset:va},leftTop:{points:["tr","tl"],overflow:sl,offset:[-4,0],targetOffset:va},topRight:{points:["br","tr"],overflow:ll,offset:[0,-4],targetOffset:va},rightTop:{points:["tl","tr"],overflow:sl,offset:[4,0],targetOffset:va},bottomRight:{points:["tr","br"],overflow:ll,offset:[0,4],targetOffset:va},rightBottom:{points:["bl","br"],overflow:sl,offset:[4,0],targetOffset:va},bottomLeft:{points:["tl","bl"],overflow:ll,offset:[0,4],targetOffset:va},leftBottom:{points:["br","bl"],overflow:sl,offset:[-4,0],targetOffset:va}},j5=["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","children","onVisibleChange","afterVisibleChange","transitionName","animation","motion","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer","overlayInnerStyle","arrowContent","overlay","id","showArrow","classNames","styles"],D5=function(t,r){var a=t.overlayClassName,i=t.trigger,s=i===void 0?["hover"]:i,c=t.mouseEnterDelay,d=c===void 0?0:c,m=t.mouseLeaveDelay,v=m===void 0?.1:m,p=t.overlayStyle,h=t.prefixCls,y=h===void 0?"rc-tooltip":h,C=t.children,w=t.onVisibleChange,x=t.afterVisibleChange,S=t.transitionName,E=t.animation,O=t.motion,R=t.placement,_=R===void 0?"right":R,T=t.align,M=T===void 0?{}:T,N=t.destroyTooltipOnHide,A=N===void 0?!1:N,j=t.defaultVisible,I=t.getTooltipContainer,L=t.overlayInnerStyle;t.arrowContent;var B=t.overlay,V=t.id,H=t.showArrow,Q=H===void 0?!0:H,z=t.classNames,F=t.styles,q=zt(t,j5),ee=_w(V),Z=f.useRef(null);f.useImperativeHandle(r,function(){return Z.current});var D=J({},q);"visible"in t&&(D.popupVisible=t.visible);var U=function(){return f.createElement(sO,{key:"content",prefixCls:y,id:ee,bodyClassName:z==null?void 0:z.body,overlayInnerStyle:J(J({},L),F==null?void 0:F.body)},B)},G=function(){var X=f.Children.only(C),Y=(X==null?void 0:X.props)||{},ie=J(J({},Y),{},{"aria-describedby":B?ee:null});return f.cloneElement(C,ie)};return f.createElement(cd,Le({popupClassName:ae(a,z==null?void 0:z.root),prefixCls:y,popup:U,action:s,builtinPlacements:z5,popupPlacement:_,ref:Z,popupAlign:M,getPopupContainer:I,onPopupVisibleChange:w,afterPopupVisibleChange:x,popupTransitionName:S,popupAnimation:E,popupMotion:O,defaultPopupVisible:j,autoDestroy:A,mouseLeaveDelay:v,popupStyle:J(J({},p),F==null?void 0:F.root),mouseEnterDelay:d,arrow:Q},D),G())};const I5=f.forwardRef(D5);function P5(e){const{sizePopupArrow:t,borderRadiusXS:r,borderRadiusOuter:a}=e,i=t/2,s=0,c=i,d=a*1/Math.sqrt(2),m=i-a*(1-1/Math.sqrt(2)),v=i-r*(1/Math.sqrt(2)),p=a*(Math.sqrt(2)-1)+r*(1/Math.sqrt(2)),h=2*i-v,y=p,C=2*i-d,w=m,x=2*i-s,S=c,E=i*Math.sqrt(2)+a*(Math.sqrt(2)-2),O=a*(Math.sqrt(2)-1),R=`polygon(${O}px 100%, 50% ${O}px, ${2*i-O}px 100%, ${O}px 100%)`,_=`path('M ${s} ${c} A ${a} ${a} 0 0 0 ${d} ${m} L ${v} ${p} A ${r} ${r} 0 0 1 ${h} ${y} L ${C} ${w} A ${a} ${a} 0 0 0 ${x} ${S} Z')`;return{arrowShadowWidth:E,arrowPath:_,arrowPolygon:R}}const B5=(e,t,r)=>{const{sizePopupArrow:a,arrowPolygon:i,arrowPath:s,arrowShadowWidth:c,borderRadiusXS:d,calc:m}=e;return{pointerEvents:"none",width:a,height:a,overflow:"hidden","&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:a,height:m(a).div(2).equal(),background:t,clipPath:{_multi_value_:!0,value:[i,s]},content:'""'},"&::after":{content:'""',position:"absolute",width:c,height:c,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${de(d)} 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:r,zIndex:0,background:"transparent"}}},cO=8;function uO(e){const{contentRadius:t,limitVerticalRadius:r}=e,a=t>12?t+2:12;return{arrowOffsetHorizontal:a,arrowOffsetVertical:r?cO:a}}function Ku(e,t){return e?t:{}}function L5(e,t,r){const{componentCls:a,boxShadowPopoverArrow:i,arrowOffsetVertical:s,arrowOffsetHorizontal:c}=e,{arrowDistance:d=0,arrowPlacement:m={left:!0,right:!0,top:!0,bottom:!0}}=r||{};return{[a]:Object.assign(Object.assign(Object.assign(Object.assign({[`${a}-arrow`]:[Object.assign(Object.assign({position:"absolute",zIndex:1,display:"block"},B5(e,t,i)),{"&:before":{background:t}})]},Ku(!!m.top,{[[`&-placement-top > ${a}-arrow`,`&-placement-topLeft > ${a}-arrow`,`&-placement-topRight > ${a}-arrow`].join(",")]:{bottom:d,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top > ${a}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},"&-placement-topLeft":{"--arrow-offset-horizontal":c,[`> ${a}-arrow`]:{left:{_skip_check_:!0,value:c}}},"&-placement-topRight":{"--arrow-offset-horizontal":`calc(100% - ${de(c)})`,[`> ${a}-arrow`]:{right:{_skip_check_:!0,value:c}}}})),Ku(!!m.bottom,{[[`&-placement-bottom > ${a}-arrow`,`&-placement-bottomLeft > ${a}-arrow`,`&-placement-bottomRight > ${a}-arrow`].join(",")]:{top:d,transform:"translateY(-100%)"},[`&-placement-bottom > ${a}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},"&-placement-bottomLeft":{"--arrow-offset-horizontal":c,[`> ${a}-arrow`]:{left:{_skip_check_:!0,value:c}}},"&-placement-bottomRight":{"--arrow-offset-horizontal":`calc(100% - ${de(c)})`,[`> ${a}-arrow`]:{right:{_skip_check_:!0,value:c}}}})),Ku(!!m.left,{[[`&-placement-left > ${a}-arrow`,`&-placement-leftTop > ${a}-arrow`,`&-placement-leftBottom > ${a}-arrow`].join(",")]:{right:{_skip_check_:!0,value:d},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left > ${a}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop > ${a}-arrow`]:{top:s},[`&-placement-leftBottom > ${a}-arrow`]:{bottom:s}})),Ku(!!m.right,{[[`&-placement-right > ${a}-arrow`,`&-placement-rightTop > ${a}-arrow`,`&-placement-rightBottom > ${a}-arrow`].join(",")]:{left:{_skip_check_:!0,value:d},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right > ${a}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop > ${a}-arrow`]:{top:s},[`&-placement-rightBottom > ${a}-arrow`]:{bottom:s}}))}}function H5(e,t,r,a){if(a===!1)return{adjustX:!1,adjustY:!1};const i=a&&typeof a=="object"?a:{},s={};switch(e){case"top":case"bottom":s.shiftX=t.arrowOffsetHorizontal*2+r,s.shiftY=!0,s.adjustY=!0;break;case"left":case"right":s.shiftY=t.arrowOffsetVertical*2+r,s.shiftX=!0,s.adjustX=!0;break}const c=Object.assign(Object.assign({},s),i);return c.shiftX||(c.adjustX=!0),c.shiftY||(c.adjustY=!0),c}const h1={left:{points:["cr","cl"]},right:{points:["cl","cr"]},top:{points:["bc","tc"]},bottom:{points:["tc","bc"]},topLeft:{points:["bl","tl"]},leftTop:{points:["tr","tl"]},topRight:{points:["br","tr"]},rightTop:{points:["tl","tr"]},bottomRight:{points:["tr","br"]},rightBottom:{points:["bl","br"]},bottomLeft:{points:["tl","bl"]},leftBottom:{points:["br","bl"]}},F5={topLeft:{points:["bl","tc"]},leftTop:{points:["tr","cl"]},topRight:{points:["br","tc"]},rightTop:{points:["tl","cr"]},bottomRight:{points:["tr","bc"]},rightBottom:{points:["bl","cr"]},bottomLeft:{points:["tl","bc"]},leftBottom:{points:["br","cl"]}},V5=new Set(["topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"]);function U5(e){const{arrowWidth:t,autoAdjustOverflow:r,arrowPointAtCenter:a,offset:i,borderRadius:s,visibleFirst:c}=e,d=t/2,m={},v=uO({contentRadius:s,limitVerticalRadius:!0});return Object.keys(h1).forEach(p=>{const h=a&&F5[p]||h1[p],y=Object.assign(Object.assign({},h),{offset:[0,0],dynamicInset:!0});switch(m[p]=y,V5.has(p)&&(y.autoArrow=!1),p){case"top":case"topLeft":case"topRight":y.offset[1]=-d-i;break;case"bottom":case"bottomLeft":case"bottomRight":y.offset[1]=d+i;break;case"left":case"leftTop":case"leftBottom":y.offset[0]=-d-i;break;case"right":case"rightTop":case"rightBottom":y.offset[0]=d+i;break}if(a)switch(p){case"topLeft":case"bottomLeft":y.offset[0]=-v.arrowOffsetHorizontal-d;break;case"topRight":case"bottomRight":y.offset[0]=v.arrowOffsetHorizontal+d;break;case"leftTop":case"rightTop":y.offset[1]=-v.arrowOffsetHorizontal*2+d;break;case"leftBottom":case"rightBottom":y.offset[1]=v.arrowOffsetHorizontal*2-d;break}y.overflow=H5(p,v,t,r),c&&(y.htmlRegion="visibleFirst")}),m}const q5=e=>{const{calc:t,componentCls:r,tooltipMaxWidth:a,tooltipColor:i,tooltipBg:s,tooltipBorderRadius:c,zIndexPopup:d,controlHeight:m,boxShadowSecondary:v,paddingSM:p,paddingXS:h,arrowOffsetHorizontal:y,sizePopupArrow:C}=e,w=t(c).add(C).add(y).equal(),x=t(c).mul(2).add(C).equal();return[{[r]:Object.assign(Object.assign(Object.assign(Object.assign({},Tr(e)),{position:"absolute",zIndex:d,display:"block",width:"max-content",maxWidth:a,visibility:"visible","--valid-offset-x":"var(--arrow-offset-horizontal, var(--arrow-x))",transformOrigin:["var(--valid-offset-x, 50%)","var(--arrow-y, 50%)"].join(" "),"&-hidden":{display:"none"},"--antd-arrow-background-color":s,[`${r}-inner`]:{minWidth:x,minHeight:m,padding:`${de(e.calc(p).div(2).equal())} ${de(h)}`,color:`var(--ant-tooltip-color, ${i})`,textAlign:"start",textDecoration:"none",wordWrap:"break-word",backgroundColor:s,borderRadius:c,boxShadow:v,boxSizing:"border-box"},[["&-placement-topLeft","&-placement-topRight","&-placement-bottomLeft","&-placement-bottomRight"].join(",")]:{minWidth:w},[["&-placement-left","&-placement-leftTop","&-placement-leftBottom","&-placement-right","&-placement-rightTop","&-placement-rightBottom"].join(",")]:{[`${r}-inner`]:{borderRadius:e.min(c,cO)}},[`${r}-content`]:{position:"relative"}}),jE(e,(S,{darkColor:E})=>({[`&${r}-${S}`]:{[`${r}-inner`]:{backgroundColor:E},[`${r}-arrow`]:{"--antd-arrow-background-color":E}}}))),{"&-rtl":{direction:"rtl"}})},L5(e,"var(--antd-arrow-background-color)"),{[`${r}-pure`]:{position:"relative",maxWidth:"none",margin:e.sizePopupArrow}}]},G5=e=>Object.assign(Object.assign({zIndexPopup:e.zIndexPopupBase+70},uO({contentRadius:e.borderRadius,limitVerticalRadius:!0})),P5(un(e,{borderRadiusOuter:Math.min(e.borderRadiusOuter,4)}))),fO=(e,t=!0)=>_n("Tooltip",a=>{const{borderRadius:i,colorTextLightSolid:s,colorBgSpotlight:c}=a,d=un(a,{tooltipMaxWidth:250,tooltipColor:s,tooltipBorderRadius:i,tooltipBg:c});return[q5(d),e3(a,"zoom-big-fast")]},G5,{resetStyle:!1,injectStyle:t})(e),W5=pi.map(e=>`${e}-inverse`),K5=["success","processing","error","default","warning"];function dO(e,t=!0){return t?[].concat(Ue(W5),Ue(pi)).includes(e):pi.includes(e)}function X5(e){return K5.includes(e)}function mO(e,t){const r=dO(t),a=ae({[`${e}-${t}`]:t&&r}),i={},s={},c=t3(t).toRgb(),m=(.299*c.r+.587*c.g+.114*c.b)/255<.5?"#FFF":"#000";return t&&!r&&(i.background=t,i["--ant-tooltip-color"]=m,s["--antd-arrow-background-color"]=t),{className:a,overlayStyle:i,arrowStyle:s}}const Y5=e=>{const{prefixCls:t,className:r,placement:a="top",title:i,color:s,overlayInnerStyle:c}=e,{getPrefixCls:d}=f.useContext(It),m=d("tooltip",t),[v,p,h]=fO(m),y=mO(m,s),C=y.arrowStyle,w=Object.assign(Object.assign({},c),y.overlayStyle),x=ae(p,h,m,`${m}-pure`,`${m}-placement-${a}`,r,y.className);return v(f.createElement("div",{className:x,style:C},f.createElement("div",{className:`${m}-arrow`}),f.createElement(sO,Object.assign({},e,{className:p,prefixCls:m,overlayInnerStyle:w}),i)))};var Q5=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var r,a;const{prefixCls:i,openClassName:s,getTooltipContainer:c,color:d,overlayInnerStyle:m,children:v,afterOpenChange:p,afterVisibleChange:h,destroyTooltipOnHide:y,destroyOnHidden:C,arrow:w=!0,title:x,overlay:S,builtinPlacements:E,arrowPointAtCenter:O=!1,autoAdjustOverflow:R=!0,motion:_,getPopupContainer:T,placement:M="top",mouseEnterDelay:N=.1,mouseLeaveDelay:A=.1,overlayStyle:j,rootClassName:I,overlayClassName:L,styles:B,classNames:V}=e,H=Q5(e,["prefixCls","openClassName","getTooltipContainer","color","overlayInnerStyle","children","afterOpenChange","afterVisibleChange","destroyTooltipOnHide","destroyOnHidden","arrow","title","overlay","builtinPlacements","arrowPointAtCenter","autoAdjustOverflow","motion","getPopupContainer","placement","mouseEnterDelay","mouseLeaveDelay","overlayStyle","rootClassName","overlayClassName","styles","classNames"]),Q=!!w,[,z]=ta(),{getPopupContainer:F,getPrefixCls:q,direction:ee,className:Z,style:D,classNames:U,styles:G}=Lr("tooltip"),W=Jp(),X=f.useRef(null),Y=()=>{var Qe;(Qe=X.current)===null||Qe===void 0||Qe.forceAlign()};f.useImperativeHandle(t,()=>{var Qe,ut;return{forceAlign:Y,forcePopupAlign:()=>{W.deprecated(!1,"forcePopupAlign","forceAlign"),Y()},nativeElement:(Qe=X.current)===null||Qe===void 0?void 0:Qe.nativeElement,popupElement:(ut=X.current)===null||ut===void 0?void 0:ut.popupElement}});const[ie,ce]=ur(!1,{value:(r=e.open)!==null&&r!==void 0?r:e.visible,defaultValue:(a=e.defaultOpen)!==null&&a!==void 0?a:e.defaultVisible}),fe=!x&&!S&&x!==0,Te=Qe=>{var ut,Ye;ce(fe?!1:Qe),fe||((ut=e.onOpenChange)===null||ut===void 0||ut.call(e,Qe),(Ye=e.onVisibleChange)===null||Ye===void 0||Ye.call(e,Qe))},he=f.useMemo(()=>{var Qe,ut;let Ye=O;return typeof w=="object"&&(Ye=(ut=(Qe=w.pointAtCenter)!==null&&Qe!==void 0?Qe:w.arrowPointAtCenter)!==null&&ut!==void 0?ut:O),E||U5({arrowPointAtCenter:Ye,autoAdjustOverflow:R,arrowWidth:Q?z.sizePopupArrow:0,borderRadius:z.borderRadius,offset:z.marginXXS,visibleFirst:!0})},[O,w,E,z]),se=f.useMemo(()=>x===0?x:S||x||"",[S,x]),ye=f.createElement(Tf,{space:!0},typeof se=="function"?se():se),be=q("tooltip",i),ge=q(),te=e["data-popover-inject"];let xe=ie;!("open"in e)&&!("visible"in e)&&fe&&(xe=!1);const Ee=f.isValidElement(v)&&!tw(v)?v:f.createElement("span",null,v),_e=Ee.props,je=!_e.className||typeof _e.className=="string"?ae(_e.className,s||`${be}-open`):_e.className,[Ae,He,Ie]=fO(be,!te),Ce=mO(be,d),Xe=Ce.arrowStyle,at=ae(L,{[`${be}-rtl`]:ee==="rtl"},Ce.className,I,He,Ie,Z,U.root,V==null?void 0:V.root),mt=ae(U.body,V==null?void 0:V.body),[ke,We]=lw("Tooltip",H.zIndex),ct=f.createElement(I5,Object.assign({},H,{zIndex:ke,showArrow:Q,placement:M,mouseEnterDelay:N,mouseLeaveDelay:A,prefixCls:be,classNames:{root:at,body:mt},styles:{root:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Xe),G.root),D),j),B==null?void 0:B.root),body:Object.assign(Object.assign(Object.assign(Object.assign({},G.body),m),B==null?void 0:B.body),Ce.overlayStyle)},getTooltipContainer:T||c||F,ref:X,builtinPlacements:he,overlay:ye,visible:xe,onVisibleChange:Te,afterVisibleChange:p??h,arrowContent:f.createElement("span",{className:`${be}-arrow-content`}),motion:{motionName:ah(ge,"zoom-big-fast",e.transitionName),motionDeadline:1e3},destroyTooltipOnHide:C??!!y}),xe?bi(Ee,{className:je}):Ee);return Ae(f.createElement(ow.Provider,{value:We},ct))}),dd=Z5;dd._InternalPanelDoNotUseOrYouWillBeFired=Y5;var J5={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"}}]},name:"left",theme:"outlined"},k5=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:J5}))},Nf=f.forwardRef(k5),eD=rt.ESC,tD=rt.TAB;function nD(e){var t=e.visible,r=e.triggerRef,a=e.onVisibleChange,i=e.autoFocus,s=e.overlayRef,c=f.useRef(!1),d=function(){if(t){var h,y;(h=r.current)===null||h===void 0||(y=h.focus)===null||y===void 0||y.call(h),a==null||a(!1)}},m=function(){var h;return(h=s.current)!==null&&h!==void 0&&h.focus?(s.current.focus(),c.current=!0,!0):!1},v=function(h){switch(h.keyCode){case eD:d();break;case tD:{var y=!1;c.current||(y=m()),y?h.preventDefault():d();break}}};f.useEffect(function(){return t?(window.addEventListener("keydown",v),i&&bn(m,3),function(){window.removeEventListener("keydown",v),c.current=!1}):function(){c.current=!1}},[t])}var rD=f.forwardRef(function(e,t){var r=e.overlay,a=e.arrow,i=e.prefixCls,s=f.useMemo(function(){var d;return typeof r=="function"?d=r():d=r,d},[r]),c=ea(t,Nl(s));return ue.createElement(ue.Fragment,null,a&&ue.createElement("div",{className:"".concat(i,"-arrow")}),ue.cloneElement(s,{ref:Ho(s)?c:void 0}))}),cl={adjustX:1,adjustY:1},ul=[0,0],aD={topLeft:{points:["bl","tl"],overflow:cl,offset:[0,-4],targetOffset:ul},top:{points:["bc","tc"],overflow:cl,offset:[0,-4],targetOffset:ul},topRight:{points:["br","tr"],overflow:cl,offset:[0,-4],targetOffset:ul},bottomLeft:{points:["tl","bl"],overflow:cl,offset:[0,4],targetOffset:ul},bottom:{points:["tc","bc"],overflow:cl,offset:[0,4],targetOffset:ul},bottomRight:{points:["tr","br"],overflow:cl,offset:[0,4],targetOffset:ul}},oD=["arrow","prefixCls","transitionName","animation","align","placement","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","trigger","autoFocus","overlay","children","onVisibleChange"];function iD(e,t){var r,a=e.arrow,i=a===void 0?!1:a,s=e.prefixCls,c=s===void 0?"rc-dropdown":s,d=e.transitionName,m=e.animation,v=e.align,p=e.placement,h=p===void 0?"bottomLeft":p,y=e.placements,C=y===void 0?aD:y,w=e.getPopupContainer,x=e.showAction,S=e.hideAction,E=e.overlayClassName,O=e.overlayStyle,R=e.visible,_=e.trigger,T=_===void 0?["hover"]:_,M=e.autoFocus,N=e.overlay,A=e.children,j=e.onVisibleChange,I=zt(e,oD),L=ue.useState(),B=oe(L,2),V=B[0],H=B[1],Q="visible"in e?R:V,z=ue.useRef(null),F=ue.useRef(null),q=ue.useRef(null);ue.useImperativeHandle(t,function(){return z.current});var ee=function(ce){H(ce),j==null||j(ce)};nD({visible:Q,triggerRef:q,onVisibleChange:ee,autoFocus:M,overlayRef:F});var Z=function(ce){var fe=e.onOverlayClick;H(!1),fe&&fe(ce)},D=function(){return ue.createElement(rD,{ref:F,overlay:N,prefixCls:c,arrow:i})},U=function(){return typeof N=="function"?D:D()},G=function(){var ce=e.minOverlayWidthMatchTrigger,fe=e.alignPoint;return"minOverlayWidthMatchTrigger"in e?ce:!fe},W=function(){var ce=e.openClassName;return ce!==void 0?ce:"".concat(c,"-open")},X=ue.cloneElement(A,{className:ae((r=A.props)===null||r===void 0?void 0:r.className,Q&&W()),ref:Ho(A)?ea(q,Nl(A)):void 0}),Y=S;return!Y&&T.indexOf("contextMenu")!==-1&&(Y=["click"]),ue.createElement(cd,Le({builtinPlacements:C},I,{prefixCls:c,ref:z,popupClassName:ae(E,K({},"".concat(c,"-show-arrow"),i)),popupStyle:O,action:T,showAction:x,hideAction:Y,popupPlacement:h,popupAlign:v,popupTransitionName:d,popupAnimation:m,popupVisible:Q,stretch:G()?"minWidth":"",popup:U(),onPopupVisibleChange:ee,onPopupClick:Z,getPopupContainer:w}),X)}const lD=ue.forwardRef(iD);var vO=f.createContext(null);function gO(e,t){return e===void 0?null:"".concat(e,"-").concat(t)}function pO(e){var t=f.useContext(vO);return gO(t,e)}var sD=["children","locked"],Ra=f.createContext(null);function cD(e,t){var r=J({},e);return Object.keys(t).forEach(function(a){var i=t[a];i!==void 0&&(r[a]=i)}),r}function dc(e){var t=e.children,r=e.locked,a=zt(e,sD),i=f.useContext(Ra),s=pc(function(){return cD(i,a)},[i,a],function(c,d){return!r&&(c[0]!==d[0]||!rc(c[1],d[1],!0))});return f.createElement(Ra.Provider,{value:s},t)}var uD=[],hO=f.createContext(null);function md(){return f.useContext(hO)}var bO=f.createContext(uD);function Ec(e){var t=f.useContext(bO);return f.useMemo(function(){return e!==void 0?[].concat(Ue(t),[e]):t},[t,e])}var yO=f.createContext(null),ph=f.createContext({});function b1(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(oh(e)){var r=e.nodeName.toLowerCase(),a=["input","select","textarea","button"].includes(r)||e.isContentEditable||r==="a"&&!!e.getAttribute("href"),i=e.getAttribute("tabindex"),s=Number(i),c=null;return i&&!Number.isNaN(s)?c=s:a&&c===null&&(c=0),a&&e.disabled&&(c=null),c!==null&&(c>=0||t&&c<0)}return!1}function fD(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,r=Ue(e.querySelectorAll("*")).filter(function(a){return b1(a,t)});return b1(e,t)&&r.unshift(e),r}var Ap=rt.LEFT,zp=rt.RIGHT,jp=rt.UP,uf=rt.DOWN,ff=rt.ENTER,SO=rt.ESC,Ds=rt.HOME,Is=rt.END,y1=[jp,uf,Ap,zp];function dD(e,t,r,a){var i,s="prev",c="next",d="children",m="parent";if(e==="inline"&&a===ff)return{inlineTrigger:!0};var v=K(K({},jp,s),uf,c),p=K(K(K(K({},Ap,r?c:s),zp,r?s:c),uf,d),ff,d),h=K(K(K(K(K(K({},jp,s),uf,c),ff,d),SO,m),Ap,r?d:m),zp,r?m:d),y={inline:v,horizontal:p,vertical:h,inlineSub:v,horizontalSub:h,verticalSub:h},C=(i=y["".concat(e).concat(t?"":"Sub")])===null||i===void 0?void 0:i[a];switch(C){case s:return{offset:-1,sibling:!0};case c:return{offset:1,sibling:!0};case m:return{offset:-1,sibling:!1};case d:return{offset:1,sibling:!1};default:return null}}function mD(e){for(var t=e;t;){if(t.getAttribute("data-menu-list"))return t;t=t.parentElement}return null}function vD(e,t){for(var r=e||document.activeElement;r;){if(t.has(r))return r;r=r.parentElement}return null}function hh(e,t){var r=fD(e,!0);return r.filter(function(a){return t.has(a)})}function S1(e,t,r){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;if(!e)return null;var i=hh(e,t),s=i.length,c=i.findIndex(function(d){return r===d});return a<0?c===-1?c=s-1:c-=1:a>0&&(c+=1),c=(c+s)%s,i[c]}var Dp=function(t,r){var a=new Set,i=new Map,s=new Map;return t.forEach(function(c){var d=document.querySelector("[data-menu-id='".concat(gO(r,c),"']"));d&&(a.add(d),s.set(d,c),i.set(c,d))}),{elements:a,key2element:i,element2key:s}};function gD(e,t,r,a,i,s,c,d,m,v){var p=f.useRef(),h=f.useRef();h.current=t;var y=function(){bn.cancel(p.current)};return f.useEffect(function(){return function(){y()}},[]),function(C){var w=C.which;if([].concat(y1,[ff,SO,Ds,Is]).includes(w)){var x=s(),S=Dp(x,a),E=S,O=E.elements,R=E.key2element,_=E.element2key,T=R.get(t),M=vD(T,O),N=_.get(M),A=dD(e,c(N,!0).length===1,r,w);if(!A&&w!==Ds&&w!==Is)return;(y1.includes(w)||[Ds,Is].includes(w))&&C.preventDefault();var j=function(F){if(F){var q=F,ee=F.querySelector("a");ee!=null&&ee.getAttribute("href")&&(q=ee);var Z=_.get(F);d(Z),y(),p.current=bn(function(){h.current===Z&&q.focus()})}};if([Ds,Is].includes(w)||A.sibling||!M){var I;!M||e==="inline"?I=i.current:I=mD(M);var L,B=hh(I,O);w===Ds?L=B[0]:w===Is?L=B[B.length-1]:L=S1(I,O,M,A.offset),j(L)}else if(A.inlineTrigger)m(N);else if(A.offset>0)m(N,!0),y(),p.current=bn(function(){S=Dp(x,a);var z=M.getAttribute("aria-controls"),F=document.getElementById(z),q=S1(F,S.elements);j(q)},5);else if(A.offset<0){var V=c(N,!0),H=V[V.length-2],Q=R.get(H);m(H,!1),j(Q)}}v==null||v(C)}}function pD(e){Promise.resolve().then(e)}var bh="__RC_UTIL_PATH_SPLIT__",C1=function(t){return t.join(bh)},hD=function(t){return t.split(bh)},Ip="rc-menu-more";function bD(){var e=f.useState({}),t=oe(e,2),r=t[1],a=f.useRef(new Map),i=f.useRef(new Map),s=f.useState([]),c=oe(s,2),d=c[0],m=c[1],v=f.useRef(0),p=f.useRef(!1),h=function(){p.current||r({})},y=f.useCallback(function(R,_){var T=C1(_);i.current.set(T,R),a.current.set(R,T),v.current+=1;var M=v.current;pD(function(){M===v.current&&h()})},[]),C=f.useCallback(function(R,_){var T=C1(_);i.current.delete(T),a.current.delete(R)},[]),w=f.useCallback(function(R){m(R)},[]),x=f.useCallback(function(R,_){var T=a.current.get(R)||"",M=hD(T);return _&&d.includes(M[0])&&M.unshift(Ip),M},[d]),S=f.useCallback(function(R,_){return R.filter(function(T){return T!==void 0}).some(function(T){var M=x(T,!0);return M.includes(_)})},[x]),E=function(){var _=Ue(a.current.keys());return d.length&&_.push(Ip),_},O=f.useCallback(function(R){var _="".concat(a.current.get(R)).concat(bh),T=new Set;return Ue(i.current.keys()).forEach(function(M){M.startsWith(_)&&T.add(i.current.get(M))}),T},[]);return f.useEffect(function(){return function(){p.current=!0}},[]),{registerPath:y,unregisterPath:C,refreshOverflowKeys:w,isSubPathKey:S,getKeyPath:x,getKeys:E,getSubPathKeys:O}}function Xs(e){var t=f.useRef(e);t.current=e;var r=f.useCallback(function(){for(var a,i=arguments.length,s=new Array(i),c=0;c1&&(O.motionAppear=!1);var R=O.onVisibleChanged;return O.onVisibleChanged=function(_){return!y.current&&!_&&S(!0),R==null?void 0:R(_)},x?null:f.createElement(dc,{mode:s,locked:!y.current},f.createElement(Fo,Le({visible:E},O,{forceRender:m,removeOnLeave:!1,leavedClassName:"".concat(d,"-hidden")}),function(_){var T=_.className,M=_.style;return f.createElement(yh,{id:t,className:T,style:M},i)}))}var DD=["style","className","title","eventKey","warnKey","disabled","internalPopupClose","children","itemIcon","expandIcon","popupClassName","popupOffset","popupStyle","onClick","onMouseEnter","onMouseLeave","onTitleClick","onTitleMouseEnter","onTitleMouseLeave"],ID=["active"],PD=f.forwardRef(function(e,t){var r=e.style,a=e.className,i=e.title,s=e.eventKey;e.warnKey;var c=e.disabled,d=e.internalPopupClose,m=e.children,v=e.itemIcon,p=e.expandIcon,h=e.popupClassName,y=e.popupOffset,C=e.popupStyle,w=e.onClick,x=e.onMouseEnter,S=e.onMouseLeave,E=e.onTitleClick,O=e.onTitleMouseEnter,R=e.onTitleMouseLeave,_=zt(e,DD),T=pO(s),M=f.useContext(Ra),N=M.prefixCls,A=M.mode,j=M.openKeys,I=M.disabled,L=M.overflowDisabled,B=M.activeKey,V=M.selectedKeys,H=M.itemIcon,Q=M.expandIcon,z=M.onItemClick,F=M.onOpenChange,q=M.onActive,ee=f.useContext(ph),Z=ee._internalRenderSubMenuItem,D=f.useContext(yO),U=D.isSubPathKey,G=Ec(),W="".concat(N,"-submenu"),X=I||c,Y=f.useRef(),ie=f.useRef(),ce=v??H,fe=p??Q,Te=j.includes(s),he=!L&&Te,se=U(V,s),ye=CO(s,X,O,R),be=ye.active,ge=zt(ye,ID),te=f.useState(!1),xe=oe(te,2),Ee=xe[0],_e=xe[1],je=function(Ne){X||_e(Ne)},Ae=function(Ne){je(!0),x==null||x({key:s,domEvent:Ne})},He=function(Ne){je(!1),S==null||S({key:s,domEvent:Ne})},Ie=f.useMemo(function(){return be||(A!=="inline"?Ee||U([B],s):!1)},[A,be,B,Ee,s,U]),Ce=xO(G.length),Xe=function(Ne){X||(E==null||E({key:s,domEvent:Ne}),A==="inline"&&F(s,!Te))},at=Xs(function(Ke){w==null||w(Af(Ke)),z(Ke)}),mt=function(Ne){A!=="inline"&&F(s,Ne)},ke=function(){q(s)},We=T&&"".concat(T,"-popup"),ct=f.useMemo(function(){return f.createElement(EO,{icon:A!=="horizontal"?fe:void 0,props:J(J({},e),{},{isOpen:he,isSubMenu:!0})},f.createElement("i",{className:"".concat(W,"-arrow")}))},[A,fe,e,he,W]),Qe=f.createElement("div",Le({role:"menuitem",style:Ce,className:"".concat(W,"-title"),tabIndex:X?null:-1,ref:Y,title:typeof i=="string"?i:null,"data-menu-id":L&&T?null:T,"aria-expanded":he,"aria-haspopup":!0,"aria-controls":We,"aria-disabled":X,onClick:Xe,onFocus:ke},ge),i,ct),ut=f.useRef(A);if(A!=="inline"&&G.length>1?ut.current="vertical":ut.current=A,!L){var Ye=ut.current;Qe=f.createElement(zD,{mode:Ye,prefixCls:W,visible:!d&&he&&A!=="inline",popupClassName:h,popupOffset:y,popupStyle:C,popup:f.createElement(dc,{mode:Ye==="horizontal"?"vertical":Ye},f.createElement(yh,{id:We,ref:ie},m)),disabled:X,onVisibleChange:mt},Qe)}var ze=f.createElement(Ia.Item,Le({ref:t,role:"none"},_,{component:"li",style:r,className:ae(W,"".concat(W,"-").concat(A),a,K(K(K(K({},"".concat(W,"-open"),he),"".concat(W,"-active"),Ie),"".concat(W,"-selected"),se),"".concat(W,"-disabled"),X)),onMouseEnter:Ae,onMouseLeave:He}),Qe,!L&&f.createElement(jD,{id:We,open:he,keyPath:G},m));return Z&&(ze=Z(ze,e,{selected:se,active:Ie,open:he,disabled:X})),f.createElement(dc,{onItemClick:at,mode:A==="horizontal"?"vertical":A,itemIcon:ce,expandIcon:fe},ze)}),Ch=f.forwardRef(function(e,t){var r=e.eventKey,a=e.children,i=Ec(r),s=Sh(a,i),c=md();f.useEffect(function(){if(c)return c.registerPath(r,i),function(){c.unregisterPath(r,i)}},[i]);var d;return c?d=s:d=f.createElement(PD,Le({ref:t},e),s),f.createElement(bO.Provider,{value:i},d)});function OO(e){var t=e.className,r=e.style,a=f.useContext(Ra),i=a.prefixCls,s=md();return s?null:f.createElement("li",{role:"separator",className:ae("".concat(i,"-item-divider"),t),style:r})}var BD=["className","title","eventKey","children"],LD=f.forwardRef(function(e,t){var r=e.className,a=e.title;e.eventKey;var i=e.children,s=zt(e,BD),c=f.useContext(Ra),d=c.prefixCls,m="".concat(d,"-item-group");return f.createElement("li",Le({ref:t,role:"presentation"},s,{onClick:function(p){return p.stopPropagation()},className:ae(m,r)}),f.createElement("div",{role:"presentation",className:"".concat(m,"-title"),title:typeof a=="string"?a:void 0},a),f.createElement("ul",{role:"group",className:"".concat(m,"-list")},i))}),$O=f.forwardRef(function(e,t){var r=e.eventKey,a=e.children,i=Ec(r),s=Sh(a,i),c=md();return c?s:f.createElement(LD,Le({ref:t},or(e,["warnKey"])),s)}),HD=["label","children","key","type","extra"];function Pp(e,t,r){var a=t.item,i=t.group,s=t.submenu,c=t.divider;return(e||[]).map(function(d,m){if(d&&pt(d)==="object"){var v=d,p=v.label,h=v.children,y=v.key,C=v.type,w=v.extra,x=zt(v,HD),S=y??"tmp-".concat(m);return h||C==="group"?C==="group"?f.createElement(i,Le({key:S},x,{title:p}),Pp(h,t,r)):f.createElement(s,Le({key:S},x,{title:p}),Pp(h,t,r)):C==="divider"?f.createElement(c,Le({key:S},x)):f.createElement(a,Le({key:S},x,{extra:w}),p,(!!w||w===0)&&f.createElement("span",{className:"".concat(r,"-item-extra")},w))}return null}).filter(function(d){return d})}function E1(e,t,r,a,i){var s=e,c=J({divider:OO,item:vd,group:$O,submenu:Ch},a);return t&&(s=Pp(t,c,i)),Sh(s,r)}var FD=["prefixCls","rootClassName","style","className","tabIndex","items","children","direction","id","mode","inlineCollapsed","disabled","disabledOverflow","subMenuOpenDelay","subMenuCloseDelay","forceSubMenuRender","defaultOpenKeys","openKeys","activeKey","defaultActiveFirst","selectable","multiple","defaultSelectedKeys","selectedKeys","onSelect","onDeselect","inlineIndent","motion","defaultMotions","triggerSubMenuAction","builtinPlacements","itemIcon","expandIcon","overflowedIndicator","overflowedIndicatorPopupClassName","getPopupContainer","onClick","onOpenChange","onKeyDown","openAnimation","openTransitionName","_internalRenderMenuItem","_internalRenderSubMenuItem","_internalComponents"],oi=[],VD=f.forwardRef(function(e,t){var r,a=e,i=a.prefixCls,s=i===void 0?"rc-menu":i,c=a.rootClassName,d=a.style,m=a.className,v=a.tabIndex,p=v===void 0?0:v,h=a.items,y=a.children,C=a.direction,w=a.id,x=a.mode,S=x===void 0?"vertical":x,E=a.inlineCollapsed,O=a.disabled,R=a.disabledOverflow,_=a.subMenuOpenDelay,T=_===void 0?.1:_,M=a.subMenuCloseDelay,N=M===void 0?.1:M,A=a.forceSubMenuRender,j=a.defaultOpenKeys,I=a.openKeys,L=a.activeKey,B=a.defaultActiveFirst,V=a.selectable,H=V===void 0?!0:V,Q=a.multiple,z=Q===void 0?!1:Q,F=a.defaultSelectedKeys,q=a.selectedKeys,ee=a.onSelect,Z=a.onDeselect,D=a.inlineIndent,U=D===void 0?24:D,G=a.motion,W=a.defaultMotions,X=a.triggerSubMenuAction,Y=X===void 0?"hover":X,ie=a.builtinPlacements,ce=a.itemIcon,fe=a.expandIcon,Te=a.overflowedIndicator,he=Te===void 0?"...":Te,se=a.overflowedIndicatorPopupClassName,ye=a.getPopupContainer,be=a.onClick,ge=a.onOpenChange,te=a.onKeyDown;a.openAnimation,a.openTransitionName;var xe=a._internalRenderMenuItem,Ee=a._internalRenderSubMenuItem,_e=a._internalComponents,je=zt(a,FD),Ae=f.useMemo(function(){return[E1(y,h,oi,_e,s),E1(y,h,oi,{},s)]},[y,h,_e]),He=oe(Ae,2),Ie=He[0],Ce=He[1],Xe=f.useState(!1),at=oe(Xe,2),mt=at[0],ke=at[1],We=f.useRef(),ct=SD(w),Qe=C==="rtl",ut=ur(j,{value:I,postState:function(ot){return ot||oi}}),Ye=oe(ut,2),ze=Ye[0],Ke=Ye[1],Ne=function(ot){var it=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;function jt(){Ke(ot),ge==null||ge(ot)}it?Bo.flushSync(jt):jt()},Ge=f.useState(ze),_t=oe(Ge,2),gt=_t[0],Ht=_t[1],qt=f.useRef(!1),fn=f.useMemo(function(){return(S==="inline"||S==="vertical")&&E?["vertical",E]:[S,!1]},[S,E]),en=oe(fn,2),Ft=en[0],Rt=en[1],xt=Ft==="inline",Gt=f.useState(Ft),Bt=oe(Gt,2),Ze=Bt[0],Et=Bt[1],st=f.useState(Rt),De=oe(st,2),$e=De[0],Re=De[1];f.useEffect(function(){Et(Ft),Re(Rt),qt.current&&(xt?Ke(gt):Ne(oi))},[Ft,Rt]);var Be=f.useState(0),tt=oe(Be,2),nt=tt[0],Ot=tt[1],bt=nt>=Ie.length-1||Ze!=="horizontal"||R;f.useEffect(function(){xt&&Ht(ze)},[ze]),f.useEffect(function(){return qt.current=!0,function(){qt.current=!1}},[]);var vt=bD(),Nt=vt.registerPath,dn=vt.unregisterPath,vn=vt.refreshOverflowKeys,yn=vt.isSubPathKey,Nn=vt.getKeyPath,Vt=vt.getKeys,Jt=vt.getSubPathKeys,Pe=f.useMemo(function(){return{registerPath:Nt,unregisterPath:dn}},[Nt,dn]),qe=f.useMemo(function(){return{isSubPathKey:yn}},[yn]);f.useEffect(function(){vn(bt?oi:Ie.slice(nt+1).map(function(tn){return tn.key}))},[nt,bt]);var yt=ur(L||B&&((r=Ie[0])===null||r===void 0?void 0:r.key),{value:L}),$t=oe(yt,2),Ve=$t[0],Je=$t[1],Ct=Xs(function(tn){Je(tn)}),At=Xs(function(){Je(void 0)});f.useImperativeHandle(t,function(){return{list:We.current,focus:function(ot){var it,jt=Vt(),Xt=Dp(jt,ct),ln=Xt.elements,gn=Xt.key2element,Bn=Xt.element2key,Yn=hh(We.current,ln),ir=Ve??(Yn[0]?Bn.get(Yn[0]):(it=Ie.find(function(Hr){return!Hr.props.disabled}))===null||it===void 0?void 0:it.key),Pn=gn.get(ir);if(ir&&Pn){var dr;Pn==null||(dr=Pn.focus)===null||dr===void 0||dr.call(Pn,ot)}}}});var Fe=ur(F||[],{value:q,postState:function(ot){return Array.isArray(ot)?ot:ot==null?oi:[ot]}}),ft=oe(Fe,2),Mt=ft[0],An=ft[1],Fn=function(ot){if(H){var it=ot.key,jt=Mt.includes(it),Xt;z?jt?Xt=Mt.filter(function(gn){return gn!==it}):Xt=[].concat(Ue(Mt),[it]):Xt=[it],An(Xt);var ln=J(J({},ot),{},{selectedKeys:Xt});jt?Z==null||Z(ln):ee==null||ee(ln)}!z&&ze.length&&Ze!=="inline"&&Ne(oi)},tr=Xs(function(tn){be==null||be(Af(tn)),Fn(tn)}),nr=Xs(function(tn,ot){var it=ze.filter(function(Xt){return Xt!==tn});if(ot)it.push(tn);else if(Ze!=="inline"){var jt=Jt(tn);it=it.filter(function(Xt){return!jt.has(Xt)})}rc(ze,it,!0)||Ne(it,!0)}),$n=function(ot,it){var jt=it??!ze.includes(ot);nr(ot,jt)},Rn=gD(Ze,Ve,Qe,ct,We,Vt,Nn,Je,$n,te);f.useEffect(function(){ke(!0)},[]);var fr=f.useMemo(function(){return{_internalRenderMenuItem:xe,_internalRenderSubMenuItem:Ee}},[xe,Ee]),_r=Ze!=="horizontal"||R?Ie:Ie.map(function(tn,ot){return f.createElement(dc,{key:tn.key,overflowDisabled:ot>nt},tn)}),Mr=f.createElement(Ia,Le({id:w,ref:We,prefixCls:"".concat(s,"-overflow"),component:"ul",itemComponent:vd,className:ae(s,"".concat(s,"-root"),"".concat(s,"-").concat(Ze),m,K(K({},"".concat(s,"-inline-collapsed"),$e),"".concat(s,"-rtl"),Qe),c),dir:C,style:d,role:"menu",tabIndex:p,data:_r,renderRawItem:function(ot){return ot},renderRawRest:function(ot){var it=ot.length,jt=it?Ie.slice(-it):null;return f.createElement(Ch,{eventKey:Ip,title:he,disabled:bt,internalPopupClose:it===0,popupClassName:se},jt)},maxCount:Ze!=="horizontal"||R?Ia.INVALIDATE:Ia.RESPONSIVE,ssr:"full","data-menu-list":!0,onVisibleChange:function(ot){Ot(ot)},onKeyDown:Rn},je));return f.createElement(ph.Provider,{value:fr},f.createElement(vO.Provider,{value:ct},f.createElement(dc,{prefixCls:s,rootClassName:c,mode:Ze,openKeys:ze,rtl:Qe,disabled:O,motion:mt?G:null,defaultMotions:mt?W:null,activeKey:Ve,onActive:Ct,onInactive:At,selectedKeys:Mt,inlineIndent:U,subMenuOpenDelay:T,subMenuCloseDelay:N,forceSubMenuRender:A,builtinPlacements:ie,triggerSubMenuAction:Y,getPopupContainer:ye,itemIcon:ce,expandIcon:fe,onItemClick:tr,onOpenChange:nr},f.createElement(yO.Provider,{value:qe},Mr),f.createElement("div",{style:{display:"none"},"aria-hidden":!0},f.createElement(hO.Provider,{value:Pe},Ce)))))}),wc=VD;wc.Item=vd;wc.SubMenu=Ch;wc.ItemGroup=$O;wc.Divider=OO;var UD={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 192H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM104 228a56 56 0 10112 0 56 56 0 10-112 0zm0 284a56 56 0 10112 0 56 56 0 10-112 0zm0 284a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"bars",theme:"outlined"},qD=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:UD}))},GD=f.forwardRef(qD);const RO=f.createContext({siderHook:{addSider:()=>null,removeSider:()=>null}}),WD=e=>{const{antCls:t,componentCls:r,colorText:a,footerBg:i,headerHeight:s,headerPadding:c,headerColor:d,footerPadding:m,fontSize:v,bodyBg:p,headerBg:h}=e;return{[r]:{display:"flex",flex:"auto",flexDirection:"column",minHeight:0,background:p,"&, *":{boxSizing:"border-box"},[`&${r}-has-sider`]:{flexDirection:"row",[`> ${r}, > ${r}-content`]:{width:0}},[`${r}-header, &${r}-footer`]:{flex:"0 0 auto"},"&-rtl":{direction:"rtl"}},[`${r}-header`]:{height:s,padding:c,color:d,lineHeight:de(s),background:h,[`${t}-menu`]:{lineHeight:"inherit"}},[`${r}-footer`]:{padding:m,color:a,fontSize:v,background:i},[`${r}-content`]:{flex:"auto",color:a,minHeight:0}}},TO=e=>{const{colorBgLayout:t,controlHeight:r,controlHeightLG:a,colorText:i,controlHeightSM:s,marginXXS:c,colorTextLightSolid:d,colorBgContainer:m}=e,v=a*1.25;return{colorBgHeader:"#001529",colorBgBody:t,colorBgTrigger:"#002140",bodyBg:t,headerBg:"#001529",headerHeight:r*2,headerPadding:`0 ${v}px`,headerColor:i,footerPadding:`${s}px ${v}px`,footerBg:t,siderBg:"#001529",triggerHeight:a+c*2,triggerBg:"#002140",triggerColor:d,zeroTriggerWidth:a,zeroTriggerHeight:a,lightSiderBg:m,lightTriggerBg:m,lightTriggerColor:i}},_O=[["colorBgBody","bodyBg"],["colorBgHeader","headerBg"],["colorBgTrigger","triggerBg"]],MO=_n("Layout",WD,TO,{deprecatedTokens:_O}),KD=e=>{const{componentCls:t,siderBg:r,motionDurationMid:a,motionDurationSlow:i,antCls:s,triggerHeight:c,triggerColor:d,triggerBg:m,headerHeight:v,zeroTriggerWidth:p,zeroTriggerHeight:h,borderRadiusLG:y,lightSiderBg:C,lightTriggerColor:w,lightTriggerBg:x,bodyBg:S}=e;return{[t]:{position:"relative",minWidth:0,background:r,transition:`all ${a}, background 0s`,"&-has-trigger":{paddingBottom:c},"&-right":{order:1},[`${t}-children`]:{height:"100%",marginTop:-.1,paddingTop:.1,[`${s}-menu${s}-menu-inline-collapsed`]:{width:"auto"}},[`&-zero-width ${t}-children`]:{overflow:"hidden"},[`${t}-trigger`]:{position:"fixed",bottom:0,zIndex:1,height:c,color:d,lineHeight:de(c),textAlign:"center",background:m,cursor:"pointer",transition:`all ${a}`},[`${t}-zero-width-trigger`]:{position:"absolute",top:v,insetInlineEnd:e.calc(p).mul(-1).equal(),zIndex:1,width:p,height:h,color:d,fontSize:e.fontSizeXL,display:"flex",alignItems:"center",justifyContent:"center",background:r,borderRadius:`0 ${de(y)} ${de(y)} 0`,cursor:"pointer",transition:`background ${i} ease`,"&::after":{position:"absolute",inset:0,background:"transparent",transition:`all ${i}`,content:'""'},"&:hover::after":{background:"rgba(255, 255, 255, 0.2)"},"&-right":{insetInlineStart:e.calc(p).mul(-1).equal(),borderRadius:`${de(y)} 0 0 ${de(y)}`}},"&-light":{background:C,[`${t}-trigger`]:{color:w,background:x},[`${t}-zero-width-trigger`]:{color:w,background:x,border:`1px solid ${S}`,borderInlineStart:0}}}}},XD=_n(["Layout","Sider"],KD,TO,{deprecatedTokens:_O});var YD=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i!Number.isNaN(Number.parseFloat(e))&&Number.isFinite(Number(e)),NO=f.createContext({}),ZD=(()=>{let e=0;return(t="")=>(e+=1,`${t}${e}`)})(),AO=f.forwardRef((e,t)=>{const{prefixCls:r,className:a,trigger:i,children:s,defaultCollapsed:c=!1,theme:d="dark",style:m={},collapsible:v=!1,reverseArrow:p=!1,width:h=200,collapsedWidth:y=80,zeroWidthTriggerStyle:C,breakpoint:w,onCollapse:x,onBreakpoint:S}=e,E=YD(e,["prefixCls","className","trigger","children","defaultCollapsed","theme","style","collapsible","reverseArrow","width","collapsedWidth","zeroWidthTriggerStyle","breakpoint","onCollapse","onBreakpoint"]),{siderHook:O}=f.useContext(RO),[R,_]=f.useState("collapsed"in e?e.collapsed:c),[T,M]=f.useState(!1);f.useEffect(()=>{"collapsed"in e&&_(e.collapsed)},[e.collapsed]);const N=(ce,fe)=>{"collapsed"in e||_(ce),x==null||x(ce,fe)},{getPrefixCls:A,direction:j}=f.useContext(It),I=A("layout-sider",r),[L,B,V]=XD(I),H=f.useRef(null);H.current=ce=>{M(ce.matches),S==null||S(ce.matches),R!==ce.matches&&N(ce.matches,"responsive")},f.useEffect(()=>{function ce(Te){var he;return(he=H.current)===null||he===void 0?void 0:he.call(H,Te)}let fe;return typeof(window==null?void 0:window.matchMedia)<"u"&&w&&w in w1&&(fe=window.matchMedia(`screen and (max-width: ${w1[w]})`),oO(fe,ce),ce(fe)),()=>{iO(fe,ce)}},[w]),f.useEffect(()=>{const ce=ZD("ant-sider-");return O.addSider(ce),()=>O.removeSider(ce)},[]);const Q=()=>{N(!R,"clickTrigger")},z=or(E,["collapsed"]),F=R?y:h,q=QD(F)?`${F}px`:String(F),ee=Number.parseFloat(String(y||0))===0?f.createElement("span",{onClick:Q,className:ae(`${I}-zero-width-trigger`,`${I}-zero-width-trigger-${p?"right":"left"}`),style:C},i||f.createElement(GD,null)):null,Z=j==="rtl"==!p,G={expanded:Z?f.createElement(Of,null):f.createElement(Nf,null),collapsed:Z?f.createElement(Nf,null):f.createElement(Of,null)}[R?"collapsed":"expanded"],W=i!==null?ee||f.createElement("div",{className:`${I}-trigger`,onClick:Q,style:{width:q}},i||G):null,X=Object.assign(Object.assign({},m),{flex:`0 0 ${q}`,maxWidth:q,minWidth:q,width:q}),Y=ae(I,`${I}-${d}`,{[`${I}-collapsed`]:!!R,[`${I}-has-trigger`]:v&&i!==null&&!ee,[`${I}-below`]:!!T,[`${I}-zero-width`]:Number.parseFloat(q)===0},a,B,V),ie=f.useMemo(()=>({siderCollapsed:R}),[R]);return L(f.createElement(NO.Provider,{value:ie},f.createElement("aside",Object.assign({className:Y},z,{style:X,ref:t}),f.createElement("div",{className:`${I}-children`},s),v||T&&ee?W:null)))});var JD={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"ellipsis",theme:"outlined"},kD=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:JD}))},eI=f.forwardRef(kD);function Oc(e){return un(e,{inputAffixPadding:e.paddingXXS})}const $c=e=>{const{controlHeight:t,fontSize:r,lineHeight:a,lineWidth:i,controlHeightSM:s,controlHeightLG:c,fontSizeLG:d,lineHeightLG:m,paddingSM:v,controlPaddingHorizontalSM:p,controlPaddingHorizontal:h,colorFillAlter:y,colorPrimaryHover:C,colorPrimary:w,controlOutlineWidth:x,controlOutline:S,colorErrorOutline:E,colorWarningOutline:O,colorBgContainer:R,inputFontSize:_,inputFontSizeLG:T,inputFontSizeSM:M}=e,N=_||r,A=M||N,j=T||d,I=Math.round((t-N*a)/2*10)/10-i,L=Math.round((s-A*a)/2*10)/10-i,B=Math.ceil((c-j*m)/2*10)/10-i;return{paddingBlock:Math.max(I,0),paddingBlockSM:Math.max(L,0),paddingBlockLG:Math.max(B,0),paddingInline:v-i,paddingInlineSM:p-i,paddingInlineLG:h-i,addonBg:y,activeBorderColor:w,hoverBorderColor:C,activeShadow:`0 0 0 ${x}px ${S}`,errorActiveShadow:`0 0 0 ${x}px ${E}`,warningActiveShadow:`0 0 0 ${x}px ${O}`,hoverBg:R,activeBg:R,inputFontSize:N,inputFontSizeLG:j,inputFontSizeSM:A}},tI=e=>({borderColor:e.hoverBorderColor,backgroundColor:e.hoverBg}),gd=e=>({color:e.colorTextDisabled,backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,boxShadow:"none",cursor:"not-allowed",opacity:1,"input[disabled], textarea[disabled]":{cursor:"not-allowed"},"&:hover:not([disabled])":Object.assign({},tI(un(e,{hoverBorderColor:e.colorBorder,hoverBg:e.colorBgContainerDisabled})))}),xh=(e,t)=>({background:e.colorBgContainer,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:t.borderColor,"&:hover":{borderColor:t.hoverBorderColor,backgroundColor:e.hoverBg},"&:focus, &:focus-within":{borderColor:t.activeBorderColor,boxShadow:t.activeShadow,outline:0,backgroundColor:e.activeBg}}),O1=(e,t)=>({[`&${e.componentCls}-status-${t.status}:not(${e.componentCls}-disabled)`]:Object.assign(Object.assign({},xh(e,t)),{[`${e.componentCls}-prefix, ${e.componentCls}-suffix`]:{color:t.affixColor}}),[`&${e.componentCls}-status-${t.status}${e.componentCls}-disabled`]:{borderColor:t.borderColor}}),nI=(e,t)=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},xh(e,{borderColor:e.colorBorder,hoverBorderColor:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeShadow:e.activeShadow})),{[`&${e.componentCls}-disabled, &[disabled]`]:Object.assign({},gd(e))}),O1(e,{status:"error",borderColor:e.colorError,hoverBorderColor:e.colorErrorBorderHover,activeBorderColor:e.colorError,activeShadow:e.errorActiveShadow,affixColor:e.colorError})),O1(e,{status:"warning",borderColor:e.colorWarning,hoverBorderColor:e.colorWarningBorderHover,activeBorderColor:e.colorWarning,activeShadow:e.warningActiveShadow,affixColor:e.colorWarning})),t)}),$1=(e,t)=>({[`&${e.componentCls}-group-wrapper-status-${t.status}`]:{[`${e.componentCls}-group-addon`]:{borderColor:t.addonBorderColor,color:t.addonColor}}}),rI=e=>({"&-outlined":Object.assign(Object.assign(Object.assign({[`${e.componentCls}-group`]:{"&-addon":{background:e.addonBg,border:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},"&-addon:first-child":{borderInlineEnd:0},"&-addon:last-child":{borderInlineStart:0}}},$1(e,{status:"error",addonBorderColor:e.colorError,addonColor:e.colorErrorText})),$1(e,{status:"warning",addonBorderColor:e.colorWarning,addonColor:e.colorWarningText})),{[`&${e.componentCls}-group-wrapper-disabled`]:{[`${e.componentCls}-group-addon`]:Object.assign({},gd(e))}})}),aI=(e,t)=>{const{componentCls:r}=e;return{"&-borderless":Object.assign({background:"transparent",border:"none","&:focus, &:focus-within":{outline:"none"},[`&${r}-disabled, &[disabled]`]:{color:e.colorTextDisabled,cursor:"not-allowed"},[`&${r}-status-error`]:{"&, & input, & textarea":{color:e.colorError}},[`&${r}-status-warning`]:{"&, & input, & textarea":{color:e.colorWarning}}},t)}},zO=(e,t)=>{var r;return{background:t.bg,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:"transparent","input&, & input, textarea&, & textarea":{color:(r=t==null?void 0:t.inputColor)!==null&&r!==void 0?r:"unset"},"&:hover":{background:t.hoverBg},"&:focus, &:focus-within":{outline:0,borderColor:t.activeBorderColor,backgroundColor:e.activeBg}}},R1=(e,t)=>({[`&${e.componentCls}-status-${t.status}:not(${e.componentCls}-disabled)`]:Object.assign(Object.assign({},zO(e,t)),{[`${e.componentCls}-prefix, ${e.componentCls}-suffix`]:{color:t.affixColor}})}),oI=(e,t)=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},zO(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.activeBorderColor})),{[`&${e.componentCls}-disabled, &[disabled]`]:Object.assign({},gd(e))}),R1(e,{status:"error",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,inputColor:e.colorErrorText,affixColor:e.colorError})),R1(e,{status:"warning",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,inputColor:e.colorWarningText,affixColor:e.colorWarning})),t)}),T1=(e,t)=>({[`&${e.componentCls}-group-wrapper-status-${t.status}`]:{[`${e.componentCls}-group-addon`]:{background:t.addonBg,color:t.addonColor}}}),iI=e=>({"&-filled":Object.assign(Object.assign(Object.assign({[`${e.componentCls}-group-addon`]:{background:e.colorFillTertiary,"&:last-child":{position:"static"}}},T1(e,{status:"error",addonBg:e.colorErrorBg,addonColor:e.colorErrorText})),T1(e,{status:"warning",addonBg:e.colorWarningBg,addonColor:e.colorWarningText})),{[`&${e.componentCls}-group-wrapper-disabled`]:{[`${e.componentCls}-group`]:{"&-addon":{background:e.colorFillTertiary,color:e.colorTextDisabled},"&-addon:first-child":{borderInlineStart:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderTop:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderBottom:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},"&-addon:last-child":{borderInlineEnd:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderTop:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderBottom:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`}}}})}),jO=(e,t)=>({background:e.colorBgContainer,borderWidth:`${de(e.lineWidth)} 0`,borderStyle:`${e.lineType} none`,borderColor:`transparent transparent ${t.borderColor} transparent`,borderRadius:0,"&:hover":{borderColor:`transparent transparent ${t.hoverBorderColor} transparent`,backgroundColor:e.hoverBg},"&:focus, &:focus-within":{borderColor:`transparent transparent ${t.activeBorderColor} transparent`,outline:0,backgroundColor:e.activeBg}}),_1=(e,t)=>({[`&${e.componentCls}-status-${t.status}:not(${e.componentCls}-disabled)`]:Object.assign(Object.assign({},jO(e,t)),{[`${e.componentCls}-prefix, ${e.componentCls}-suffix`]:{color:t.affixColor}}),[`&${e.componentCls}-status-${t.status}${e.componentCls}-disabled`]:{borderColor:`transparent transparent ${t.borderColor} transparent`}}),lI=(e,t)=>({"&-underlined":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},jO(e,{borderColor:e.colorBorder,hoverBorderColor:e.hoverBorderColor,activeBorderColor:e.activeBorderColor,activeShadow:e.activeShadow})),{[`&${e.componentCls}-disabled, &[disabled]`]:{color:e.colorTextDisabled,boxShadow:"none",cursor:"not-allowed","&:hover":{borderColor:`transparent transparent ${e.colorBorder} transparent`}},"input[disabled], textarea[disabled]":{cursor:"not-allowed"}}),_1(e,{status:"error",borderColor:e.colorError,hoverBorderColor:e.colorErrorBorderHover,activeBorderColor:e.colorError,activeShadow:e.errorActiveShadow,affixColor:e.colorError})),_1(e,{status:"warning",borderColor:e.colorWarning,hoverBorderColor:e.colorWarningBorderHover,activeBorderColor:e.colorWarning,activeShadow:e.warningActiveShadow,affixColor:e.colorWarning})),t)}),sI=e=>({"&::-moz-placeholder":{opacity:1},"&::placeholder":{color:e,userSelect:"none"},"&:placeholder-shown":{textOverflow:"ellipsis"}}),DO=e=>{const{paddingBlockLG:t,lineHeightLG:r,borderRadiusLG:a,paddingInlineLG:i}=e;return{padding:`${de(t)} ${de(i)}`,fontSize:e.inputFontSizeLG,lineHeight:r,borderRadius:a}},Eh=e=>({padding:`${de(e.paddingBlockSM)} ${de(e.paddingInlineSM)}`,fontSize:e.inputFontSizeSM,borderRadius:e.borderRadiusSM}),wh=e=>Object.assign(Object.assign({position:"relative",display:"inline-block",width:"100%",minWidth:0,padding:`${de(e.paddingBlock)} ${de(e.paddingInline)}`,color:e.colorText,fontSize:e.inputFontSize,lineHeight:e.lineHeight,borderRadius:e.borderRadius,transition:`all ${e.motionDurationMid}`},sI(e.colorTextPlaceholder)),{"&-lg":Object.assign({},DO(e)),"&-sm":Object.assign({},Eh(e)),"&-rtl, &-textarea-rtl":{direction:"rtl"}}),cI=e=>{const{componentCls:t,antCls:r}=e;return{position:"relative",display:"table",width:"100%",borderCollapse:"separate",borderSpacing:0,"&[class*='col-']":{paddingInlineEnd:e.paddingXS,"&:last-child":{paddingInlineEnd:0}},[`&-lg ${t}, &-lg > ${t}-group-addon`]:Object.assign({},DO(e)),[`&-sm ${t}, &-sm > ${t}-group-addon`]:Object.assign({},Eh(e)),[`&-lg ${r}-select-single ${r}-select-selector`]:{height:e.controlHeightLG},[`&-sm ${r}-select-single ${r}-select-selector`]:{height:e.controlHeightSM},[`> ${t}`]:{display:"table-cell","&:not(:first-child):not(:last-child)":{borderRadius:0}},[`${t}-group`]:{"&-addon, &-wrap":{display:"table-cell",width:1,whiteSpace:"nowrap",verticalAlign:"middle","&:not(:first-child):not(:last-child)":{borderRadius:0}},"&-wrap > *":{display:"block !important"},"&-addon":{position:"relative",padding:`0 ${de(e.paddingInline)}`,color:e.colorText,fontWeight:"normal",fontSize:e.inputFontSize,textAlign:"center",borderRadius:e.borderRadius,transition:`all ${e.motionDurationSlow}`,lineHeight:1,[`${r}-select`]:{margin:`${de(e.calc(e.paddingBlock).add(1).mul(-1).equal())} ${de(e.calc(e.paddingInline).mul(-1).equal())}`,[`&${r}-select-single:not(${r}-select-customize-input):not(${r}-pagination-size-changer)`]:{[`${r}-select-selector`]:{backgroundColor:"inherit",border:`${de(e.lineWidth)} ${e.lineType} transparent`,boxShadow:"none"}}},[`${r}-cascader-picker`]:{margin:`-9px ${de(e.calc(e.paddingInline).mul(-1).equal())}`,backgroundColor:"transparent",[`${r}-cascader-input`]:{textAlign:"start",border:0,boxShadow:"none"}}}},[t]:{width:"100%",marginBottom:0,textAlign:"inherit","&:focus":{zIndex:1,borderInlineEndWidth:1},"&:hover":{zIndex:1,borderInlineEndWidth:1,[`${t}-search-with-button &`]:{zIndex:0}}},[`> ${t}:first-child, ${t}-group-addon:first-child`]:{borderStartEndRadius:0,borderEndEndRadius:0,[`${r}-select ${r}-select-selector`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`> ${t}-affix-wrapper`]:{[`&:not(:first-child) ${t}`]:{borderStartStartRadius:0,borderEndStartRadius:0},[`&:not(:last-child) ${t}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`> ${t}:last-child, ${t}-group-addon:last-child`]:{borderStartStartRadius:0,borderEndStartRadius:0,[`${r}-select ${r}-select-selector`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`${t}-affix-wrapper`]:{"&:not(:last-child)":{borderStartEndRadius:0,borderEndEndRadius:0,[`${t}-search &`]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius}},[`&:not(:first-child), ${t}-search &:not(:first-child)`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`&${t}-group-compact`]:Object.assign(Object.assign({display:"block"},Kf()),{[`${t}-group-addon, ${t}-group-wrap, > ${t}`]:{"&:not(:first-child):not(:last-child)":{borderInlineEndWidth:e.lineWidth,"&:hover, &:focus":{zIndex:1}}},"& > *":{display:"inline-flex",float:"none",verticalAlign:"top",borderRadius:0},[` + & > ${t}-affix-wrapper, + & > ${t}-number-affix-wrapper, + & > ${r}-picker-range + `]:{display:"inline-flex"},"& > *:not(:last-child)":{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderInlineEndWidth:e.lineWidth},[t]:{float:"none"},[`& > ${r}-select > ${r}-select-selector, + & > ${r}-select-auto-complete ${t}, + & > ${r}-cascader-picker ${t}, + & > ${t}-group-wrapper ${t}`]:{borderInlineEndWidth:e.lineWidth,borderRadius:0,"&:hover, &:focus":{zIndex:1}},[`& > ${r}-select-focused`]:{zIndex:1},[`& > ${r}-select > ${r}-select-arrow`]:{zIndex:1},[`& > *:first-child, + & > ${r}-select:first-child > ${r}-select-selector, + & > ${r}-select-auto-complete:first-child ${t}, + & > ${r}-cascader-picker:first-child ${t}`]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius},[`& > *:last-child, + & > ${r}-select:last-child > ${r}-select-selector, + & > ${r}-cascader-picker:last-child ${t}, + & > ${r}-cascader-picker-focused:last-child ${t}`]:{borderInlineEndWidth:e.lineWidth,borderStartEndRadius:e.borderRadius,borderEndEndRadius:e.borderRadius},[`& > ${r}-select-auto-complete ${t}`]:{verticalAlign:"top"},[`${t}-group-wrapper + ${t}-group-wrapper`]:{marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),[`${t}-affix-wrapper`]:{borderRadius:0}},[`${t}-group-wrapper:not(:last-child)`]:{[`&${t}-search > ${t}-group`]:{[`& > ${t}-group-addon > ${t}-search-button`]:{borderRadius:0},[`& > ${t}`]:{borderStartStartRadius:e.borderRadius,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:e.borderRadius}}}})}},uI=e=>{const{componentCls:t,controlHeightSM:r,lineWidth:a,calc:i}=e,c=i(r).sub(i(a).mul(2)).sub(16).div(2).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Tr(e)),wh(e)),nI(e)),oI(e)),aI(e)),lI(e)),{'&[type="color"]':{height:e.controlHeight,[`&${t}-lg`]:{height:e.controlHeightLG},[`&${t}-sm`]:{height:r,paddingTop:c,paddingBottom:c}},'&[type="search"]::-webkit-search-cancel-button, &[type="search"]::-webkit-search-decoration':{appearance:"none"}})}},fI=e=>{const{componentCls:t}=e;return{[`${t}-clear-icon`]:{margin:0,padding:0,lineHeight:0,color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,verticalAlign:-1,cursor:"pointer",transition:`color ${e.motionDurationSlow}`,border:"none",outline:"none",backgroundColor:"transparent","&:hover":{color:e.colorIcon},"&:active":{color:e.colorText},"&-hidden":{visibility:"hidden"},"&-has-suffix":{margin:`0 ${de(e.inputAffixPadding)}`}}}},dI=e=>{const{componentCls:t,inputAffixPadding:r,colorTextDescription:a,motionDurationSlow:i,colorIcon:s,colorIconHover:c,iconCls:d}=e,m=`${t}-affix-wrapper`,v=`${t}-affix-wrapper-disabled`;return{[m]:Object.assign(Object.assign(Object.assign(Object.assign({},wh(e)),{display:"inline-flex",[`&:not(${t}-disabled):hover`]:{zIndex:1,[`${t}-search-with-button &`]:{zIndex:0}},"&-focused, &:focus":{zIndex:1},[`> input${t}`]:{padding:0},[`> input${t}, > textarea${t}`]:{fontSize:"inherit",border:"none",borderRadius:0,outline:"none",background:"transparent",color:"inherit","&::-ms-reveal":{display:"none"},"&:focus":{boxShadow:"none !important"}},"&::before":{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'},[t]:{"&-prefix, &-suffix":{display:"flex",flex:"none",alignItems:"center","> *:not(:last-child)":{marginInlineEnd:e.paddingXS}},"&-show-count-suffix":{color:a,direction:"ltr"},"&-show-count-has-suffix":{marginInlineEnd:e.paddingXXS},"&-prefix":{marginInlineEnd:r},"&-suffix":{marginInlineStart:r}}}),fI(e)),{[`${d}${t}-password-icon`]:{color:s,cursor:"pointer",transition:`all ${i}`,"&:hover":{color:c}}}),[`${t}-underlined`]:{borderRadius:0},[v]:{[`${d}${t}-password-icon`]:{color:s,cursor:"not-allowed","&:hover":{color:s}}}}},mI=e=>{const{componentCls:t,borderRadiusLG:r,borderRadiusSM:a}=e;return{[`${t}-group`]:Object.assign(Object.assign(Object.assign({},Tr(e)),cI(e)),{"&-rtl":{direction:"rtl"},"&-wrapper":Object.assign(Object.assign(Object.assign({display:"inline-block",width:"100%",textAlign:"start",verticalAlign:"top","&-rtl":{direction:"rtl"},"&-lg":{[`${t}-group-addon`]:{borderRadius:r,fontSize:e.inputFontSizeLG}},"&-sm":{[`${t}-group-addon`]:{borderRadius:a}}},rI(e)),iI(e)),{[`&:not(${t}-compact-first-item):not(${t}-compact-last-item)${t}-compact-item`]:{[`${t}, ${t}-group-addon`]:{borderRadius:0}},[`&:not(${t}-compact-last-item)${t}-compact-first-item`]:{[`${t}, ${t}-group-addon`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${t}-compact-first-item)${t}-compact-last-item`]:{[`${t}, ${t}-group-addon`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`&:not(${t}-compact-last-item)${t}-compact-item`]:{[`${t}-affix-wrapper`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${t}-compact-first-item)${t}-compact-item`]:{[`${t}-affix-wrapper`]:{borderStartStartRadius:0,borderEndStartRadius:0}}})})}},vI=e=>{const{componentCls:t,antCls:r}=e,a=`${t}-search`;return{[a]:{[t]:{"&:not([disabled]):hover, &:not([disabled]):focus":{[`+ ${t}-group-addon ${a}-button:not(${r}-btn-color-primary):not(${r}-btn-variant-text)`]:{borderInlineStartColor:e.colorPrimaryHover}}},[`${t}-affix-wrapper`]:{height:e.controlHeight,borderRadius:0},[`${t}-lg`]:{lineHeight:e.calc(e.lineHeightLG).sub(2e-4).equal()},[`> ${t}-group`]:{[`> ${t}-group-addon:last-child`]:{insetInlineStart:-1,padding:0,border:0,[`${a}-button`]:{marginInlineEnd:-1,borderStartStartRadius:0,borderEndStartRadius:0,boxShadow:"none"},[`${a}-button:not(${r}-btn-color-primary)`]:{color:e.colorTextDescription,"&:not([disabled]):hover":{color:e.colorPrimaryHover},"&:active":{color:e.colorPrimaryActive},[`&${r}-btn-loading::before`]:{inset:0}}}},[`${a}-button`]:{height:e.controlHeight,"&:hover, &:focus":{zIndex:1}},"&-large":{[`${t}-affix-wrapper, ${a}-button`]:{height:e.controlHeightLG}},"&-small":{[`${t}-affix-wrapper, ${a}-button`]:{height:e.controlHeightSM}},"&-rtl":{direction:"rtl"},[`&${t}-compact-item`]:{[`&:not(${t}-compact-last-item)`]:{[`${t}-group-addon`]:{[`${t}-search-button`]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderRadius:0}}},[`&:not(${t}-compact-first-item)`]:{[`${t},${t}-affix-wrapper`]:{borderRadius:0}},[`> ${t}-group-addon ${t}-search-button, + > ${t}, + ${t}-affix-wrapper`]:{"&:hover, &:focus, &:active":{zIndex:2}},[`> ${t}-affix-wrapper-focused`]:{zIndex:2}}}}},gI=e=>{const{componentCls:t}=e;return{[`${t}-out-of-range`]:{[`&, & input, & textarea, ${t}-show-count-suffix, ${t}-data-count`]:{color:e.colorError}}}},IO=_n(["Input","Shared"],e=>{const t=un(e,Oc(e));return[uI(t),dI(t)]},$c,{resetFont:!1}),PO=_n(["Input","Component"],e=>{const t=un(e,Oc(e));return[mI(t),vI(t),gI(t),od(t)]},$c,{resetFont:!1});var pI={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"},hI=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:pI}))},bI=f.forwardRef(hI);const pd=f.createContext(null);var yI=function(t){var r=t.activeTabOffset,a=t.horizontal,i=t.rtl,s=t.indicator,c=s===void 0?{}:s,d=c.size,m=c.align,v=m===void 0?"center":m,p=f.useState(),h=oe(p,2),y=h[0],C=h[1],w=f.useRef(),x=ue.useCallback(function(E){return typeof d=="function"?d(E):typeof d=="number"?d:E},[d]);function S(){bn.cancel(w.current)}return f.useEffect(function(){var E={};if(r)if(a){E.width=x(r.width);var O=i?"right":"left";v==="start"&&(E[O]=r[O]),v==="center"&&(E[O]=r[O]+r.width/2,E.transform=i?"translateX(50%)":"translateX(-50%)"),v==="end"&&(E[O]=r[O]+r.width,E.transform="translateX(-100%)")}else E.height=x(r.height),v==="start"&&(E.top=r.top),v==="center"&&(E.top=r.top+r.height/2,E.transform="translateY(-50%)"),v==="end"&&(E.top=r.top+r.height,E.transform="translateY(-100%)");return S(),w.current=bn(function(){var R=y&&E&&Object.keys(E).every(function(_){var T=E[_],M=y[_];return typeof T=="number"&&typeof M=="number"?Math.round(T)===Math.round(M):T===M});R||C(E)}),S},[JSON.stringify(r),a,i,v,x]),{style:y}},M1={width:0,height:0,left:0,top:0};function SI(e,t,r){return f.useMemo(function(){for(var a,i=new Map,s=t.get((a=e[0])===null||a===void 0?void 0:a.key)||M1,c=s.left+s.width,d=0;dH?(B=I,M.current="x"):(B=L,M.current="y"),t(-B,-B)&&j.preventDefault()}var A=f.useRef(null);A.current={onTouchStart:R,onTouchMove:_,onTouchEnd:T,onWheel:N},f.useEffect(function(){function j(V){A.current.onTouchStart(V)}function I(V){A.current.onTouchMove(V)}function L(V){A.current.onTouchEnd(V)}function B(V){A.current.onWheel(V)}return document.addEventListener("touchmove",I,{passive:!1}),document.addEventListener("touchend",L,{passive:!0}),e.current.addEventListener("touchstart",j,{passive:!0}),e.current.addEventListener("wheel",B,{passive:!1}),function(){document.removeEventListener("touchmove",I),document.removeEventListener("touchend",L)}},[])}function BO(e){var t=f.useState(0),r=oe(t,2),a=r[0],i=r[1],s=f.useRef(0),c=f.useRef();return c.current=e,Ug(function(){var d;(d=c.current)===null||d===void 0||d.call(c)},[a]),function(){s.current===a&&(s.current+=1,i(s.current))}}function EI(e){var t=f.useRef([]),r=f.useState({}),a=oe(r,2),i=a[1],s=f.useRef(typeof e=="function"?e():e),c=BO(function(){var m=s.current;t.current.forEach(function(v){m=v(m)}),t.current=[],s.current=m,i({})});function d(m){t.current.push(m),c()}return[s.current,d]}var j1={width:0,height:0,left:0,top:0,right:0};function wI(e,t,r,a,i,s,c){var d=c.tabs,m=c.tabPosition,v=c.rtl,p,h,y;return["top","bottom"].includes(m)?(p="width",h=v?"right":"left",y=Math.abs(r)):(p="height",h="top",y=-r),f.useMemo(function(){if(!d.length)return[0,0];for(var C=d.length,w=C,x=0;xMath.floor(y+t)){w=x-1;break}}for(var E=0,O=C-1;O>=0;O-=1){var R=e.get(d[O].key)||j1;if(R[h]w?[0,-1]:[E,w]},[e,t,a,i,s,y,m,d.map(function(C){return C.key}).join("_"),v])}function D1(e){var t;return e instanceof Map?(t={},e.forEach(function(r,a){t[a]=r})):t=e,JSON.stringify(t)}var OI="TABS_DQ";function LO(e){return String(e).replace(/"/g,OI)}function Oh(e,t,r,a){return!(!r||a||e===!1||e===void 0&&(t===!1||t===null))}var HO=f.forwardRef(function(e,t){var r=e.prefixCls,a=e.editable,i=e.locale,s=e.style;return!a||a.showAdd===!1?null:f.createElement("button",{ref:t,type:"button",className:"".concat(r,"-nav-add"),style:s,"aria-label":(i==null?void 0:i.addAriaLabel)||"Add tab",onClick:function(d){a.onEdit("add",{event:d})}},a.addIcon||"+")}),I1=f.forwardRef(function(e,t){var r=e.position,a=e.prefixCls,i=e.extra;if(!i)return null;var s,c={};return pt(i)==="object"&&!f.isValidElement(i)?c=i:c.right=i,r==="right"&&(s=c.right),r==="left"&&(s=c.left),s?f.createElement("div",{className:"".concat(a,"-extra-content"),ref:t},s):null}),$I=f.forwardRef(function(e,t){var r=e.prefixCls,a=e.id,i=e.tabs,s=e.locale,c=e.mobile,d=e.more,m=d===void 0?{}:d,v=e.style,p=e.className,h=e.editable,y=e.tabBarGutter,C=e.rtl,w=e.removeAriaLabel,x=e.onTabClick,S=e.getPopupContainer,E=e.popupClassName,O=f.useState(!1),R=oe(O,2),_=R[0],T=R[1],M=f.useState(null),N=oe(M,2),A=N[0],j=N[1],I=m.icon,L=I===void 0?"More":I,B="".concat(a,"-more-popup"),V="".concat(r,"-dropdown"),H=A!==null?"".concat(B,"-").concat(A):null,Q=s==null?void 0:s.dropdownAriaLabel;function z(G,W){G.preventDefault(),G.stopPropagation(),h.onEdit("remove",{key:W,event:G})}var F=f.createElement(wc,{onClick:function(W){var X=W.key,Y=W.domEvent;x(X,Y),T(!1)},prefixCls:"".concat(V,"-menu"),id:B,tabIndex:-1,role:"listbox","aria-activedescendant":H,selectedKeys:[A],"aria-label":Q!==void 0?Q:"expanded dropdown"},i.map(function(G){var W=G.closable,X=G.disabled,Y=G.closeIcon,ie=G.key,ce=G.label,fe=Oh(W,Y,h,X);return f.createElement(vd,{key:ie,id:"".concat(B,"-").concat(ie),role:"option","aria-controls":a&&"".concat(a,"-panel-").concat(ie),disabled:X},f.createElement("span",null,ce),fe&&f.createElement("button",{type:"button","aria-label":w||"remove",tabIndex:0,className:"".concat(V,"-menu-item-remove"),onClick:function(he){he.stopPropagation(),z(he,ie)}},Y||h.removeIcon||"×"))}));function q(G){for(var W=i.filter(function(fe){return!fe.disabled}),X=W.findIndex(function(fe){return fe.key===A})||0,Y=W.length,ie=0;ieJe?"left":"right"})}),V=oe(B,2),H=V[0],Q=V[1],z=N1(0,function(Ve,Je){!L&&x&&x({direction:Ve>Je?"top":"bottom"})}),F=oe(z,2),q=F[0],ee=F[1],Z=f.useState([0,0]),D=oe(Z,2),U=D[0],G=D[1],W=f.useState([0,0]),X=oe(W,2),Y=X[0],ie=X[1],ce=f.useState([0,0]),fe=oe(ce,2),Te=fe[0],he=fe[1],se=f.useState([0,0]),ye=oe(se,2),be=ye[0],ge=ye[1],te=EI(new Map),xe=oe(te,2),Ee=xe[0],_e=xe[1],je=SI(R,Ee,Y[0]),Ae=Xu(U,L),He=Xu(Y,L),Ie=Xu(Te,L),Ce=Xu(be,L),Xe=Math.floor(Ae)We?We:Ve}var Qe=f.useRef(null),ut=f.useState(),Ye=oe(ut,2),ze=Ye[0],Ke=Ye[1];function Ne(){Ke(Date.now())}function Ge(){Qe.current&&clearTimeout(Qe.current)}xI(N,function(Ve,Je){function Ct(At,Fe){At(function(ft){var Mt=ct(ft+Fe);return Mt})}return Xe?(L?Ct(Q,Ve):Ct(ee,Je),Ge(),Ne(),!0):!1}),f.useEffect(function(){return Ge(),ze&&(Qe.current=setTimeout(function(){Ke(0)},100)),Ge},[ze]);var _t=wI(je,at,L?H:q,He,Ie,Ce,J(J({},e),{},{tabs:R})),gt=oe(_t,2),Ht=gt[0],qt=gt[1],fn=Gn(function(){var Ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:c,Je=je.get(Ve)||{width:0,height:0,left:0,right:0,top:0};if(L){var Ct=H;d?Je.rightH+at&&(Ct=Je.right+Je.width-at):Je.left<-H?Ct=-Je.left:Je.left+Je.width>-H+at&&(Ct=-(Je.left+Je.width-at)),ee(0),Q(ct(Ct))}else{var At=q;Je.top<-q?At=-Je.top:Je.top+Je.height>-q+at&&(At=-(Je.top+Je.height-at)),Q(0),ee(ct(At))}}),en=f.useState(),Ft=oe(en,2),Rt=Ft[0],xt=Ft[1],Gt=f.useState(!1),Bt=oe(Gt,2),Ze=Bt[0],Et=Bt[1],st=R.filter(function(Ve){return!Ve.disabled}).map(function(Ve){return Ve.key}),De=function(Je){var Ct=st.indexOf(Rt||c),At=st.length,Fe=(Ct+Je+At)%At,ft=st[Fe];xt(ft)},$e=function(Je,Ct){var At=st.indexOf(Je),Fe=R.find(function(Mt){return Mt.key===Je}),ft=Oh(Fe==null?void 0:Fe.closable,Fe==null?void 0:Fe.closeIcon,v,Fe==null?void 0:Fe.disabled);ft&&(Ct.preventDefault(),Ct.stopPropagation(),v.onEdit("remove",{key:Je,event:Ct}),At===st.length-1?De(-1):De(1))},Re=function(Je,Ct){Et(!0),Ct.button===1&&$e(Je,Ct)},Be=function(Je){var Ct=Je.code,At=d&&L,Fe=st[0],ft=st[st.length-1];switch(Ct){case"ArrowLeft":{L&&De(At?1:-1);break}case"ArrowRight":{L&&De(At?-1:1);break}case"ArrowUp":{Je.preventDefault(),L||De(-1);break}case"ArrowDown":{Je.preventDefault(),L||De(1);break}case"Home":{Je.preventDefault(),xt(Fe);break}case"End":{Je.preventDefault(),xt(ft);break}case"Enter":case"Space":{Je.preventDefault(),w(Rt??c,Je);break}case"Backspace":case"Delete":{$e(Rt,Je);break}}},tt={};L?tt[d?"marginRight":"marginLeft"]=y:tt.marginTop=y;var nt=R.map(function(Ve,Je){var Ct=Ve.key;return f.createElement(TI,{id:i,prefixCls:O,key:Ct,tab:Ve,style:Je===0?void 0:tt,closable:Ve.closable,editable:v,active:Ct===c,focus:Ct===Rt,renderWrapper:C,removeAriaLabel:p==null?void 0:p.removeAriaLabel,tabCount:st.length,currentPosition:Je+1,onClick:function(Fe){w(Ct,Fe)},onKeyDown:Be,onFocus:function(){Ze||xt(Ct),fn(Ct),Ne(),N.current&&(d||(N.current.scrollLeft=0),N.current.scrollTop=0)},onBlur:function(){xt(void 0)},onMouseDown:function(Fe){return Re(Ct,Fe)},onMouseUp:function(){Et(!1)}})}),Ot=function(){return _e(function(){var Je,Ct=new Map,At=(Je=A.current)===null||Je===void 0?void 0:Je.getBoundingClientRect();return R.forEach(function(Fe){var ft,Mt=Fe.key,An=(ft=A.current)===null||ft===void 0?void 0:ft.querySelector('[data-node-key="'.concat(LO(Mt),'"]'));if(An){var Fn=_I(An,At),tr=oe(Fn,4),nr=tr[0],$n=tr[1],Rn=tr[2],fr=tr[3];Ct.set(Mt,{width:nr,height:$n,left:Rn,top:fr})}}),Ct})};f.useEffect(function(){Ot()},[R.map(function(Ve){return Ve.key}).join("_")]);var bt=BO(function(){var Ve=fl(_),Je=fl(T),Ct=fl(M);G([Ve[0]-Je[0]-Ct[0],Ve[1]-Je[1]-Ct[1]]);var At=fl(I);he(At);var Fe=fl(j);ge(Fe);var ft=fl(A);ie([ft[0]-At[0],ft[1]-At[1]]),Ot()}),vt=R.slice(0,Ht),Nt=R.slice(qt+1),dn=[].concat(Ue(vt),Ue(Nt)),vn=je.get(c),yn=yI({activeTabOffset:vn,horizontal:L,indicator:S,rtl:d}),Nn=yn.style;f.useEffect(function(){fn()},[c,ke,We,D1(vn),D1(je),L]),f.useEffect(function(){bt()},[d]);var Vt=!!dn.length,Jt="".concat(O,"-nav-wrap"),Pe,qe,yt,$t;return L?d?(qe=H>0,Pe=H!==We):(Pe=H<0,qe=H!==ke):(yt=q<0,$t=q!==ke),f.createElement(pa,{onResize:bt},f.createElement("div",{ref:Ci(t,_),role:"tablist","aria-orientation":L?"horizontal":"vertical",className:ae("".concat(O,"-nav"),r),style:a,onKeyDown:function(){Ne()}},f.createElement(I1,{ref:T,position:"left",extra:m,prefixCls:O}),f.createElement(pa,{onResize:bt},f.createElement("div",{className:ae(Jt,K(K(K(K({},"".concat(Jt,"-ping-left"),Pe),"".concat(Jt,"-ping-right"),qe),"".concat(Jt,"-ping-top"),yt),"".concat(Jt,"-ping-bottom"),$t)),ref:N},f.createElement(pa,{onResize:bt},f.createElement("div",{ref:A,className:"".concat(O,"-nav-list"),style:{transform:"translate(".concat(H,"px, ").concat(q,"px)"),transition:ze?"none":void 0}},nt,f.createElement(HO,{ref:I,prefixCls:O,locale:p,editable:v,style:J(J({},nt.length===0?void 0:tt),{},{visibility:Vt?"hidden":null})}),f.createElement("div",{className:ae("".concat(O,"-ink-bar"),K({},"".concat(O,"-ink-bar-animated"),s.inkBar)),style:Nn}))))),f.createElement(RI,Le({},e,{removeAriaLabel:p==null?void 0:p.removeAriaLabel,ref:j,prefixCls:O,tabs:dn,className:!Vt&&mt,tabMoving:!!ze})),f.createElement(I1,{ref:M,position:"right",extra:m,prefixCls:O})))}),FO=f.forwardRef(function(e,t){var r=e.prefixCls,a=e.className,i=e.style,s=e.id,c=e.active,d=e.tabKey,m=e.children;return f.createElement("div",{id:s&&"".concat(s,"-panel-").concat(d),role:"tabpanel",tabIndex:c?0:-1,"aria-labelledby":s&&"".concat(s,"-tab-").concat(d),"aria-hidden":!c,style:i,className:ae(r,c&&"".concat(r,"-active"),a),ref:t},m)}),MI=["renderTabBar"],NI=["label","key"],AI=function(t){var r=t.renderTabBar,a=zt(t,MI),i=f.useContext(pd),s=i.tabs;if(r){var c=J(J({},a),{},{panes:s.map(function(d){var m=d.label,v=d.key,p=zt(d,NI);return f.createElement(FO,Le({tab:m,key:v,tabKey:v},p))})});return r(c,P1)}return f.createElement(P1,a)},zI=["key","forceRender","style","className","destroyInactiveTabPane"],jI=function(t){var r=t.id,a=t.activeKey,i=t.animated,s=t.tabPosition,c=t.destroyInactiveTabPane,d=f.useContext(pd),m=d.prefixCls,v=d.tabs,p=i.tabPane,h="".concat(m,"-tabpane");return f.createElement("div",{className:ae("".concat(m,"-content-holder"))},f.createElement("div",{className:ae("".concat(m,"-content"),"".concat(m,"-content-").concat(s),K({},"".concat(m,"-content-animated"),p))},v.map(function(y){var C=y.key,w=y.forceRender,x=y.style,S=y.className,E=y.destroyInactiveTabPane,O=zt(y,zI),R=C===a;return f.createElement(Fo,Le({key:C,visible:R,forceRender:w,removeOnLeave:!!(c||E),leavedClassName:"".concat(h,"-hidden")},i.tabPaneMotion),function(_,T){var M=_.style,N=_.className;return f.createElement(FO,Le({},O,{prefixCls:h,id:r,tabKey:C,animated:p,active:R,style:J(J({},x),M),className:ae(S,N),ref:T}))})})))};function DI(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{inkBar:!0,tabPane:!1},t;return e===!1?t={inkBar:!1,tabPane:!1}:e===!0?t={inkBar:!0,tabPane:!1}:t=J({inkBar:!0},pt(e)==="object"?e:{}),t.tabPaneMotion&&t.tabPane===void 0&&(t.tabPane=!0),!t.tabPaneMotion&&t.tabPane&&(t.tabPane=!1),t}var II=["id","prefixCls","className","items","direction","activeKey","defaultActiveKey","editable","animated","tabPosition","tabBarGutter","tabBarStyle","tabBarExtraContent","locale","more","destroyInactiveTabPane","renderTabBar","onChange","onTabClick","onTabScroll","getPopupContainer","popupClassName","indicator"],B1=0,PI=f.forwardRef(function(e,t){var r=e.id,a=e.prefixCls,i=a===void 0?"rc-tabs":a,s=e.className,c=e.items,d=e.direction,m=e.activeKey,v=e.defaultActiveKey,p=e.editable,h=e.animated,y=e.tabPosition,C=y===void 0?"top":y,w=e.tabBarGutter,x=e.tabBarStyle,S=e.tabBarExtraContent,E=e.locale,O=e.more,R=e.destroyInactiveTabPane,_=e.renderTabBar,T=e.onChange,M=e.onTabClick,N=e.onTabScroll,A=e.getPopupContainer,j=e.popupClassName,I=e.indicator,L=zt(e,II),B=f.useMemo(function(){return(c||[]).filter(function(be){return be&&pt(be)==="object"&&"key"in be})},[c]),V=d==="rtl",H=DI(h),Q=f.useState(!1),z=oe(Q,2),F=z[0],q=z[1];f.useEffect(function(){q(uh())},[]);var ee=ur(function(){var be;return(be=B[0])===null||be===void 0?void 0:be.key},{value:m,defaultValue:v}),Z=oe(ee,2),D=Z[0],U=Z[1],G=f.useState(function(){return B.findIndex(function(be){return be.key===D})}),W=oe(G,2),X=W[0],Y=W[1];f.useEffect(function(){var be=B.findIndex(function(te){return te.key===D});if(be===-1){var ge;be=Math.max(0,Math.min(X,B.length-1)),U((ge=B[be])===null||ge===void 0?void 0:ge.key)}Y(be)},[B.map(function(be){return be.key}).join("_"),D,X]);var ie=ur(null,{value:r}),ce=oe(ie,2),fe=ce[0],Te=ce[1];f.useEffect(function(){r||(Te("rc-tabs-".concat(B1)),B1+=1)},[]);function he(be,ge){M==null||M(be,ge);var te=be!==D;U(be),te&&(T==null||T(be))}var se={id:fe,activeKey:D,animated:H,tabPosition:C,rtl:V,mobile:F},ye=J(J({},se),{},{editable:p,locale:E,more:O,tabBarGutter:w,onTabClick:he,onTabScroll:N,extra:S,style:x,panes:null,getPopupContainer:A,popupClassName:j,indicator:I});return f.createElement(pd.Provider,{value:{tabs:B,prefixCls:i}},f.createElement("div",Le({ref:t,id:r,className:ae(i,"".concat(i,"-").concat(C),K(K(K({},"".concat(i,"-mobile"),F),"".concat(i,"-editable"),p),"".concat(i,"-rtl"),V),s)},L),f.createElement(AI,Le({},ye,{renderTabBar:_})),f.createElement(jI,Le({destroyInactiveTabPane:R},se,{animated:H}))))});const BI={motionAppear:!1,motionEnter:!0,motionLeave:!0};function LI(e,t={inkBar:!0,tabPane:!1}){let r;return t===!1?r={inkBar:!1,tabPane:!1}:t===!0?r={inkBar:!0,tabPane:!0}:r=Object.assign({inkBar:!0},typeof t=="object"?t:{}),r.tabPane&&(r.tabPaneMotion=Object.assign(Object.assign({},BI),{motionName:ah(e,"switch")})),r}var HI=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);it)}function VI(e,t){if(e)return e.map(a=>{var i;const s=(i=a.destroyOnHidden)!==null&&i!==void 0?i:a.destroyInactiveTabPane;return Object.assign(Object.assign({},a),{destroyInactiveTabPane:s})});const r=kr(t).map(a=>{if(f.isValidElement(a)){const{key:i,props:s}=a,c=s||{},{tab:d}=c,m=HI(c,["tab"]);return Object.assign(Object.assign({key:String(i)},m),{label:d})}return null});return FI(r)}const UI=e=>{const{componentCls:t,motionDurationSlow:r}=e;return[{[t]:{[`${t}-switch`]:{"&-appear, &-enter":{transition:"none","&-start":{opacity:0},"&-active":{opacity:1,transition:`opacity ${r}`}},"&-leave":{position:"absolute",transition:"none",inset:0,"&-start":{opacity:1},"&-active":{opacity:0,transition:`opacity ${r}`}}}}},[$f(e,"slide-up"),$f(e,"slide-down")]]},qI=e=>{const{componentCls:t,tabsCardPadding:r,cardBg:a,cardGutter:i,colorBorderSecondary:s,itemSelectedColor:c}=e;return{[`${t}-card`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{margin:0,padding:r,background:a,border:`${de(e.lineWidth)} ${e.lineType} ${s}`,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOut}`},[`${t}-tab-active`]:{color:c,background:e.colorBgContainer},[`${t}-tab-focus:has(${t}-tab-btn:focus-visible)`]:cc(e,-3),[`& ${t}-tab${t}-tab-focus ${t}-tab-btn:focus-visible`]:{outline:"none"},[`${t}-ink-bar`]:{visibility:"hidden"}},[`&${t}-top, &${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab + ${t}-tab`]:{marginLeft:{_skip_check_:!0,value:de(i)}}}},[`&${t}-top`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:`${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)} 0 0`},[`${t}-tab-active`]:{borderBottomColor:e.colorBgContainer}}},[`&${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:`0 0 ${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)}`},[`${t}-tab-active`]:{borderTopColor:e.colorBgContainer}}},[`&${t}-left, &${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab + ${t}-tab`]:{marginTop:de(i)}}},[`&${t}-left`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`${de(e.borderRadiusLG)} 0 0 ${de(e.borderRadiusLG)}`}},[`${t}-tab-active`]:{borderRightColor:{_skip_check_:!0,value:e.colorBgContainer}}}},[`&${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`0 ${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)} 0`}},[`${t}-tab-active`]:{borderLeftColor:{_skip_check_:!0,value:e.colorBgContainer}}}}}}},GI=e=>{const{componentCls:t,itemHoverColor:r,dropdownEdgeChildVerticalPadding:a}=e;return{[`${t}-dropdown`]:Object.assign(Object.assign({},Tr(e)),{position:"absolute",top:-9999,left:{_skip_check_:!0,value:-9999},zIndex:e.zIndexPopup,display:"block","&-hidden":{display:"none"},[`${t}-dropdown-menu`]:{maxHeight:e.tabsDropdownHeight,margin:0,padding:`${de(a)} 0`,overflowX:"hidden",overflowY:"auto",textAlign:{_skip_check_:!0,value:"left"},listStyleType:"none",backgroundColor:e.colorBgContainer,backgroundClip:"padding-box",borderRadius:e.borderRadiusLG,outline:"none",boxShadow:e.boxShadowSecondary,"&-item":Object.assign(Object.assign({},hi),{display:"flex",alignItems:"center",minWidth:e.tabsDropdownWidth,margin:0,padding:`${de(e.paddingXXS)} ${de(e.paddingSM)}`,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer",transition:`all ${e.motionDurationSlow}`,"> span":{flex:1,whiteSpace:"nowrap"},"&-remove":{flex:"none",marginLeft:{_skip_check_:!0,value:e.marginSM},color:e.colorIcon,fontSize:e.fontSizeSM,background:"transparent",border:0,cursor:"pointer","&:hover":{color:r}},"&:hover":{background:e.controlItemBgHover},"&-disabled":{"&, &:hover":{color:e.colorTextDisabled,background:"transparent",cursor:"not-allowed"}}})}})}},WI=e=>{const{componentCls:t,margin:r,colorBorderSecondary:a,horizontalMargin:i,verticalItemPadding:s,verticalItemMargin:c,calc:d}=e;return{[`${t}-top, ${t}-bottom`]:{flexDirection:"column",[`> ${t}-nav, > div > ${t}-nav`]:{margin:i,"&::before":{position:"absolute",right:{_skip_check_:!0,value:0},left:{_skip_check_:!0,value:0},borderBottom:`${de(e.lineWidth)} ${e.lineType} ${a}`,content:"''"},[`${t}-ink-bar`]:{height:e.lineWidthBold,"&-animated":{transition:`width ${e.motionDurationSlow}, left ${e.motionDurationSlow}, + right ${e.motionDurationSlow}`}},[`${t}-nav-wrap`]:{"&::before, &::after":{top:0,bottom:0,width:e.controlHeight},"&::before":{left:{_skip_check_:!0,value:0},boxShadow:e.boxShadowTabsOverflowLeft},"&::after":{right:{_skip_check_:!0,value:0},boxShadow:e.boxShadowTabsOverflowRight},[`&${t}-nav-wrap-ping-left::before`]:{opacity:1},[`&${t}-nav-wrap-ping-right::after`]:{opacity:1}}}},[`${t}-top`]:{[`> ${t}-nav, + > div > ${t}-nav`]:{"&::before":{bottom:0},[`${t}-ink-bar`]:{bottom:0}}},[`${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{order:1,marginTop:r,marginBottom:0,"&::before":{top:0},[`${t}-ink-bar`]:{top:0}},[`> ${t}-content-holder, > div > ${t}-content-holder`]:{order:0}},[`${t}-left, ${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{flexDirection:"column",minWidth:d(e.controlHeight).mul(1.25).equal(),[`${t}-tab`]:{padding:s,textAlign:"center"},[`${t}-tab + ${t}-tab`]:{margin:c},[`${t}-nav-wrap`]:{flexDirection:"column","&::before, &::after":{right:{_skip_check_:!0,value:0},left:{_skip_check_:!0,value:0},height:e.controlHeight},"&::before":{top:0,boxShadow:e.boxShadowTabsOverflowTop},"&::after":{bottom:0,boxShadow:e.boxShadowTabsOverflowBottom},[`&${t}-nav-wrap-ping-top::before`]:{opacity:1},[`&${t}-nav-wrap-ping-bottom::after`]:{opacity:1}},[`${t}-ink-bar`]:{width:e.lineWidthBold,"&-animated":{transition:`height ${e.motionDurationSlow}, top ${e.motionDurationSlow}`}},[`${t}-nav-list, ${t}-nav-operations`]:{flex:"1 0 auto",flexDirection:"column"}}},[`${t}-left`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-ink-bar`]:{right:{_skip_check_:!0,value:0}}},[`> ${t}-content-holder, > div > ${t}-content-holder`]:{marginLeft:{_skip_check_:!0,value:de(d(e.lineWidth).mul(-1).equal())},borderLeft:{_skip_check_:!0,value:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},[`> ${t}-content > ${t}-tabpane`]:{paddingLeft:{_skip_check_:!0,value:e.paddingLG}}}},[`${t}-right`]:{[`> ${t}-nav, > div > ${t}-nav`]:{order:1,[`${t}-ink-bar`]:{left:{_skip_check_:!0,value:0}}},[`> ${t}-content-holder, > div > ${t}-content-holder`]:{order:0,marginRight:{_skip_check_:!0,value:d(e.lineWidth).mul(-1).equal()},borderRight:{_skip_check_:!0,value:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`},[`> ${t}-content > ${t}-tabpane`]:{paddingRight:{_skip_check_:!0,value:e.paddingLG}}}}}},KI=e=>{const{componentCls:t,cardPaddingSM:r,cardPaddingLG:a,cardHeightSM:i,cardHeightLG:s,horizontalItemPaddingSM:c,horizontalItemPaddingLG:d}=e;return{[t]:{"&-small":{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:c,fontSize:e.titleFontSizeSM}}},"&-large":{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:d,fontSize:e.titleFontSizeLG,lineHeight:e.lineHeightLG}}}},[`${t}-card`]:{[`&${t}-small`]:{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:r},[`${t}-nav-add`]:{minWidth:i,minHeight:i}},[`&${t}-bottom`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:`0 0 ${de(e.borderRadius)} ${de(e.borderRadius)}`}},[`&${t}-top`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:`${de(e.borderRadius)} ${de(e.borderRadius)} 0 0`}},[`&${t}-right`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`0 ${de(e.borderRadius)} ${de(e.borderRadius)} 0`}}},[`&${t}-left`]:{[`> ${t}-nav ${t}-tab`]:{borderRadius:{_skip_check_:!0,value:`${de(e.borderRadius)} 0 0 ${de(e.borderRadius)}`}}}},[`&${t}-large`]:{[`> ${t}-nav`]:{[`${t}-tab`]:{padding:a},[`${t}-nav-add`]:{minWidth:s,minHeight:s}}}}}},XI=e=>{const{componentCls:t,itemActiveColor:r,itemHoverColor:a,iconCls:i,tabsHorizontalItemMargin:s,horizontalItemPadding:c,itemSelectedColor:d,itemColor:m}=e,v=`${t}-tab`;return{[v]:{position:"relative",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent",display:"inline-flex",alignItems:"center",padding:c,fontSize:e.titleFontSize,background:"transparent",border:0,outline:"none",cursor:"pointer",color:m,"&-btn, &-remove":{"&:focus:not(:focus-visible), &:active":{color:r}},"&-btn":{outline:"none",transition:`all ${e.motionDurationSlow}`,[`${v}-icon:not(:last-child)`]:{marginInlineEnd:e.marginSM}},"&-remove":Object.assign({flex:"none",lineHeight:1,marginRight:{_skip_check_:!0,value:e.calc(e.marginXXS).mul(-1).equal()},marginLeft:{_skip_check_:!0,value:e.marginXS},color:e.colorIcon,fontSize:e.fontSizeSM,background:"transparent",border:"none",outline:"none",cursor:"pointer",transition:`all ${e.motionDurationSlow}`,"&:hover":{color:e.colorTextHeading}},Ol(e)),"&:hover":{color:a},[`&${v}-active ${v}-btn`]:{color:d,textShadow:e.tabsActiveTextShadow},[`&${v}-focus ${v}-btn:focus-visible`]:cc(e),[`&${v}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed"},[`&${v}-disabled ${v}-btn, &${v}-disabled ${t}-remove`]:{"&:focus, &:active":{color:e.colorTextDisabled}},[`& ${v}-remove ${i}`]:{margin:0,verticalAlign:"middle"},[`${i}:not(:last-child)`]:{marginRight:{_skip_check_:!0,value:e.marginSM}}},[`${v} + ${v}`]:{margin:{_skip_check_:!0,value:s}}}},YI=e=>{const{componentCls:t,tabsHorizontalItemMarginRTL:r,iconCls:a,cardGutter:i,calc:s}=e;return{[`${t}-rtl`]:{direction:"rtl",[`${t}-nav`]:{[`${t}-tab`]:{margin:{_skip_check_:!0,value:r},[`${t}-tab:last-of-type`]:{marginLeft:{_skip_check_:!0,value:0}},[a]:{marginRight:{_skip_check_:!0,value:0},marginLeft:{_skip_check_:!0,value:de(e.marginSM)}},[`${t}-tab-remove`]:{marginRight:{_skip_check_:!0,value:de(e.marginXS)},marginLeft:{_skip_check_:!0,value:de(s(e.marginXXS).mul(-1).equal())},[a]:{margin:0}}}},[`&${t}-left`]:{[`> ${t}-nav`]:{order:1},[`> ${t}-content-holder`]:{order:0}},[`&${t}-right`]:{[`> ${t}-nav`]:{order:0},[`> ${t}-content-holder`]:{order:1}},[`&${t}-card${t}-top, &${t}-card${t}-bottom`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-tab + ${t}-tab`]:{marginRight:{_skip_check_:!0,value:i},marginLeft:{_skip_check_:!0,value:0}}}}},[`${t}-dropdown-rtl`]:{direction:"rtl"},[`${t}-menu-item`]:{[`${t}-dropdown-rtl`]:{textAlign:{_skip_check_:!0,value:"right"}}}}},QI=e=>{const{componentCls:t,tabsCardPadding:r,cardHeight:a,cardGutter:i,itemHoverColor:s,itemActiveColor:c,colorBorderSecondary:d}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign({},Tr(e)),{display:"flex",[`> ${t}-nav, > div > ${t}-nav`]:{position:"relative",display:"flex",flex:"none",alignItems:"center",[`${t}-nav-wrap`]:{position:"relative",display:"flex",flex:"auto",alignSelf:"stretch",overflow:"hidden",whiteSpace:"nowrap",transform:"translate(0)","&::before, &::after":{position:"absolute",zIndex:1,opacity:0,transition:`opacity ${e.motionDurationSlow}`,content:"''",pointerEvents:"none"}},[`${t}-nav-list`]:{position:"relative",display:"flex",transition:`opacity ${e.motionDurationSlow}`},[`${t}-nav-operations`]:{display:"flex",alignSelf:"stretch"},[`${t}-nav-operations-hidden`]:{position:"absolute",visibility:"hidden",pointerEvents:"none"},[`${t}-nav-more`]:{position:"relative",padding:r,background:"transparent",border:0,color:e.colorText,"&::after":{position:"absolute",right:{_skip_check_:!0,value:0},bottom:0,left:{_skip_check_:!0,value:0},height:e.calc(e.controlHeightLG).div(8).equal(),transform:"translateY(100%)",content:"''"}},[`${t}-nav-add`]:Object.assign({minWidth:a,minHeight:a,marginLeft:{_skip_check_:!0,value:i},background:"transparent",border:`${de(e.lineWidth)} ${e.lineType} ${d}`,borderRadius:`${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)} 0 0`,outline:"none",cursor:"pointer",color:e.colorText,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOut}`,"&:hover":{color:s},"&:active, &:focus:not(:focus-visible)":{color:c}},Ol(e,-3))},[`${t}-extra-content`]:{flex:"none"},[`${t}-ink-bar`]:{position:"absolute",background:e.inkBarColor,pointerEvents:"none"}}),XI(e)),{[`${t}-content`]:{position:"relative",width:"100%"},[`${t}-content-holder`]:{flex:"auto",minWidth:0,minHeight:0},[`${t}-tabpane`]:Object.assign(Object.assign({},Ol(e)),{"&-hidden":{display:"none"}})}),[`${t}-centered`]:{[`> ${t}-nav, > div > ${t}-nav`]:{[`${t}-nav-wrap`]:{[`&:not([class*='${t}-nav-wrap-ping']) > ${t}-nav-list`]:{margin:"auto"}}}}}},ZI=e=>{const{cardHeight:t,cardHeightSM:r,cardHeightLG:a,controlHeight:i,controlHeightLG:s}=e,c=t||s,d=r||i,m=a||s+8;return{zIndexPopup:e.zIndexPopupBase+50,cardBg:e.colorFillAlter,cardHeight:c,cardHeightSM:d,cardHeightLG:m,cardPadding:`${(c-e.fontHeight)/2-e.lineWidth}px ${e.padding}px`,cardPaddingSM:`${(d-e.fontHeight)/2-e.lineWidth}px ${e.paddingXS}px`,cardPaddingLG:`${(m-e.fontHeightLG)/2-e.lineWidth}px ${e.padding}px`,titleFontSize:e.fontSize,titleFontSizeLG:e.fontSizeLG,titleFontSizeSM:e.fontSize,inkBarColor:e.colorPrimary,horizontalMargin:`0 0 ${e.margin}px 0`,horizontalItemGutter:32,horizontalItemMargin:"",horizontalItemMarginRTL:"",horizontalItemPadding:`${e.paddingSM}px 0`,horizontalItemPaddingSM:`${e.paddingXS}px 0`,horizontalItemPaddingLG:`${e.padding}px 0`,verticalItemPadding:`${e.paddingXS}px ${e.paddingLG}px`,verticalItemMargin:`${e.margin}px 0 0 0`,itemColor:e.colorText,itemSelectedColor:e.colorPrimary,itemHoverColor:e.colorPrimaryHover,itemActiveColor:e.colorPrimaryActive,cardGutter:e.marginXXS/2}},JI=_n("Tabs",e=>{const t=un(e,{tabsCardPadding:e.cardPadding,dropdownEdgeChildVerticalPadding:e.paddingXXS,tabsActiveTextShadow:"0 0 0.25px currentcolor",tabsDropdownHeight:200,tabsDropdownWidth:120,tabsHorizontalItemMargin:`0 0 0 ${de(e.horizontalItemGutter)}`,tabsHorizontalItemMarginRTL:`0 0 0 ${de(e.horizontalItemGutter)}`});return[KI(t),YI(t),WI(t),GI(t),qI(t),QI(t),UI(t)]},ZI),kI=()=>null;var eP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var r,a,i,s,c,d,m,v,p,h,y;const{type:C,className:w,rootClassName:x,size:S,onEdit:E,hideAdd:O,centered:R,addIcon:_,removeIcon:T,moreIcon:M,more:N,popupClassName:A,children:j,items:I,animated:L,style:B,indicatorSize:V,indicator:H,destroyInactiveTabPane:Q,destroyOnHidden:z}=e,F=eP(e,["type","className","rootClassName","size","onEdit","hideAdd","centered","addIcon","removeIcon","moreIcon","more","popupClassName","children","items","animated","style","indicatorSize","indicator","destroyInactiveTabPane","destroyOnHidden"]),{prefixCls:q}=F,{direction:ee,tabs:Z,getPrefixCls:D,getPopupContainer:U}=f.useContext(It),G=D("tabs",q),W=Dl(G),[X,Y,ie]=JI(G,W),ce=f.useRef(null);f.useImperativeHandle(t,()=>({nativeElement:ce.current}));let fe;C==="editable-card"&&(fe={onEdit:(te,{key:xe,event:Ee})=>{E==null||E(te==="add"?Ee:xe,te)},removeIcon:(r=T??(Z==null?void 0:Z.removeIcon))!==null&&r!==void 0?r:f.createElement(bc,null),addIcon:(_??(Z==null?void 0:Z.addIcon))||f.createElement(bI,null),showAdd:O!==!0});const Te=D(),he=Ta(S),se=VI(I,j),ye=LI(G,L),be=Object.assign(Object.assign({},Z==null?void 0:Z.style),B),ge={align:(a=H==null?void 0:H.align)!==null&&a!==void 0?a:(i=Z==null?void 0:Z.indicator)===null||i===void 0?void 0:i.align,size:(m=(c=(s=H==null?void 0:H.size)!==null&&s!==void 0?s:V)!==null&&c!==void 0?c:(d=Z==null?void 0:Z.indicator)===null||d===void 0?void 0:d.size)!==null&&m!==void 0?m:Z==null?void 0:Z.indicatorSize};return X(f.createElement(PI,Object.assign({ref:ce,direction:ee,getPopupContainer:U},F,{items:se,className:ae({[`${G}-${he}`]:he,[`${G}-card`]:["card","editable-card"].includes(C),[`${G}-editable-card`]:C==="editable-card",[`${G}-centered`]:R},Z==null?void 0:Z.className,w,x,Y,ie,W),popupClassName:ae(A,Y,ie,W),style:be,editable:fe,more:Object.assign({icon:(y=(h=(p=(v=Z==null?void 0:Z.more)===null||v===void 0?void 0:v.icon)!==null&&p!==void 0?p:Z==null?void 0:Z.moreIcon)!==null&&h!==void 0?h:M)!==null&&y!==void 0?y:f.createElement(eI,null),transitionName:`${Te}-slide-up`},N),prefixCls:G,animated:ye,indicator:ge,destroyInactiveTabPane:z??Q})))}),VO=tP;VO.TabPane=kI;var nP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var{prefixCls:t,className:r,hoverable:a=!0}=e,i=nP(e,["prefixCls","className","hoverable"]);const{getPrefixCls:s}=f.useContext(It),c=s("card",t),d=ae(`${c}-grid`,r,{[`${c}-grid-hoverable`]:a});return f.createElement("div",Object.assign({},i,{className:d}))},rP=e=>{const{antCls:t,componentCls:r,headerHeight:a,headerPadding:i,tabsMarginBottom:s}=e;return Object.assign(Object.assign({display:"flex",justifyContent:"center",flexDirection:"column",minHeight:a,marginBottom:-1,padding:`0 ${de(i)}`,color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.headerFontSize,background:e.headerBg,borderBottom:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`,borderRadius:`${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)} 0 0`},Kf()),{"&-wrapper":{width:"100%",display:"flex",alignItems:"center"},"&-title":Object.assign(Object.assign({display:"inline-block",flex:1},hi),{[` + > ${r}-typography, + > ${r}-typography-edit-content + `]:{insetInlineStart:0,marginTop:0,marginBottom:0}}),[`${t}-tabs-top`]:{clear:"both",marginBottom:s,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,"&-bar":{borderBottom:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`}}})},aP=e=>{const{cardPaddingBase:t,colorBorderSecondary:r,cardShadow:a,lineWidth:i}=e;return{width:"33.33%",padding:t,border:0,borderRadius:0,boxShadow:` + ${de(i)} 0 0 0 ${r}, + 0 ${de(i)} 0 0 ${r}, + ${de(i)} ${de(i)} 0 0 ${r}, + ${de(i)} 0 0 0 ${r} inset, + 0 ${de(i)} 0 0 ${r} inset; + `,transition:`all ${e.motionDurationMid}`,"&-hoverable:hover":{position:"relative",zIndex:1,boxShadow:a}}},oP=e=>{const{componentCls:t,iconCls:r,actionsLiMargin:a,cardActionsIconSize:i,colorBorderSecondary:s,actionsBg:c}=e;return Object.assign(Object.assign({margin:0,padding:0,listStyle:"none",background:c,borderTop:`${de(e.lineWidth)} ${e.lineType} ${s}`,display:"flex",borderRadius:`0 0 ${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)}`},Kf()),{"& > li":{margin:a,color:e.colorTextDescription,textAlign:"center","> span":{position:"relative",display:"block",minWidth:e.calc(e.cardActionsIconSize).mul(2).equal(),fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer","&:hover":{color:e.colorPrimary,transition:`color ${e.motionDurationMid}`},[`a:not(${t}-btn), > ${r}`]:{display:"inline-block",width:"100%",color:e.colorIcon,lineHeight:de(e.fontHeight),transition:`color ${e.motionDurationMid}`,"&:hover":{color:e.colorPrimary}},[`> ${r}`]:{fontSize:i,lineHeight:de(e.calc(i).mul(e.lineHeight).equal())}},"&:not(:last-child)":{borderInlineEnd:`${de(e.lineWidth)} ${e.lineType} ${s}`}}})},iP=e=>Object.assign(Object.assign({margin:`${de(e.calc(e.marginXXS).mul(-1).equal())} 0`,display:"flex"},Kf()),{"&-avatar":{paddingInlineEnd:e.padding},"&-detail":{overflow:"hidden",flex:1,"> div:not(:last-child)":{marginBottom:e.marginXS}},"&-title":Object.assign({color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG},hi),"&-description":{color:e.colorTextDescription}}),lP=e=>{const{componentCls:t,colorFillAlter:r,headerPadding:a,bodyPadding:i}=e;return{[`${t}-head`]:{padding:`0 ${de(a)}`,background:r,"&-title":{fontSize:e.fontSize}},[`${t}-body`]:{padding:`${de(e.padding)} ${de(i)}`}}},sP=e=>{const{componentCls:t}=e;return{overflow:"hidden",[`${t}-body`]:{userSelect:"none"}}},cP=e=>{const{componentCls:t,cardShadow:r,cardHeadPadding:a,colorBorderSecondary:i,boxShadowTertiary:s,bodyPadding:c,extraColor:d}=e;return{[t]:Object.assign(Object.assign({},Tr(e)),{position:"relative",background:e.colorBgContainer,borderRadius:e.borderRadiusLG,[`&:not(${t}-bordered)`]:{boxShadow:s},[`${t}-head`]:rP(e),[`${t}-extra`]:{marginInlineStart:"auto",color:d,fontWeight:"normal",fontSize:e.fontSize},[`${t}-body`]:{padding:c,borderRadius:`0 0 ${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)}`},[`${t}-grid`]:aP(e),[`${t}-cover`]:{"> *":{display:"block",width:"100%",borderRadius:`${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)} 0 0`}},[`${t}-actions`]:oP(e),[`${t}-meta`]:iP(e)}),[`${t}-bordered`]:{border:`${de(e.lineWidth)} ${e.lineType} ${i}`,[`${t}-cover`]:{marginTop:-1,marginInlineStart:-1,marginInlineEnd:-1}},[`${t}-hoverable`]:{cursor:"pointer",transition:`box-shadow ${e.motionDurationMid}, border-color ${e.motionDurationMid}`,"&:hover":{borderColor:"transparent",boxShadow:r}},[`${t}-contain-grid`]:{borderRadius:`${de(e.borderRadiusLG)} ${de(e.borderRadiusLG)} 0 0 `,[`${t}-body`]:{display:"flex",flexWrap:"wrap"},[`&:not(${t}-loading) ${t}-body`]:{marginBlockStart:e.calc(e.lineWidth).mul(-1).equal(),marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),padding:0}},[`${t}-contain-tabs`]:{[`> div${t}-head`]:{minHeight:0,[`${t}-head-title, ${t}-extra`]:{paddingTop:a}}},[`${t}-type-inner`]:lP(e),[`${t}-loading`]:sP(e),[`${t}-rtl`]:{direction:"rtl"}}},uP=e=>{const{componentCls:t,bodyPaddingSM:r,headerPaddingSM:a,headerHeightSM:i,headerFontSizeSM:s}=e;return{[`${t}-small`]:{[`> ${t}-head`]:{minHeight:i,padding:`0 ${de(a)}`,fontSize:s,[`> ${t}-head-wrapper`]:{[`> ${t}-extra`]:{fontSize:e.fontSize}}},[`> ${t}-body`]:{padding:r}},[`${t}-small${t}-contain-tabs`]:{[`> ${t}-head`]:{[`${t}-head-title, ${t}-extra`]:{paddingTop:0,display:"flex",alignItems:"center"}}}}},fP=e=>{var t,r;return{headerBg:"transparent",headerFontSize:e.fontSizeLG,headerFontSizeSM:e.fontSize,headerHeight:e.fontSizeLG*e.lineHeightLG+e.padding*2,headerHeightSM:e.fontSize*e.lineHeight+e.paddingXS*2,actionsBg:e.colorBgContainer,actionsLiMargin:`${e.paddingSM}px 0`,tabsMarginBottom:-e.padding-e.lineWidth,extraColor:e.colorText,bodyPaddingSM:12,headerPaddingSM:12,bodyPadding:(t=e.bodyPadding)!==null&&t!==void 0?t:e.paddingLG,headerPadding:(r=e.headerPadding)!==null&&r!==void 0?r:e.paddingLG}},dP=_n("Card",e=>{const t=un(e,{cardShadow:e.boxShadowCard,cardHeadPadding:e.padding,cardPaddingBase:e.paddingLG,cardActionsIconSize:e.fontSize});return[cP(t),uP(t)]},fP);var L1=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{actionClasses:t,actions:r=[],actionStyle:a}=e;return f.createElement("ul",{className:t,style:a},r.map((i,s)=>{const c=`action-${s}`;return f.createElement("li",{style:{width:`${100/r.length}%`},key:c},f.createElement("span",null,i))}))},vP=f.forwardRef((e,t)=>{const{prefixCls:r,className:a,rootClassName:i,style:s,extra:c,headStyle:d={},bodyStyle:m={},title:v,loading:p,bordered:h,variant:y,size:C,type:w,cover:x,actions:S,tabList:E,children:O,activeTabKey:R,defaultActiveTabKey:_,tabBarExtraContent:T,hoverable:M,tabProps:N={},classNames:A,styles:j}=e,I=L1(e,["prefixCls","className","rootClassName","style","extra","headStyle","bodyStyle","title","loading","bordered","variant","size","type","cover","actions","tabList","children","activeTabKey","defaultActiveTabKey","tabBarExtraContent","hoverable","tabProps","classNames","styles"]),{getPrefixCls:L,direction:B,card:V}=f.useContext(It),[H]=fd("card",y,h),Q=je=>{var Ae;(Ae=e.onTabChange)===null||Ae===void 0||Ae.call(e,je)},z=je=>{var Ae;return ae((Ae=V==null?void 0:V.classNames)===null||Ae===void 0?void 0:Ae[je],A==null?void 0:A[je])},F=je=>{var Ae;return Object.assign(Object.assign({},(Ae=V==null?void 0:V.styles)===null||Ae===void 0?void 0:Ae[je]),j==null?void 0:j[je])},q=f.useMemo(()=>{let je=!1;return f.Children.forEach(O,Ae=>{(Ae==null?void 0:Ae.type)===UO&&(je=!0)}),je},[O]),ee=L("card",r),[Z,D,U]=dP(ee),G=f.createElement(Bl,{loading:!0,active:!0,paragraph:{rows:4},title:!1},O),W=R!==void 0,X=Object.assign(Object.assign({},N),{[W?"activeKey":"defaultActiveKey"]:W?R:_,tabBarExtraContent:T});let Y;const ie=Ta(C),ce=!ie||ie==="default"?"large":ie,fe=E?f.createElement(VO,Object.assign({size:ce},X,{className:`${ee}-head-tabs`,onChange:Q,items:E.map(je=>{var{tab:Ae}=je,He=L1(je,["tab"]);return Object.assign({label:Ae},He)})})):null;if(v||c||fe){const je=ae(`${ee}-head`,z("header")),Ae=ae(`${ee}-head-title`,z("title")),He=ae(`${ee}-extra`,z("extra")),Ie=Object.assign(Object.assign({},d),F("header"));Y=f.createElement("div",{className:je,style:Ie},f.createElement("div",{className:`${ee}-head-wrapper`},v&&f.createElement("div",{className:Ae,style:F("title")},v),c&&f.createElement("div",{className:He,style:F("extra")},c)),fe)}const Te=ae(`${ee}-cover`,z("cover")),he=x?f.createElement("div",{className:Te,style:F("cover")},x):null,se=ae(`${ee}-body`,z("body")),ye=Object.assign(Object.assign({},m),F("body")),be=f.createElement("div",{className:se,style:ye},p?G:O),ge=ae(`${ee}-actions`,z("actions")),te=S!=null&&S.length?f.createElement(mP,{actionClasses:ge,actionStyle:F("actions"),actions:S}):null,xe=or(I,["onTabChange"]),Ee=ae(ee,V==null?void 0:V.className,{[`${ee}-loading`]:p,[`${ee}-bordered`]:H!=="borderless",[`${ee}-hoverable`]:M,[`${ee}-contain-grid`]:q,[`${ee}-contain-tabs`]:E==null?void 0:E.length,[`${ee}-${ie}`]:ie,[`${ee}-type-${w}`]:!!w,[`${ee}-rtl`]:B==="rtl"},a,i,D,U),_e=Object.assign(Object.assign({},V==null?void 0:V.style),s);return Z(f.createElement("div",Object.assign({ref:t},xe,{className:Ee,style:_e}),Y,he,be,te))});var gP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:t,className:r,avatar:a,title:i,description:s}=e,c=gP(e,["prefixCls","className","avatar","title","description"]),{getPrefixCls:d}=f.useContext(It),m=d("card",t),v=ae(`${m}-meta`,r),p=a?f.createElement("div",{className:`${m}-meta-avatar`},a):null,h=i?f.createElement("div",{className:`${m}-meta-title`},i):null,y=s?f.createElement("div",{className:`${m}-meta-description`},s):null,C=h||y?f.createElement("div",{className:`${m}-meta-detail`},h,y):null;return f.createElement("div",Object.assign({},c,{className:v}),p,C)},qO=vP;qO.Grid=UO;qO.Meta=pP;function hP(e,t,r){var a=r||{},i=a.noTrailing,s=i===void 0?!1:i,c=a.noLeading,d=c===void 0?!1:c,m=a.debounceMode,v=m===void 0?void 0:m,p,h=!1,y=0;function C(){p&&clearTimeout(p)}function w(S){var E=S||{},O=E.upcomingOnly,R=O===void 0?!1:O;C(),h=!R}function x(){for(var S=arguments.length,E=new Array(S),O=0;Oe?d?(y=Date.now(),s||(p=setTimeout(v?M:T,e))):T():s!==!0&&(p=setTimeout(v?M:T,v===void 0?e-_:e))}return x.cancel=w,x}function bP(e,t,r){var a={},i=a.atBegin,s=i===void 0?!1:i;return hP(e,t,{debounceMode:s!==!1})}const GO=f.createContext({});var yP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{getPrefixCls:r,direction:a}=f.useContext(It),{gutter:i,wrap:s}=f.useContext(GO),{prefixCls:c,span:d,order:m,offset:v,push:p,pull:h,className:y,children:C,flex:w,style:x}=e,S=yP(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),E=r("col",c),[O,R,_]=cj(E),T={};let M={};SP.forEach(j=>{let I={};const L=e[j];typeof L=="number"?I.span=L:typeof L=="object"&&(I=L||{}),delete S[j],M=Object.assign(Object.assign({},M),{[`${E}-${j}-${I.span}`]:I.span!==void 0,[`${E}-${j}-order-${I.order}`]:I.order||I.order===0,[`${E}-${j}-offset-${I.offset}`]:I.offset||I.offset===0,[`${E}-${j}-push-${I.push}`]:I.push||I.push===0,[`${E}-${j}-pull-${I.pull}`]:I.pull||I.pull===0,[`${E}-rtl`]:a==="rtl"}),I.flex&&(M[`${E}-${j}-flex`]=!0,T[`--${E}-${j}-flex`]=H1(I.flex))});const N=ae(E,{[`${E}-${d}`]:d!==void 0,[`${E}-order-${m}`]:m,[`${E}-offset-${v}`]:v,[`${E}-push-${p}`]:p,[`${E}-pull-${h}`]:h},y,M,R,_),A={};if(i!=null&&i[0]){const j=typeof i[0]=="number"?`${i[0]/2}px`:`calc(${i[0]} / 2)`;A.paddingLeft=j,A.paddingRight=j}return w&&(A.flex=H1(w),s===!1&&!A.minWidth&&(A.minWidth=0)),O(f.createElement("div",Object.assign({},S,{style:Object.assign(Object.assign(Object.assign({},A),x),T),className:N,ref:t}),C))});function CP(e,t){const r=[void 0,void 0],a=Array.isArray(e)?e:[e,void 0],i=t||{xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0};return a.forEach((s,c)=>{if(typeof s=="object"&&s!==null)for(let d=0;d{if(typeof e=="string"&&a(e),typeof e=="object")for(let s=0;s{i()},[JSON.stringify(e),t]),r}const h9=f.forwardRef((e,t)=>{const{prefixCls:r,justify:a,align:i,className:s,style:c,children:d,gutter:m=0,wrap:v}=e,p=xP(e,["prefixCls","justify","align","className","style","children","gutter","wrap"]),{getPrefixCls:h,direction:y}=f.useContext(It),C=gh(!0,null),w=F1(i,C),x=F1(a,C),S=h("row",r),[E,O,R]=lj(S),_=CP(m,C),T=ae(S,{[`${S}-no-wrap`]:v===!1,[`${S}-${x}`]:x,[`${S}-${w}`]:w,[`${S}-rtl`]:y==="rtl"},s,O,R),M={};if(_!=null&&_[0]){const I=typeof _[0]=="number"?`${_[0]/-2}px`:`calc(${_[0]} / -2)`;M.marginLeft=I,M.marginRight=I}const[N,A]=_;M.rowGap=A;const j=f.useMemo(()=>({gutter:[N,A],wrap:v}),[N,A,v]);return E(f.createElement(GO.Provider,{value:j},f.createElement("div",Object.assign({},p,{className:T,style:Object.assign(Object.assign({},M),c),ref:t}),d)))});function EP(e){return!!(e.addonBefore||e.addonAfter)}function wP(e){return!!(e.prefix||e.suffix||e.allowClear)}function V1(e,t,r){var a=t.cloneNode(!0),i=Object.create(e,{target:{value:a},currentTarget:{value:a}});return a.value=r,typeof t.selectionStart=="number"&&typeof t.selectionEnd=="number"&&(a.selectionStart=t.selectionStart,a.selectionEnd=t.selectionEnd),a.setSelectionRange=function(){t.setSelectionRange.apply(t,arguments)},i}function zf(e,t,r,a){if(r){var i=t;if(t.type==="click"){i=V1(t,e,""),r(i);return}if(e.type!=="file"&&a!==void 0){i=V1(t,e,a),r(i);return}r(i)}}function WO(e,t){if(e){e.focus(t);var r=t||{},a=r.cursor;if(a){var i=e.value.length;switch(a){case"start":e.setSelectionRange(0,0);break;case"end":e.setSelectionRange(i,i);break;default:e.setSelectionRange(0,i)}}}}var KO=ue.forwardRef(function(e,t){var r,a,i,s=e.inputElement,c=e.children,d=e.prefixCls,m=e.prefix,v=e.suffix,p=e.addonBefore,h=e.addonAfter,y=e.className,C=e.style,w=e.disabled,x=e.readOnly,S=e.focused,E=e.triggerFocus,O=e.allowClear,R=e.value,_=e.handleReset,T=e.hidden,M=e.classes,N=e.classNames,A=e.dataAttrs,j=e.styles,I=e.components,L=e.onClear,B=c??s,V=(I==null?void 0:I.affixWrapper)||"span",H=(I==null?void 0:I.groupWrapper)||"span",Q=(I==null?void 0:I.wrapper)||"span",z=(I==null?void 0:I.groupAddon)||"span",F=f.useRef(null),q=function(ge){var te;(te=F.current)!==null&&te!==void 0&&te.contains(ge.target)&&(E==null||E())},ee=wP(e),Z=f.cloneElement(B,{value:R,className:ae((r=B.props)===null||r===void 0?void 0:r.className,!ee&&(N==null?void 0:N.variant))||null}),D=f.useRef(null);if(ue.useImperativeHandle(t,function(){return{nativeElement:D.current||F.current}}),ee){var U=null;if(O){var G=!w&&!x&&R,W="".concat(d,"-clear-icon"),X=pt(O)==="object"&&O!==null&&O!==void 0&&O.clearIcon?O.clearIcon:"✖";U=ue.createElement("button",{type:"button",tabIndex:-1,onClick:function(ge){_==null||_(ge),L==null||L()},onMouseDown:function(ge){return ge.preventDefault()},className:ae(W,K(K({},"".concat(W,"-hidden"),!G),"".concat(W,"-has-suffix"),!!v))},X)}var Y="".concat(d,"-affix-wrapper"),ie=ae(Y,K(K(K(K(K({},"".concat(d,"-disabled"),w),"".concat(Y,"-disabled"),w),"".concat(Y,"-focused"),S),"".concat(Y,"-readonly"),x),"".concat(Y,"-input-with-clear-btn"),v&&O&&R),M==null?void 0:M.affixWrapper,N==null?void 0:N.affixWrapper,N==null?void 0:N.variant),ce=(v||O)&&ue.createElement("span",{className:ae("".concat(d,"-suffix"),N==null?void 0:N.suffix),style:j==null?void 0:j.suffix},U,v);Z=ue.createElement(V,Le({className:ie,style:j==null?void 0:j.affixWrapper,onClick:q},A==null?void 0:A.affixWrapper,{ref:F}),m&&ue.createElement("span",{className:ae("".concat(d,"-prefix"),N==null?void 0:N.prefix),style:j==null?void 0:j.prefix},m),Z,ce)}if(EP(e)){var fe="".concat(d,"-group"),Te="".concat(fe,"-addon"),he="".concat(fe,"-wrapper"),se=ae("".concat(d,"-wrapper"),fe,M==null?void 0:M.wrapper,N==null?void 0:N.wrapper),ye=ae(he,K({},"".concat(he,"-disabled"),w),M==null?void 0:M.group,N==null?void 0:N.groupWrapper);Z=ue.createElement(H,{className:ye,ref:D},ue.createElement(Q,{className:se},p&&ue.createElement(z,{className:Te},p),Z,h&&ue.createElement(z,{className:Te},h)))}return ue.cloneElement(Z,{className:ae((a=Z.props)===null||a===void 0?void 0:a.className,y)||null,style:J(J({},(i=Z.props)===null||i===void 0?void 0:i.style),C),hidden:T})}),OP=["show"];function XO(e,t){return f.useMemo(function(){var r={};t&&(r.show=pt(t)==="object"&&t.formatter?t.formatter:!!t),r=J(J({},r),e);var a=r,i=a.show,s=zt(a,OP);return J(J({},s),{},{show:!!i,showFormatter:typeof i=="function"?i:void 0,strategy:s.strategy||function(c){return c.length}})},[e,t])}var $P=["autoComplete","onChange","onFocus","onBlur","onPressEnter","onKeyDown","onKeyUp","prefixCls","disabled","htmlSize","className","maxLength","suffix","showCount","count","type","classes","classNames","styles","onCompositionStart","onCompositionEnd"],RP=f.forwardRef(function(e,t){var r=e.autoComplete,a=e.onChange,i=e.onFocus,s=e.onBlur,c=e.onPressEnter,d=e.onKeyDown,m=e.onKeyUp,v=e.prefixCls,p=v===void 0?"rc-input":v,h=e.disabled,y=e.htmlSize,C=e.className,w=e.maxLength,x=e.suffix,S=e.showCount,E=e.count,O=e.type,R=O===void 0?"text":O,_=e.classes,T=e.classNames,M=e.styles,N=e.onCompositionStart,A=e.onCompositionEnd,j=zt(e,$P),I=f.useState(!1),L=oe(I,2),B=L[0],V=L[1],H=f.useRef(!1),Q=f.useRef(!1),z=f.useRef(null),F=f.useRef(null),q=function(Ce){z.current&&WO(z.current,Ce)},ee=ur(e.defaultValue,{value:e.value}),Z=oe(ee,2),D=Z[0],U=Z[1],G=D==null?"":String(D),W=f.useState(null),X=oe(W,2),Y=X[0],ie=X[1],ce=XO(E,S),fe=ce.max||w,Te=ce.strategy(G),he=!!fe&&Te>fe;f.useImperativeHandle(t,function(){var Ie;return{focus:q,blur:function(){var Xe;(Xe=z.current)===null||Xe===void 0||Xe.blur()},setSelectionRange:function(Xe,at,mt){var ke;(ke=z.current)===null||ke===void 0||ke.setSelectionRange(Xe,at,mt)},select:function(){var Xe;(Xe=z.current)===null||Xe===void 0||Xe.select()},input:z.current,nativeElement:((Ie=F.current)===null||Ie===void 0?void 0:Ie.nativeElement)||z.current}}),f.useEffect(function(){Q.current&&(Q.current=!1),V(function(Ie){return Ie&&h?!1:Ie})},[h]);var se=function(Ce,Xe,at){var mt=Xe;if(!H.current&&ce.exceedFormatter&&ce.max&&ce.strategy(Xe)>ce.max){if(mt=ce.exceedFormatter(Xe,{max:ce.max}),Xe!==mt){var ke,We;ie([((ke=z.current)===null||ke===void 0?void 0:ke.selectionStart)||0,((We=z.current)===null||We===void 0?void 0:We.selectionEnd)||0])}}else if(at.source==="compositionEnd")return;U(mt),z.current&&zf(z.current,Ce,a,mt)};f.useEffect(function(){if(Y){var Ie;(Ie=z.current)===null||Ie===void 0||Ie.setSelectionRange.apply(Ie,Ue(Y))}},[Y]);var ye=function(Ce){se(Ce,Ce.target.value,{source:"change"})},be=function(Ce){H.current=!1,se(Ce,Ce.currentTarget.value,{source:"compositionEnd"}),A==null||A(Ce)},ge=function(Ce){c&&Ce.key==="Enter"&&!Q.current&&(Q.current=!0,c(Ce)),d==null||d(Ce)},te=function(Ce){Ce.key==="Enter"&&(Q.current=!1),m==null||m(Ce)},xe=function(Ce){V(!0),i==null||i(Ce)},Ee=function(Ce){Q.current&&(Q.current=!1),V(!1),s==null||s(Ce)},_e=function(Ce){U(""),q(),z.current&&zf(z.current,Ce,a)},je=he&&"".concat(p,"-out-of-range"),Ae=function(){var Ce=or(e,["prefixCls","onPressEnter","addonBefore","addonAfter","prefix","suffix","allowClear","defaultValue","showCount","count","classes","htmlSize","styles","classNames","onClear"]);return ue.createElement("input",Le({autoComplete:r},Ce,{onChange:ye,onFocus:xe,onBlur:Ee,onKeyDown:ge,onKeyUp:te,className:ae(p,K({},"".concat(p,"-disabled"),h),T==null?void 0:T.input),style:M==null?void 0:M.input,ref:z,size:y,type:R,onCompositionStart:function(at){H.current=!0,N==null||N(at)},onCompositionEnd:be}))},He=function(){var Ce=Number(fe)>0;if(x||ce.show){var Xe=ce.showFormatter?ce.showFormatter({value:G,count:Te,maxLength:fe}):"".concat(Te).concat(Ce?" / ".concat(fe):"");return ue.createElement(ue.Fragment,null,ce.show&&ue.createElement("span",{className:ae("".concat(p,"-show-count-suffix"),K({},"".concat(p,"-show-count-has-suffix"),!!x),T==null?void 0:T.count),style:J({},M==null?void 0:M.count)},Xe),x)}return null};return ue.createElement(KO,Le({},j,{prefixCls:p,className:ae(C,je),handleReset:_e,value:G,focused:B,triggerFocus:q,suffix:He(),disabled:h,classes:_,classNames:T,styles:M,ref:F}),Ae())});const YO=e=>{let t;return typeof e=="object"&&(e!=null&&e.clearIcon)?t=e:e&&(t={clearIcon:ue.createElement(Yf,null)}),t};function QO(e,t){const r=f.useRef([]),a=()=>{r.current.push(setTimeout(()=>{var i,s,c,d;!((i=e.current)===null||i===void 0)&&i.input&&((s=e.current)===null||s===void 0?void 0:s.input.getAttribute("type"))==="password"&&(!((c=e.current)===null||c===void 0)&&c.input.hasAttribute("value"))&&((d=e.current)===null||d===void 0||d.input.removeAttribute("value"))}))};return f.useEffect(()=>(t&&a(),()=>r.current.forEach(i=>{i&&clearTimeout(i)})),[]),a}function TP(e){return!!(e.prefix||e.suffix||e.allowClear||e.showCount)}var _P=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:r,bordered:a=!0,status:i,size:s,disabled:c,onBlur:d,onFocus:m,suffix:v,allowClear:p,addonAfter:h,addonBefore:y,className:C,style:w,styles:x,rootClassName:S,onChange:E,classNames:O,variant:R,_skipAddonWarning:_}=e,T=_P(e,["prefixCls","bordered","status","size","disabled","onBlur","onFocus","suffix","allowClear","addonAfter","addonBefore","className","style","styles","rootClassName","onChange","classNames","variant","_skipAddonWarning"]),{getPrefixCls:M,direction:N,allowClear:A,autoComplete:j,className:I,style:L,classNames:B,styles:V}=Lr("input"),H=M("input",r),Q=f.useRef(null),z=Dl(H),[F,q,ee]=IO(H,S),[Z]=PO(H,z),{compactSize:D,compactItemClassnames:U}=Il(H,N),G=Ta(_e=>{var je;return(je=s??D)!==null&&je!==void 0?je:_e}),W=ue.useContext(Lo),X=c??W,{status:Y,hasFeedback:ie,feedbackIcon:ce}=f.useContext(ao),fe=ud(Y,i),Te=TP(e)||!!ie;f.useRef(Te);const he=QO(Q,!0),se=_e=>{he(),d==null||d(_e)},ye=_e=>{he(),m==null||m(_e)},be=_e=>{he(),E==null||E(_e)},ge=(ie||v)&&ue.createElement(ue.Fragment,null,v,ie&&ce),te=YO(p??A),[xe,Ee]=fd("input",R,a);return F(Z(ue.createElement(RP,Object.assign({ref:ea(t,Q),prefixCls:H,autoComplete:j},T,{disabled:X,onBlur:se,onFocus:ye,style:Object.assign(Object.assign({},L),w),styles:Object.assign(Object.assign({},V),x),suffix:ge,allowClear:te,className:ae(C,S,ee,z,U,I),onChange:be,addonBefore:y&&ue.createElement(Tf,{form:!0,space:!0},y),addonAfter:h&&ue.createElement(Tf,{form:!0,space:!0},h),classNames:Object.assign(Object.assign(Object.assign({},O),B),{input:ae({[`${H}-sm`]:G==="small",[`${H}-lg`]:G==="large",[`${H}-rtl`]:N==="rtl"},O==null?void 0:O.input,B.input,q),variant:ae({[`${H}-${xe}`]:Ee},Mf(H,fe)),affixWrapper:ae({[`${H}-affix-wrapper-sm`]:G==="small",[`${H}-affix-wrapper-lg`]:G==="large",[`${H}-affix-wrapper-rtl`]:N==="rtl"},q),wrapper:ae({[`${H}-group-rtl`]:N==="rtl"},q),groupWrapper:ae({[`${H}-group-wrapper-sm`]:G==="small",[`${H}-group-wrapper-lg`]:G==="large",[`${H}-group-wrapper-rtl`]:N==="rtl",[`${H}-group-wrapper-${xe}`]:Ee},Mf(`${H}-group-wrapper`,fe,ie),q)})}))))}),MP={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},$h=ue.createContext({});var NP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);ikr(e).map(t=>Object.assign(Object.assign({},t==null?void 0:t.props),{key:t.key}));function zP(e,t,r){const a=f.useMemo(()=>t||AP(r),[t,r]);return f.useMemo(()=>a.map(s=>{var{span:c}=s,d=NP(s,["span"]);return c==="filled"?Object.assign(Object.assign({},d),{filled:!0}):Object.assign(Object.assign({},d),{span:typeof c=="number"?c:lO(e,c)})}),[a,e])}var jP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);ic).forEach(c=>{const{filled:d}=c,m=jP(c,["filled"]);if(d){a.push(m),r.push(a),a=[],s=0;return}const v=t-s;s+=c.span||1,s>=t?(s>t?(i=!0,a.push(Object.assign(Object.assign({},m),{span:v}))):a.push(m),r.push(a),a=[],s=0):a.push(m)}),a.length>0&&r.push(a),r=r.map(c=>{const d=c.reduce((m,v)=>m+(v.span||1),0);if(d{const[r,a]=f.useMemo(()=>DP(t,e),[t,e]);return r},PP=({children:e})=>e,Yu=e=>e!=null,sg=e=>{const{itemPrefixCls:t,component:r,span:a,className:i,style:s,labelStyle:c,contentStyle:d,bordered:m,label:v,content:p,colon:h,type:y,styles:C}=e,w=r,{classNames:x}=f.useContext($h),S=Object.assign(Object.assign({},c),C==null?void 0:C.label),E=Object.assign(Object.assign({},d),C==null?void 0:C.content);return m?f.createElement(w,{colSpan:a,style:s,className:ae(i,{[`${t}-item-${y}`]:y==="label"||y==="content",[x==null?void 0:x.label]:(x==null?void 0:x.label)&&y==="label",[x==null?void 0:x.content]:(x==null?void 0:x.content)&&y==="content"})},Yu(v)&&f.createElement("span",{style:S},v),Yu(p)&&f.createElement("span",{style:E},p)):f.createElement(w,{colSpan:a,style:s,className:ae(`${t}-item`,i)},f.createElement("div",{className:`${t}-item-container`},Yu(v)&&f.createElement("span",{style:S,className:ae(`${t}-item-label`,x==null?void 0:x.label,{[`${t}-item-no-colon`]:!h})},v),Yu(p)&&f.createElement("span",{style:E,className:ae(`${t}-item-content`,x==null?void 0:x.content)},p)))};function cg(e,{colon:t,prefixCls:r,bordered:a},{component:i,type:s,showLabel:c,showContent:d,labelStyle:m,contentStyle:v,styles:p}){return e.map(({label:h,children:y,prefixCls:C=r,className:w,style:x,labelStyle:S,contentStyle:E,span:O=1,key:R,styles:_},T)=>typeof i=="string"?f.createElement(sg,{key:`${s}-${R||T}`,className:w,style:x,styles:{label:Object.assign(Object.assign(Object.assign(Object.assign({},m),p==null?void 0:p.label),S),_==null?void 0:_.label),content:Object.assign(Object.assign(Object.assign(Object.assign({},v),p==null?void 0:p.content),E),_==null?void 0:_.content)},span:O,colon:t,component:i,itemPrefixCls:C,bordered:a,label:c?h:null,content:d?y:null,type:s}):[f.createElement(sg,{key:`label-${R||T}`,className:w,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},m),p==null?void 0:p.label),x),S),_==null?void 0:_.label),span:1,colon:t,component:i[0],itemPrefixCls:C,bordered:a,label:h,type:"label"}),f.createElement(sg,{key:`content-${R||T}`,className:w,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},v),p==null?void 0:p.content),x),E),_==null?void 0:_.content),span:O*2-1,component:i[1],itemPrefixCls:C,bordered:a,content:y,type:"content"})])}const BP=e=>{const t=f.useContext($h),{prefixCls:r,vertical:a,row:i,index:s,bordered:c}=e;return a?f.createElement(f.Fragment,null,f.createElement("tr",{key:`label-${s}`,className:`${r}-row`},cg(i,e,Object.assign({component:"th",type:"label",showLabel:!0},t))),f.createElement("tr",{key:`content-${s}`,className:`${r}-row`},cg(i,e,Object.assign({component:"td",type:"content",showContent:!0},t)))):f.createElement("tr",{key:s,className:`${r}-row`},cg(i,e,Object.assign({component:c?["th","td"]:"td",type:"item",showLabel:!0,showContent:!0},t)))},LP=e=>{const{componentCls:t,labelBg:r}=e;return{[`&${t}-bordered`]:{[`> ${t}-view`]:{border:`${de(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"> table":{tableLayout:"auto"},[`${t}-row`]:{borderBottom:`${de(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:first-child":{"> th:first-child, > td:first-child":{borderStartStartRadius:e.borderRadiusLG}},"&:last-child":{borderBottom:"none","> th:first-child, > td:first-child":{borderEndStartRadius:e.borderRadiusLG}},[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${de(e.padding)} ${de(e.paddingLG)}`,borderInlineEnd:`${de(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:last-child":{borderInlineEnd:"none"}},[`> ${t}-item-label`]:{color:e.colorTextSecondary,backgroundColor:r,"&::after":{display:"none"}}}},[`&${t}-middle`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${de(e.paddingSM)} ${de(e.paddingLG)}`}}},[`&${t}-small`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${de(e.paddingXS)} ${de(e.padding)}`}}}}}},HP=e=>{const{componentCls:t,extraColor:r,itemPaddingBottom:a,itemPaddingEnd:i,colonMarginRight:s,colonMarginLeft:c,titleMarginBottom:d}=e;return{[t]:Object.assign(Object.assign(Object.assign({},Tr(e)),LP(e)),{"&-rtl":{direction:"rtl"},[`${t}-header`]:{display:"flex",alignItems:"center",marginBottom:d},[`${t}-title`]:Object.assign(Object.assign({},hi),{flex:"auto",color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG,lineHeight:e.lineHeightLG}),[`${t}-extra`]:{marginInlineStart:"auto",color:r,fontSize:e.fontSize},[`${t}-view`]:{width:"100%",borderRadius:e.borderRadiusLG,table:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse"}},[`${t}-row`]:{"> th, > td":{paddingBottom:a,paddingInlineEnd:i},"> th:last-child, > td:last-child":{paddingInlineEnd:0},"&:last-child":{borderBottom:"none","> th, > td":{paddingBottom:0}}},[`${t}-item-label`]:{color:e.labelColor,fontWeight:"normal",fontSize:e.fontSize,lineHeight:e.lineHeight,textAlign:"start","&::after":{content:'":"',position:"relative",top:-.5,marginInline:`${de(c)} ${de(s)}`},[`&${t}-item-no-colon::after`]:{content:'""'}},[`${t}-item-no-label`]:{"&::after":{margin:0,content:'""'}},[`${t}-item-content`]:{display:"table-cell",flex:1,color:e.contentColor,fontSize:e.fontSize,lineHeight:e.lineHeight,wordBreak:"break-word",overflowWrap:"break-word"},[`${t}-item`]:{paddingBottom:0,verticalAlign:"top","&-container":{display:"flex",[`${t}-item-label`]:{display:"inline-flex",alignItems:"baseline"},[`${t}-item-content`]:{display:"inline-flex",alignItems:"baseline",minWidth:"1em"}}},"&-middle":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingSM}}},"&-small":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingXS}}}})}},FP=e=>({labelBg:e.colorFillAlter,labelColor:e.colorTextTertiary,titleColor:e.colorText,titleMarginBottom:e.fontSizeSM*e.lineHeightSM,itemPaddingBottom:e.padding,itemPaddingEnd:e.padding,colonMarginRight:e.marginXS,colonMarginLeft:e.marginXXS/2,contentColor:e.colorText,extraColor:e.colorText}),VP=_n("Descriptions",e=>{const t=un(e,{});return HP(t)},FP);var UP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:t,title:r,extra:a,column:i,colon:s=!0,bordered:c,layout:d,children:m,className:v,rootClassName:p,style:h,size:y,labelStyle:C,contentStyle:w,styles:x,items:S,classNames:E}=e,O=UP(e,["prefixCls","title","extra","column","colon","bordered","layout","children","className","rootClassName","style","size","labelStyle","contentStyle","styles","items","classNames"]),{getPrefixCls:R,direction:_,className:T,style:M,classNames:N,styles:A}=Lr("descriptions"),j=R("descriptions",t),I=gh(),L=f.useMemo(()=>{var ee;return typeof i=="number"?i:(ee=lO(I,Object.assign(Object.assign({},MP),i)))!==null&&ee!==void 0?ee:3},[I,i]),B=zP(I,S,m),V=Ta(y),H=IP(L,B),[Q,z,F]=VP(j),q=f.useMemo(()=>({labelStyle:C,contentStyle:w,styles:{content:Object.assign(Object.assign({},A.content),x==null?void 0:x.content),label:Object.assign(Object.assign({},A.label),x==null?void 0:x.label)},classNames:{label:ae(N.label,E==null?void 0:E.label),content:ae(N.content,E==null?void 0:E.content)}}),[C,w,x,E,N,A]);return Q(f.createElement($h.Provider,{value:q},f.createElement("div",Object.assign({className:ae(j,T,N.root,E==null?void 0:E.root,{[`${j}-${V}`]:V&&V!=="default",[`${j}-bordered`]:!!c,[`${j}-rtl`]:_==="rtl"},v,p,z,F),style:Object.assign(Object.assign(Object.assign(Object.assign({},M),A.root),x==null?void 0:x.root),h)},O),(r||a)&&f.createElement("div",{className:ae(`${j}-header`,N.header,E==null?void 0:E.header),style:Object.assign(Object.assign({},A.header),x==null?void 0:x.header)},r&&f.createElement("div",{className:ae(`${j}-title`,N.title,E==null?void 0:E.title),style:Object.assign(Object.assign({},A.title),x==null?void 0:x.title)},r),a&&f.createElement("div",{className:ae(`${j}-extra`,N.extra,E==null?void 0:E.extra),style:Object.assign(Object.assign({},A.extra),x==null?void 0:x.extra)},a)),f.createElement("div",{className:`${j}-view`},f.createElement("table",null,f.createElement("tbody",null,H.map((ee,Z)=>f.createElement(BP,{key:Z,index:Z,colon:s,prefixCls:j,vertical:d==="vertical",bordered:c,row:ee}))))))))};qP.Item=PP;function jf(e){return["small","middle","large"].includes(e)}function U1(e){return e?typeof e=="number"&&!Number.isNaN(e):!1}const GP=e=>{const{componentCls:t,borderRadius:r,paddingSM:a,colorBorder:i,paddingXS:s,fontSizeLG:c,fontSizeSM:d,borderRadiusLG:m,borderRadiusSM:v,colorBgContainerDisabled:p,lineWidth:h}=e;return{[t]:[{display:"inline-flex",alignItems:"center",gap:0,paddingInline:a,margin:0,background:p,borderWidth:h,borderStyle:"solid",borderColor:i,borderRadius:r,"&-large":{fontSize:c,borderRadius:m},"&-small":{paddingInline:s,borderRadius:v,fontSize:d},"&-compact-last-item":{borderEndStartRadius:0,borderStartStartRadius:0},"&-compact-first-item":{borderEndEndRadius:0,borderStartEndRadius:0},"&-compact-item:not(:first-child):not(:last-child)":{borderRadius:0},"&-compact-item:not(:last-child)":{borderInlineEndWidth:0}},od(e,{focus:!1})]}},WP=_n(["Space","Addon"],e=>[GP(e)]);var KP=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{className:r,children:a,style:i,prefixCls:s}=e,c=KP(e,["className","children","style","prefixCls"]),{getPrefixCls:d,direction:m}=ue.useContext(It),v=d("space-addon",s),[p,h,y]=WP(v),{compactItemClassnames:C,compactSize:w}=Il(v,m),x=ae(v,h,C,y,{[`${v}-${w}`]:w},r);return p(ue.createElement("div",Object.assign({ref:t,className:x,style:i},c),a))}),ZO=ue.createContext({latestIndex:0}),YP=ZO.Provider,QP=({className:e,index:t,children:r,split:a,style:i})=>{const{latestIndex:s}=f.useContext(ZO);return r==null?null:f.createElement(f.Fragment,null,f.createElement("div",{className:e,style:i},r),t{const{componentCls:t,antCls:r}=e;return{[t]:{display:"inline-flex","&-rtl":{direction:"rtl"},"&-vertical":{flexDirection:"column"},"&-align":{flexDirection:"column","&-center":{alignItems:"center"},"&-start":{alignItems:"flex-start"},"&-end":{alignItems:"flex-end"},"&-baseline":{alignItems:"baseline"}},[`${t}-item:empty`]:{display:"none"},[`${t}-item > ${r}-badge-not-a-wrapper:only-child`]:{display:"block"}}}},JP=e=>{const{componentCls:t}=e;return{[t]:{"&-gap-row-small":{rowGap:e.spaceGapSmallSize},"&-gap-row-middle":{rowGap:e.spaceGapMiddleSize},"&-gap-row-large":{rowGap:e.spaceGapLargeSize},"&-gap-col-small":{columnGap:e.spaceGapSmallSize},"&-gap-col-middle":{columnGap:e.spaceGapMiddleSize},"&-gap-col-large":{columnGap:e.spaceGapLargeSize}}}},kP=_n("Space",e=>{const t=un(e,{spaceGapSmallSize:e.paddingXS,spaceGapMiddleSize:e.padding,spaceGapLargeSize:e.paddingLG});return[ZP(t),JP(t)]},()=>({}),{resetStyle:!1});var e8=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var r;const{getPrefixCls:a,direction:i,size:s,className:c,style:d,classNames:m,styles:v}=Lr("space"),{size:p=s??"small",align:h,className:y,rootClassName:C,children:w,direction:x="horizontal",prefixCls:S,split:E,style:O,wrap:R=!1,classNames:_,styles:T}=e,M=e8(e,["size","align","className","rootClassName","children","direction","prefixCls","split","style","wrap","classNames","styles"]),[N,A]=Array.isArray(p)?p:[p,p],j=jf(A),I=jf(N),L=U1(A),B=U1(N),V=kr(w,{keepEmpty:!0}),H=h===void 0&&x==="horizontal"?"center":h,Q=a("space",S),[z,F,q]=kP(Q),ee=ae(Q,c,F,`${Q}-${x}`,{[`${Q}-rtl`]:i==="rtl",[`${Q}-align-${H}`]:H,[`${Q}-gap-row-${A}`]:j,[`${Q}-gap-col-${N}`]:I},y,C,q),Z=ae(`${Q}-item`,(r=_==null?void 0:_.item)!==null&&r!==void 0?r:m.item),D=Object.assign(Object.assign({},v.item),T==null?void 0:T.item),U=V.map((X,Y)=>{const ie=(X==null?void 0:X.key)||`${Z}-${Y}`;return f.createElement(QP,{className:Z,key:ie,index:Y,split:E,style:D},X)}),G=f.useMemo(()=>({latestIndex:V.reduce((Y,ie,ce)=>ie!=null?ce:Y,0)}),[V]);if(V.length===0)return null;const W={};return R&&(W.flexWrap="wrap"),!I&&B&&(W.columnGap=N),!j&&L&&(W.rowGap=A),z(f.createElement("div",Object.assign({ref:t,className:ee,style:Object.assign(Object.assign(Object.assign({},W),d),O)},M),f.createElement(YP,{value:G},U)))}),JO=t8;JO.Compact=dz;JO.Addon=XP;const kO=["wrap","nowrap","wrap-reverse"],e$=["flex-start","flex-end","start","end","center","space-between","space-around","space-evenly","stretch","normal","left","right"],t$=["center","start","end","flex-start","flex-end","self-start","self-end","baseline","normal","stretch"],n8=(e,t)=>{const r=t.wrap===!0?"wrap":t.wrap;return{[`${e}-wrap-${r}`]:r&&kO.includes(r)}},r8=(e,t)=>{const r={};return t$.forEach(a=>{r[`${e}-align-${a}`]=t.align===a}),r[`${e}-align-stretch`]=!t.align&&!!t.vertical,r},a8=(e,t)=>{const r={};return e$.forEach(a=>{r[`${e}-justify-${a}`]=t.justify===a}),r};function o8(e,t){return ae(Object.assign(Object.assign(Object.assign({},n8(e,t)),r8(e,t)),a8(e,t)))}const i8=e=>{const{componentCls:t}=e;return{[t]:{display:"flex",margin:0,padding:0,"&-vertical":{flexDirection:"column"},"&-rtl":{direction:"rtl"},"&:empty":{display:"none"}}}},l8=e=>{const{componentCls:t}=e;return{[t]:{"&-gap-small":{gap:e.flexGapSM},"&-gap-middle":{gap:e.flexGap},"&-gap-large":{gap:e.flexGapLG}}}},s8=e=>{const{componentCls:t}=e,r={};return kO.forEach(a=>{r[`${t}-wrap-${a}`]={flexWrap:a}}),r},c8=e=>{const{componentCls:t}=e,r={};return t$.forEach(a=>{r[`${t}-align-${a}`]={alignItems:a}}),r},u8=e=>{const{componentCls:t}=e,r={};return e$.forEach(a=>{r[`${t}-justify-${a}`]={justifyContent:a}}),r},f8=()=>({}),d8=_n("Flex",e=>{const{paddingXS:t,padding:r,paddingLG:a}=e,i=un(e,{flexGapSM:t,flexGap:r,flexGapLG:a});return[i8(i),l8(i),s8(i),c8(i),u8(i)]},f8,{resetStyle:!1});var m8=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:r,rootClassName:a,className:i,style:s,flex:c,gap:d,vertical:m=!1,component:v="div",children:p}=e,h=m8(e,["prefixCls","rootClassName","className","style","flex","gap","vertical","component","children"]),{flex:y,direction:C,getPrefixCls:w}=ue.useContext(It),x=w("flex",r),[S,E,O]=d8(x),R=m??(y==null?void 0:y.vertical),_=ae(i,a,y==null?void 0:y.className,x,E,O,o8(x,e),{[`${x}-rtl`]:C==="rtl",[`${x}-gap-${d}`]:jf(d),[`${x}-vertical`]:R}),T=Object.assign(Object.assign({},y==null?void 0:y.style),s);return c&&(T.flex=c),d&&!jf(d)&&(T.gap=d),S(ue.createElement(v,Object.assign({ref:t,className:_,style:T},or(h,["justify","wrap","align"])),p))});var v8={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"},g8=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:v8}))},p8=f.forwardRef(g8);const h8=e=>{const{getPrefixCls:t,direction:r}=f.useContext(It),{prefixCls:a,className:i}=e,s=t("input-group",a),c=t("input"),[d,m,v]=PO(c),p=ae(s,v,{[`${s}-lg`]:e.size==="large",[`${s}-sm`]:e.size==="small",[`${s}-compact`]:e.compact,[`${s}-rtl`]:r==="rtl"},m,i),h=f.useContext(ao),y=f.useMemo(()=>Object.assign(Object.assign({},h),{isFormItemInput:!1}),[h]);return d(f.createElement("span",{className:p,style:e.style,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,onFocus:e.onFocus,onBlur:e.onBlur},f.createElement(ao.Provider,{value:y},e.children)))},b8=e=>{const{componentCls:t,paddingXS:r}=e;return{[t]:{display:"inline-flex",alignItems:"center",flexWrap:"nowrap",columnGap:r,[`${t}-input-wrapper`]:{position:"relative",[`${t}-mask-icon`]:{position:"absolute",zIndex:"1",top:"50%",right:"50%",transform:"translate(50%, -50%)",pointerEvents:"none"},[`${t}-mask-input`]:{color:"transparent",caretColor:e.colorText},[`${t}-mask-input[type=number]::-webkit-inner-spin-button`]:{"-webkit-appearance":"none",margin:0},[`${t}-mask-input[type=number]`]:{"-moz-appearance":"textfield"}},"&-rtl":{direction:"rtl"},[`${t}-input`]:{textAlign:"center",paddingInline:e.paddingXXS},[`&${t}-sm ${t}-input`]:{paddingInline:e.calc(e.paddingXXS).div(2).equal()},[`&${t}-lg ${t}-input`]:{paddingInline:e.paddingXS}}}},y8=_n(["Input","OTP"],e=>{const t=un(e,Oc(e));return b8(t)},$c);var S8=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{className:r,value:a,onChange:i,onActiveChange:s,index:c,mask:d}=e,m=S8(e,["className","value","onChange","onActiveChange","index","mask"]),{getPrefixCls:v}=f.useContext(It),p=v("otp"),h=typeof d=="string"?d:a,y=f.useRef(null);f.useImperativeHandle(t,()=>y.current);const C=S=>{i(c,S.target.value)},w=()=>{bn(()=>{var S;const E=(S=y.current)===null||S===void 0?void 0:S.input;document.activeElement===E&&E&&E.select()})},x=S=>{const{key:E,ctrlKey:O,metaKey:R}=S;E==="ArrowLeft"?s(c-1):E==="ArrowRight"?s(c+1):E==="z"&&(O||R)?S.preventDefault():E==="Backspace"&&!a&&s(c-1),w()};return f.createElement("span",{className:`${p}-input-wrapper`,role:"presentation"},d&&a!==""&&a!==void 0&&f.createElement("span",{className:`${p}-mask-icon`,"aria-hidden":"true"},h),f.createElement(hd,Object.assign({"aria-label":`OTP Input ${c+1}`,type:d===!0?"password":"text"},m,{ref:y,value:a,onInput:C,onFocus:w,onKeyDown:x,onMouseDown:w,onMouseUp:w,className:ae(r,{[`${p}-mask-input`]:d})})))});var x8=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{index:t,prefixCls:r,separator:a}=e,i=typeof a=="function"?a(t):a;return i?f.createElement("span",{className:`${r}-separator`},i):null},w8=f.forwardRef((e,t)=>{const{prefixCls:r,length:a=6,size:i,defaultValue:s,value:c,onChange:d,formatter:m,separator:v,variant:p,disabled:h,status:y,autoFocus:C,mask:w,type:x,onInput:S,inputMode:E}=e,O=x8(e,["prefixCls","length","size","defaultValue","value","onChange","formatter","separator","variant","disabled","status","autoFocus","mask","type","onInput","inputMode"]),{getPrefixCls:R,direction:_}=f.useContext(It),T=R("otp",r),M=ro(O,{aria:!0,data:!0,attr:!0}),[N,A,j]=y8(T),I=Ta(W=>i??W),L=f.useContext(ao),B=ud(L.status,y),V=f.useMemo(()=>Object.assign(Object.assign({},L),{status:B,hasFeedback:!1,feedbackIcon:null}),[L,B]),H=f.useRef(null),Q=f.useRef({});f.useImperativeHandle(t,()=>({focus:()=>{var W;(W=Q.current[0])===null||W===void 0||W.focus()},blur:()=>{var W;for(let X=0;Xm?m(W):W,[F,q]=f.useState(()=>Qu(z(s||"")));f.useEffect(()=>{c!==void 0&&q(Qu(c))},[c]);const ee=Gn(W=>{q(W),S&&S(W),d&&W.length===a&&W.every(X=>X)&&W.some((X,Y)=>F[Y]!==X)&&d(W.join(""))}),Z=Gn((W,X)=>{let Y=Ue(F);for(let ce=0;ce=0&&!Y[ce];ce-=1)Y.pop();const ie=z(Y.map(ce=>ce||" ").join(""));return Y=Qu(ie).map((ce,fe)=>ce===" "&&!Y[fe]?Y[fe]:ce),Y}),D=(W,X)=>{var Y;const ie=Z(W,X),ce=Math.min(W+X.length,a-1);ce!==W&&ie[W]!==void 0&&((Y=Q.current[ce])===null||Y===void 0||Y.focus()),ee(ie)},U=W=>{var X;(X=Q.current[W])===null||X===void 0||X.focus()},G={variant:p,disabled:h,status:B,mask:w,type:x,inputMode:E};return N(f.createElement("div",Object.assign({},M,{ref:H,className:ae(T,{[`${T}-sm`]:I==="small",[`${T}-lg`]:I==="large",[`${T}-rtl`]:_==="rtl"},j,A),role:"group"}),f.createElement(ao.Provider,{value:V},Array.from({length:a}).map((W,X)=>{const Y=`otp-${X}`,ie=F[X]||"";return f.createElement(f.Fragment,{key:Y},f.createElement(C8,Object.assign({ref:ce=>{Q.current[X]=ce},index:X,size:I,htmlSize:1,className:`${T}-input`,onChange:D,value:ie,onActiveChange:U,autoFocus:X===0&&C},G)),Xe?f.createElement(p8,null):f.createElement(R8,null),M8={click:"onClick",hover:"onMouseOver"},N8=f.forwardRef((e,t)=>{const{disabled:r,action:a="click",visibilityToggle:i=!0,iconRender:s=_8,suffix:c}=e,d=f.useContext(Lo),m=r??d,v=typeof i=="object"&&i.visible!==void 0,[p,h]=f.useState(()=>v?i.visible:!1),y=f.useRef(null);f.useEffect(()=>{v&&h(i.visible)},[v,i]);const C=QO(y),w=()=>{var L;if(m)return;p&&C();const B=!p;h(B),typeof i=="object"&&((L=i.onVisibleChange)===null||L===void 0||L.call(i,B))},x=L=>{const B=M8[a]||"",V=s(p),H={[B]:w,className:`${L}-icon`,key:"passwordIcon",onMouseDown:Q=>{Q.preventDefault()},onMouseUp:Q=>{Q.preventDefault()}};return f.cloneElement(f.isValidElement(V)?V:f.createElement("span",null,V),H)},{className:S,prefixCls:E,inputPrefixCls:O,size:R}=e,_=T8(e,["className","prefixCls","inputPrefixCls","size"]),{getPrefixCls:T}=f.useContext(It),M=T("input",O),N=T("input-password",E),A=i&&x(N),j=ae(N,S,{[`${N}-${R}`]:!!R}),I=Object.assign(Object.assign({},or(_,["suffix","iconRender","visibilityToggle"])),{type:p?"text":"password",className:j,prefixCls:M,suffix:f.createElement(f.Fragment,null,A,c)});return R&&(I.size=R),f.createElement(hd,Object.assign({ref:ea(t,y)},I))});var A8=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:r,inputPrefixCls:a,className:i,size:s,suffix:c,enterButton:d=!1,addonAfter:m,loading:v,disabled:p,onSearch:h,onChange:y,onCompositionStart:C,onCompositionEnd:w,variant:x,onPressEnter:S}=e,E=A8(e,["prefixCls","inputPrefixCls","className","size","suffix","enterButton","addonAfter","loading","disabled","onSearch","onChange","onCompositionStart","onCompositionEnd","variant","onPressEnter"]),{getPrefixCls:O,direction:R}=f.useContext(It),_=f.useRef(!1),T=O("input-search",r),M=O("input",a),{compactSize:N}=Il(T,R),A=Ta(G=>{var W;return(W=s??N)!==null&&W!==void 0?W:G}),j=f.useRef(null),I=G=>{G!=null&&G.target&&G.type==="click"&&h&&h(G.target.value,G,{source:"clear"}),y==null||y(G)},L=G=>{var W;document.activeElement===((W=j.current)===null||W===void 0?void 0:W.input)&&G.preventDefault()},B=G=>{var W,X;h&&h((X=(W=j.current)===null||W===void 0?void 0:W.input)===null||X===void 0?void 0:X.value,G,{source:"input"})},V=G=>{_.current||v||(S==null||S(G),B(G))},H=typeof d=="boolean"?f.createElement(rO,null):null,Q=`${T}-button`;let z;const F=d||{},q=F.type&&F.type.__ANT_BUTTON===!0;q||F.type==="button"?z=bi(F,Object.assign({onMouseDown:L,onClick:G=>{var W,X;(X=(W=F==null?void 0:F.props)===null||W===void 0?void 0:W.onClick)===null||X===void 0||X.call(W,G),B(G)},key:"enterButton"},q?{className:Q,size:A}:{})):z=f.createElement(sh,{className:Q,color:d?"primary":"default",size:A,disabled:p,key:"enterButton",onMouseDown:L,onClick:B,loading:v,icon:H,variant:x==="borderless"||x==="filled"||x==="underlined"?"text":d?"solid":void 0},d),m&&(z=[z,bi(m,{key:"addonAfter"})]);const ee=ae(T,{[`${T}-rtl`]:R==="rtl",[`${T}-${A}`]:!!A,[`${T}-with-button`]:!!d},i),Z=G=>{_.current=!0,C==null||C(G)},D=G=>{_.current=!1,w==null||w(G)},U=Object.assign(Object.assign({},E),{className:ee,prefixCls:M,type:"search",size:A,variant:x,onPressEnter:V,onCompositionStart:Z,onCompositionEnd:D,addonAfter:z,suffix:c,onChange:I,disabled:p,_skipAddonWarning:!0});return f.createElement(hd,Object.assign({ref:ea(j,t)},U))});var j8=` + min-height:0 !important; + max-height:none !important; + height:0 !important; + visibility:hidden !important; + overflow:hidden !important; + position:absolute !important; + z-index:-1000 !important; + top:0 !important; + right:0 !important; + pointer-events: none !important; +`,D8=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing","word-break","white-space"],ug={},Zr;function I8(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,r=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&ug[r])return ug[r];var a=window.getComputedStyle(e),i=a.getPropertyValue("box-sizing")||a.getPropertyValue("-moz-box-sizing")||a.getPropertyValue("-webkit-box-sizing"),s=parseFloat(a.getPropertyValue("padding-bottom"))+parseFloat(a.getPropertyValue("padding-top")),c=parseFloat(a.getPropertyValue("border-bottom-width"))+parseFloat(a.getPropertyValue("border-top-width")),d=D8.map(function(v){return"".concat(v,":").concat(a.getPropertyValue(v))}).join(";"),m={sizingStyle:d,paddingSize:s,borderSize:c,boxSizing:i};return t&&r&&(ug[r]=m),m}function P8(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;Zr||(Zr=document.createElement("textarea"),Zr.setAttribute("tab-index","-1"),Zr.setAttribute("aria-hidden","true"),Zr.setAttribute("name","hiddenTextarea"),document.body.appendChild(Zr)),e.getAttribute("wrap")?Zr.setAttribute("wrap",e.getAttribute("wrap")):Zr.removeAttribute("wrap");var i=I8(e,t),s=i.paddingSize,c=i.borderSize,d=i.boxSizing,m=i.sizingStyle;Zr.setAttribute("style","".concat(m,";").concat(j8)),Zr.value=e.value||e.placeholder||"";var v=void 0,p=void 0,h,y=Zr.scrollHeight;if(d==="border-box"?y+=c:d==="content-box"&&(y-=s),r!==null||a!==null){Zr.value=" ";var C=Zr.scrollHeight-s;r!==null&&(v=C*r,d==="border-box"&&(v=v+s+c),y=Math.max(v,y)),a!==null&&(p=C*a,d==="border-box"&&(p=p+s+c),h=y>p?"":"hidden",y=Math.min(p,y))}var w={height:y,overflowY:h,resize:"none"};return v&&(w.minHeight=v),p&&(w.maxHeight=p),w}var B8=["prefixCls","defaultValue","value","autoSize","onResize","className","style","disabled","onChange","onInternalAutoSize"],fg=0,dg=1,mg=2,L8=f.forwardRef(function(e,t){var r=e,a=r.prefixCls,i=r.defaultValue,s=r.value,c=r.autoSize,d=r.onResize,m=r.className,v=r.style,p=r.disabled,h=r.onChange;r.onInternalAutoSize;var y=zt(r,B8),C=ur(i,{value:s,postState:function(G){return G??""}}),w=oe(C,2),x=w[0],S=w[1],E=function(G){S(G.target.value),h==null||h(G)},O=f.useRef();f.useImperativeHandle(t,function(){return{textArea:O.current}});var R=f.useMemo(function(){return c&&pt(c)==="object"?[c.minRows,c.maxRows]:[]},[c]),_=oe(R,2),T=_[0],M=_[1],N=!!c,A=f.useState(mg),j=oe(A,2),I=j[0],L=j[1],B=f.useState(),V=oe(B,2),H=V[0],Q=V[1],z=function(){L(fg)};nn(function(){N&&z()},[s,T,M,N]),nn(function(){if(I===fg)L(dg);else if(I===dg){var U=P8(O.current,!1,T,M);L(mg),Q(U)}},[I]);var F=f.useRef(),q=function(){bn.cancel(F.current)},ee=function(G){I===mg&&(d==null||d(G),c&&(q(),F.current=bn(function(){z()})))};f.useEffect(function(){return q},[]);var Z=N?H:null,D=J(J({},v),Z);return(I===fg||I===dg)&&(D.overflowY="hidden",D.overflowX="hidden"),f.createElement(pa,{onResize:ee,disabled:!(c||d)},f.createElement("textarea",Le({},y,{ref:O,style:D,className:ae(a,m,K({},"".concat(a,"-disabled"),p)),disabled:p,value:x,onChange:E})))}),H8=["defaultValue","value","onFocus","onBlur","onChange","allowClear","maxLength","onCompositionStart","onCompositionEnd","suffix","prefixCls","showCount","count","className","style","disabled","hidden","classNames","styles","onResize","onClear","onPressEnter","readOnly","autoSize","onKeyDown"],F8=ue.forwardRef(function(e,t){var r,a=e.defaultValue,i=e.value,s=e.onFocus,c=e.onBlur,d=e.onChange,m=e.allowClear,v=e.maxLength,p=e.onCompositionStart,h=e.onCompositionEnd,y=e.suffix,C=e.prefixCls,w=C===void 0?"rc-textarea":C,x=e.showCount,S=e.count,E=e.className,O=e.style,R=e.disabled,_=e.hidden,T=e.classNames,M=e.styles,N=e.onResize,A=e.onClear,j=e.onPressEnter,I=e.readOnly,L=e.autoSize,B=e.onKeyDown,V=zt(e,H8),H=ur(a,{value:i,defaultValue:a}),Q=oe(H,2),z=Q[0],F=Q[1],q=z==null?"":String(z),ee=ue.useState(!1),Z=oe(ee,2),D=Z[0],U=Z[1],G=ue.useRef(!1),W=ue.useState(null),X=oe(W,2),Y=X[0],ie=X[1],ce=f.useRef(null),fe=f.useRef(null),Te=function(){var ze;return(ze=fe.current)===null||ze===void 0?void 0:ze.textArea},he=function(){Te().focus()};f.useImperativeHandle(t,function(){var Ye;return{resizableTextArea:fe.current,focus:he,blur:function(){Te().blur()},nativeElement:((Ye=ce.current)===null||Ye===void 0?void 0:Ye.nativeElement)||Te()}}),f.useEffect(function(){U(function(Ye){return!R&&Ye})},[R]);var se=ue.useState(null),ye=oe(se,2),be=ye[0],ge=ye[1];ue.useEffect(function(){if(be){var Ye;(Ye=Te()).setSelectionRange.apply(Ye,Ue(be))}},[be]);var te=XO(S,x),xe=(r=te.max)!==null&&r!==void 0?r:v,Ee=Number(xe)>0,_e=te.strategy(q),je=!!xe&&_e>xe,Ae=function(ze,Ke){var Ne=Ke;!G.current&&te.exceedFormatter&&te.max&&te.strategy(Ke)>te.max&&(Ne=te.exceedFormatter(Ke,{max:te.max}),Ke!==Ne&&ge([Te().selectionStart||0,Te().selectionEnd||0])),F(Ne),zf(ze.currentTarget,ze,d,Ne)},He=function(ze){G.current=!0,p==null||p(ze)},Ie=function(ze){G.current=!1,Ae(ze,ze.currentTarget.value),h==null||h(ze)},Ce=function(ze){Ae(ze,ze.target.value)},Xe=function(ze){ze.key==="Enter"&&j&&j(ze),B==null||B(ze)},at=function(ze){U(!0),s==null||s(ze)},mt=function(ze){U(!1),c==null||c(ze)},ke=function(ze){F(""),he(),zf(Te(),ze,d)},We=y,ct;te.show&&(te.showFormatter?ct=te.showFormatter({value:q,count:_e,maxLength:xe}):ct="".concat(_e).concat(Ee?" / ".concat(xe):""),We=ue.createElement(ue.Fragment,null,We,ue.createElement("span",{className:ae("".concat(w,"-data-count"),T==null?void 0:T.count),style:M==null?void 0:M.count},ct)));var Qe=function(ze){var Ke;N==null||N(ze),(Ke=Te())!==null&&Ke!==void 0&&Ke.style.height&&ie(!0)},ut=!L&&!x&&!m;return ue.createElement(KO,{ref:ce,value:q,allowClear:m,handleReset:ke,suffix:We,prefixCls:w,classNames:J(J({},T),{},{affixWrapper:ae(T==null?void 0:T.affixWrapper,K(K({},"".concat(w,"-show-count"),x),"".concat(w,"-textarea-allow-clear"),m))}),disabled:R,focused:D,className:ae(E,je&&"".concat(w,"-out-of-range")),style:J(J({},O),Y&&!ut?{height:"auto"}:{}),dataAttrs:{affixWrapper:{"data-count":typeof ct=="string"?ct:void 0}},hidden:_,readOnly:I,onClear:A},ue.createElement(L8,Le({},V,{autoSize:L,maxLength:v,onKeyDown:Xe,onChange:Ce,onFocus:at,onBlur:mt,onCompositionStart:He,onCompositionEnd:Ie,className:ae(T==null?void 0:T.textarea),style:J(J({},M==null?void 0:M.textarea),{},{resize:O==null?void 0:O.resize}),disabled:R,prefixCls:w,onResize:Qe,ref:fe,readOnly:I})))});const V8=e=>{const{componentCls:t,paddingLG:r}=e,a=`${t}-textarea`;return{[`textarea${t}`]:{maxWidth:"100%",height:"auto",minHeight:e.controlHeight,lineHeight:e.lineHeight,verticalAlign:"bottom",transition:`all ${e.motionDurationSlow}`,resize:"vertical",[`&${t}-mouse-active`]:{transition:`all ${e.motionDurationSlow}, height 0s, width 0s`}},[`${t}-textarea-affix-wrapper-resize-dirty`]:{width:"auto"},[a]:{position:"relative","&-show-count":{[`${t}-data-count`]:{position:"absolute",bottom:e.calc(e.fontSize).mul(e.lineHeight).mul(-1).equal(),insetInlineEnd:0,color:e.colorTextDescription,whiteSpace:"nowrap",pointerEvents:"none"}},[` + &-allow-clear > ${t}, + &-affix-wrapper${a}-has-feedback ${t} + `]:{paddingInlineEnd:r},[`&-affix-wrapper${t}-affix-wrapper`]:{padding:0,[`> textarea${t}`]:{fontSize:"inherit",border:"none",outline:"none",background:"transparent",minHeight:e.calc(e.controlHeight).sub(e.calc(e.lineWidth).mul(2)).equal(),"&:focus":{boxShadow:"none !important"}},[`${t}-suffix`]:{margin:0,"> *:not(:last-child)":{marginInline:0},[`${t}-clear-icon`]:{position:"absolute",insetInlineEnd:e.paddingInline,insetBlockStart:e.paddingXS},[`${a}-suffix`]:{position:"absolute",top:0,insetInlineEnd:e.paddingInline,bottom:0,zIndex:1,display:"inline-flex",alignItems:"center",margin:"auto",pointerEvents:"none"}}},[`&-affix-wrapper${t}-affix-wrapper-rtl`]:{[`${t}-suffix`]:{[`${t}-data-count`]:{direction:"ltr",insetInlineStart:0}}},[`&-affix-wrapper${t}-affix-wrapper-sm`]:{[`${t}-suffix`]:{[`${t}-clear-icon`]:{insetInlineEnd:e.paddingInlineSM}}}}}},U8=_n(["Input","TextArea"],e=>{const t=un(e,Oc(e));return V8(t)},$c,{resetFont:!1});var q8=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var r;const{prefixCls:a,bordered:i=!0,size:s,disabled:c,status:d,allowClear:m,classNames:v,rootClassName:p,className:h,style:y,styles:C,variant:w,showCount:x,onMouseDown:S,onResize:E}=e,O=q8(e,["prefixCls","bordered","size","disabled","status","allowClear","classNames","rootClassName","className","style","styles","variant","showCount","onMouseDown","onResize"]),{getPrefixCls:R,direction:_,allowClear:T,autoComplete:M,className:N,style:A,classNames:j,styles:I}=Lr("textArea"),L=f.useContext(Lo),B=c??L,{status:V,hasFeedback:H,feedbackIcon:Q}=f.useContext(ao),z=ud(V,d),F=f.useRef(null);f.useImperativeHandle(t,()=>{var te;return{resizableTextArea:(te=F.current)===null||te===void 0?void 0:te.resizableTextArea,focus:xe=>{var Ee,_e;WO((_e=(Ee=F.current)===null||Ee===void 0?void 0:Ee.resizableTextArea)===null||_e===void 0?void 0:_e.textArea,xe)},blur:()=>{var xe;return(xe=F.current)===null||xe===void 0?void 0:xe.blur()}}});const q=R("input",a),ee=Dl(q),[Z,D,U]=IO(q,p),[G]=U8(q,ee),{compactSize:W,compactItemClassnames:X}=Il(q,_),Y=Ta(te=>{var xe;return(xe=s??W)!==null&&xe!==void 0?xe:te}),[ie,ce]=fd("textArea",w,i),fe=YO(m??T),[Te,he]=f.useState(!1),[se,ye]=f.useState(!1),be=te=>{he(!0),S==null||S(te);const xe=()=>{he(!1),document.removeEventListener("mouseup",xe)};document.addEventListener("mouseup",xe)},ge=te=>{var xe,Ee;if(E==null||E(te),Te&&typeof getComputedStyle=="function"){const _e=(Ee=(xe=F.current)===null||xe===void 0?void 0:xe.nativeElement)===null||Ee===void 0?void 0:Ee.querySelector("textarea");_e&&getComputedStyle(_e).resize==="both"&&ye(!0)}};return Z(G(f.createElement(F8,Object.assign({autoComplete:M},O,{style:Object.assign(Object.assign({},A),y),styles:Object.assign(Object.assign({},I),C),disabled:B,allowClear:fe,className:ae(U,ee,h,p,X,N,se&&`${q}-textarea-affix-wrapper-resize-dirty`),classNames:Object.assign(Object.assign(Object.assign({},v),j),{textarea:ae({[`${q}-sm`]:Y==="small",[`${q}-lg`]:Y==="large"},D,v==null?void 0:v.textarea,j.textarea,Te&&`${q}-mouse-active`),variant:ae({[`${q}-${ie}`]:ce},Mf(q,z)),affixWrapper:ae(`${q}-textarea-affix-wrapper`,{[`${q}-affix-wrapper-rtl`]:_==="rtl",[`${q}-affix-wrapper-sm`]:Y==="small",[`${q}-affix-wrapper-lg`]:Y==="large",[`${q}-textarea-show-count`]:x||((r=e.count)===null||r===void 0?void 0:r.show)},D)}),prefixCls:q,suffix:H&&f.createElement("span",{className:`${q}-textarea-suffix`},Q),showCount:x,ref:F,onResize:ge,onMouseDown:be}))))}),Rc=hd;Rc.Group=h8;Rc.Search=z8;Rc.TextArea=n$;Rc.Password=N8;Rc.OTP=w8;function G8(e,t,r){return typeof r=="boolean"?r:e.length?!0:kr(t).some(i=>i.type===AO)}var r$=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);if.forwardRef((s,c)=>f.createElement(a,Object.assign({ref:c,suffixCls:e,tagName:t},s)))}const Rh=f.forwardRef((e,t)=>{const{prefixCls:r,suffixCls:a,className:i,tagName:s}=e,c=r$(e,["prefixCls","suffixCls","className","tagName"]),{getPrefixCls:d}=f.useContext(It),m=d("layout",r),[v,p,h]=MO(m),y=a?`${m}-${a}`:m;return v(f.createElement(s,Object.assign({className:ae(r||y,i,p,h),ref:t},c)))}),W8=f.forwardRef((e,t)=>{const{direction:r}=f.useContext(It),[a,i]=f.useState([]),{prefixCls:s,className:c,rootClassName:d,children:m,hasSider:v,tagName:p,style:h}=e,y=r$(e,["prefixCls","className","rootClassName","children","hasSider","tagName","style"]),C=or(y,["suffixCls"]),{getPrefixCls:w,className:x,style:S}=Lr("layout"),E=w("layout",s),O=G8(a,m,v),[R,_,T]=MO(E),M=ae(E,{[`${E}-has-sider`]:O,[`${E}-rtl`]:r==="rtl"},x,c,d,_,T),N=f.useMemo(()=>({siderHook:{addSider:A=>{i(j=>[].concat(Ue(j),[A]))},removeSider:A=>{i(j=>j.filter(I=>I!==A))}}}),[]);return R(f.createElement(RO.Provider,{value:N},f.createElement(p,Object.assign({ref:t,className:M,style:Object.assign(Object.assign({},S),h)},C),m)))}),K8=bd({tagName:"div",displayName:"Layout"})(W8),X8=bd({suffixCls:"header",tagName:"header",displayName:"Header"})(Rh),Y8=bd({suffixCls:"footer",tagName:"footer",displayName:"Footer"})(Rh),Q8=bd({suffixCls:"content",tagName:"main",displayName:"Content"})(Rh),Hl=K8;Hl.Header=X8;Hl.Footer=Y8;Hl.Content=Q8;Hl.Sider=AO;Hl._InternalSiderContext=NO;var Z8={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M272.9 512l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L186.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H532c6.7 0 10.4-7.7 6.3-12.9L272.9 512zm304 0l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L490.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H836c6.7 0 10.4-7.7 6.3-12.9L576.9 512z"}}]},name:"double-left",theme:"outlined"},J8=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:Z8}))},q1=f.forwardRef(J8),k8={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z"}}]},name:"double-right",theme:"outlined"},eB=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:k8}))},G1=f.forwardRef(eB),tB={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"},nB=[10,20,50,100],rB=function(t){var r=t.pageSizeOptions,a=r===void 0?nB:r,i=t.locale,s=t.changeSize,c=t.pageSize,d=t.goButton,m=t.quickGo,v=t.rootPrefixCls,p=t.disabled,h=t.buildOptionText,y=t.showSizeChanger,C=t.sizeChangerRender,w=ue.useState(""),x=oe(w,2),S=x[0],E=x[1],O=function(){return!S||Number.isNaN(S)?void 0:Number(S)},R=typeof h=="function"?h:function(B){return"".concat(B," ").concat(i.items_per_page)},_=function(V){E(V.target.value)},T=function(V){d||S===""||(E(""),!(V.relatedTarget&&(V.relatedTarget.className.indexOf("".concat(v,"-item-link"))>=0||V.relatedTarget.className.indexOf("".concat(v,"-item"))>=0))&&(m==null||m(O())))},M=function(V){S!==""&&(V.keyCode===rt.ENTER||V.type==="click")&&(E(""),m==null||m(O()))},N=function(){return a.some(function(V){return V.toString()===c.toString()})?a:a.concat([c]).sort(function(V,H){var Q=Number.isNaN(Number(V))?0:Number(V),z=Number.isNaN(Number(H))?0:Number(H);return Q-z})},A="".concat(v,"-options");if(!y&&!m)return null;var j=null,I=null,L=null;return y&&C&&(j=C({disabled:p,size:c,onSizeChange:function(V){s==null||s(Number(V))},"aria-label":i.page_size,className:"".concat(A,"-size-changer"),options:N().map(function(B){return{label:R(B),value:B}})})),m&&(d&&(L=typeof d=="boolean"?ue.createElement("button",{type:"button",onClick:M,onKeyUp:M,disabled:p,className:"".concat(A,"-quick-jumper-button")},i.jump_to_confirm):ue.createElement("span",{onClick:M,onKeyUp:M},d)),I=ue.createElement("div",{className:"".concat(A,"-quick-jumper")},i.jump_to,ue.createElement("input",{disabled:p,type:"text",value:S,onChange:_,onKeyUp:M,onBlur:T,"aria-label":i.page}),i.page,L)),ue.createElement("li",{className:A},j,I)},Ps=function(t){var r=t.rootPrefixCls,a=t.page,i=t.active,s=t.className,c=t.showTitle,d=t.onClick,m=t.onKeyPress,v=t.itemRender,p="".concat(r,"-item"),h=ae(p,"".concat(p,"-").concat(a),K(K({},"".concat(p,"-active"),i),"".concat(p,"-disabled"),!a),s),y=function(){d(a)},C=function(S){m(S,d,a)},w=v(a,"page",ue.createElement("a",{rel:"nofollow"},a));return w?ue.createElement("li",{title:c?String(a):null,className:h,onClick:y,onKeyDown:C,tabIndex:0},w):null},aB=function(t,r,a){return a};function W1(){}function K1(e){var t=Number(e);return typeof t=="number"&&!Number.isNaN(t)&&isFinite(t)&&Math.floor(t)===t}function ii(e,t,r){var a=typeof e>"u"?t:e;return Math.floor((r-1)/a)+1}var oB=function(t){var r=t.prefixCls,a=r===void 0?"rc-pagination":r,i=t.selectPrefixCls,s=i===void 0?"rc-select":i,c=t.className,d=t.current,m=t.defaultCurrent,v=m===void 0?1:m,p=t.total,h=p===void 0?0:p,y=t.pageSize,C=t.defaultPageSize,w=C===void 0?10:C,x=t.onChange,S=x===void 0?W1:x,E=t.hideOnSinglePage,O=t.align,R=t.showPrevNextJumpers,_=R===void 0?!0:R,T=t.showQuickJumper,M=t.showLessItems,N=t.showTitle,A=N===void 0?!0:N,j=t.onShowSizeChange,I=j===void 0?W1:j,L=t.locale,B=L===void 0?tB:L,V=t.style,H=t.totalBoundaryShowSizeChanger,Q=H===void 0?50:H,z=t.disabled,F=t.simple,q=t.showTotal,ee=t.showSizeChanger,Z=ee===void 0?h>Q:ee,D=t.sizeChangerRender,U=t.pageSizeOptions,G=t.itemRender,W=G===void 0?aB:G,X=t.jumpPrevIcon,Y=t.jumpNextIcon,ie=t.prevIcon,ce=t.nextIcon,fe=ue.useRef(null),Te=ur(10,{value:y,defaultValue:w}),he=oe(Te,2),se=he[0],ye=he[1],be=ur(1,{value:d,defaultValue:v,postState:function(ft){return Math.max(1,Math.min(ft,ii(void 0,se,h)))}}),ge=oe(be,2),te=ge[0],xe=ge[1],Ee=ue.useState(te),_e=oe(Ee,2),je=_e[0],Ae=_e[1];f.useEffect(function(){Ae(te)},[te]);var He=Math.max(1,te-(M?3:5)),Ie=Math.min(ii(void 0,se,h),te+(M?3:5));function Ce(Fe,ft){var Mt=Fe||ue.createElement("button",{type:"button","aria-label":ft,className:"".concat(a,"-item-link")});return typeof Fe=="function"&&(Mt=ue.createElement(Fe,J({},t))),Mt}function Xe(Fe){var ft=Fe.target.value,Mt=ii(void 0,se,h),An;return ft===""?An=ft:Number.isNaN(Number(ft))?An=je:ft>=Mt?An=Mt:An=Number(ft),An}function at(Fe){return K1(Fe)&&Fe!==te&&K1(h)&&h>0}var mt=h>se?T:!1;function ke(Fe){(Fe.keyCode===rt.UP||Fe.keyCode===rt.DOWN)&&Fe.preventDefault()}function We(Fe){var ft=Xe(Fe);switch(ft!==je&&Ae(ft),Fe.keyCode){case rt.ENTER:ut(ft);break;case rt.UP:ut(ft-1);break;case rt.DOWN:ut(ft+1);break}}function ct(Fe){ut(Xe(Fe))}function Qe(Fe){var ft=ii(Fe,se,h),Mt=te>ft&&ft!==0?ft:te;ye(Fe),Ae(Mt),I==null||I(te,Fe),xe(Mt),S==null||S(Mt,Fe)}function ut(Fe){if(at(Fe)&&!z){var ft=ii(void 0,se,h),Mt=Fe;return Fe>ft?Mt=ft:Fe<1&&(Mt=1),Mt!==je&&Ae(Mt),xe(Mt),S==null||S(Mt,se),Mt}return te}var Ye=te>1,ze=te2?Mt-2:0),Fn=2;Fnh?h:te*se])),Et=null,st=ii(void 0,se,h);if(E&&h<=se)return null;var De=[],$e={rootPrefixCls:a,onClick:ut,onKeyPress:gt,showTitle:A,itemRender:W,page:-1},Re=te-1>0?te-1:0,Be=te+1=vt*2&&te!==3&&(De[0]=ue.cloneElement(De[0],{className:ae("".concat(a,"-item-after-jump-prev"),De[0].props.className)}),De.unshift(Gt)),st-te>=vt*2&&te!==st-2){var qe=De[De.length-1];De[De.length-1]=ue.cloneElement(qe,{className:ae("".concat(a,"-item-before-jump-next"),qe.props.className)}),De.push(Et)}Vt!==1&&De.unshift(ue.createElement(Ps,Le({},$e,{key:1,page:1}))),Jt!==st&&De.push(ue.createElement(Ps,Le({},$e,{key:st,page:st})))}var yt=Ft(Re);if(yt){var $t=!Ye||!st;yt=ue.createElement("li",{title:A?B.prev_page:null,onClick:Ke,tabIndex:$t?null:0,onKeyDown:Ht,className:ae("".concat(a,"-prev"),K({},"".concat(a,"-disabled"),$t)),"aria-disabled":$t},yt)}var Ve=Rt(Be);if(Ve){var Je,Ct;F?(Je=!ze,Ct=Ye?0:null):(Je=!ze||!st,Ct=Je?null:0),Ve=ue.createElement("li",{title:A?B.next_page:null,onClick:Ne,tabIndex:Ct,onKeyDown:qt,className:ae("".concat(a,"-next"),K({},"".concat(a,"-disabled"),Je)),"aria-disabled":Je},Ve)}var At=ae(a,c,K(K(K(K(K({},"".concat(a,"-start"),O==="start"),"".concat(a,"-center"),O==="center"),"".concat(a,"-end"),O==="end"),"".concat(a,"-simple"),F),"".concat(a,"-disabled"),z));return ue.createElement("ul",Le({className:At,style:V,ref:fe},Bt),Ze,yt,F?bt:De,Ve,ue.createElement(rB,{locale:B,rootPrefixCls:a,disabled:z,selectPrefixCls:s,changeSize:Qe,pageSize:se,pageSizeOptions:U,quickGo:mt?ut:null,goButton:Ot,showSizeChanger:Z,sizeChangerRender:D}))};const iB=e=>{const{componentCls:t}=e;return{[`${t}-disabled`]:{"&, &:hover":{cursor:"not-allowed",[`${t}-item-link`]:{color:e.colorTextDisabled,cursor:"not-allowed"}},"&:focus-visible":{cursor:"not-allowed",[`${t}-item-link`]:{color:e.colorTextDisabled,cursor:"not-allowed"}}},[`&${t}-disabled`]:{cursor:"not-allowed",[`${t}-item`]:{cursor:"not-allowed",backgroundColor:"transparent","&:hover, &:active":{backgroundColor:"transparent"},a:{color:e.colorTextDisabled,backgroundColor:"transparent",border:"none",cursor:"not-allowed"},"&-active":{borderColor:e.colorBorder,backgroundColor:e.itemActiveBgDisabled,"&:hover, &:active":{backgroundColor:e.itemActiveBgDisabled},a:{color:e.itemActiveColorDisabled}}},[`${t}-item-link`]:{color:e.colorTextDisabled,cursor:"not-allowed","&:hover, &:active":{backgroundColor:"transparent"},[`${t}-simple&`]:{backgroundColor:"transparent","&:hover, &:active":{backgroundColor:"transparent"}}},[`${t}-simple-pager`]:{color:e.colorTextDisabled},[`${t}-jump-prev, ${t}-jump-next`]:{[`${t}-item-link-icon`]:{opacity:0},[`${t}-item-ellipsis`]:{opacity:1}}}}},lB=e=>{const{componentCls:t}=e;return{[`&${t}-mini ${t}-total-text, &${t}-mini ${t}-simple-pager`]:{height:e.itemSizeSM,lineHeight:de(e.itemSizeSM)},[`&${t}-mini ${t}-item`]:{minWidth:e.itemSizeSM,height:e.itemSizeSM,margin:0,lineHeight:de(e.calc(e.itemSizeSM).sub(2).equal())},[`&${t}-mini ${t}-prev, &${t}-mini ${t}-next`]:{minWidth:e.itemSizeSM,height:e.itemSizeSM,margin:0,lineHeight:de(e.itemSizeSM)},[`&${t}-mini:not(${t}-disabled)`]:{[`${t}-prev, ${t}-next`]:{[`&:hover ${t}-item-link`]:{backgroundColor:e.colorBgTextHover},[`&:active ${t}-item-link`]:{backgroundColor:e.colorBgTextActive},[`&${t}-disabled:hover ${t}-item-link`]:{backgroundColor:"transparent"}}},[` + &${t}-mini ${t}-prev ${t}-item-link, + &${t}-mini ${t}-next ${t}-item-link + `]:{backgroundColor:"transparent",borderColor:"transparent","&::after":{height:e.itemSizeSM,lineHeight:de(e.itemSizeSM)}},[`&${t}-mini ${t}-jump-prev, &${t}-mini ${t}-jump-next`]:{height:e.itemSizeSM,marginInlineEnd:0,lineHeight:de(e.itemSizeSM)},[`&${t}-mini ${t}-options`]:{marginInlineStart:e.paginationMiniOptionsMarginInlineStart,"&-size-changer":{top:e.miniOptionsSizeChangerTop},"&-quick-jumper":{height:e.itemSizeSM,lineHeight:de(e.itemSizeSM),input:Object.assign(Object.assign({},Eh(e)),{width:e.paginationMiniQuickJumperInputWidth,height:e.controlHeightSM})}}}},sB=e=>{const{componentCls:t}=e;return{[`&${t}-simple`]:{[`${t}-prev, ${t}-next`]:{height:e.itemSize,lineHeight:de(e.itemSize),verticalAlign:"top",[`${t}-item-link`]:{height:e.itemSize,backgroundColor:"transparent",border:0,"&:hover":{backgroundColor:e.colorBgTextHover},"&:active":{backgroundColor:e.colorBgTextActive},"&::after":{height:e.itemSize,lineHeight:de(e.itemSize)}}},[`${t}-simple-pager`]:{display:"inline-flex",alignItems:"center",height:e.itemSize,marginInlineEnd:e.marginXS,input:{boxSizing:"border-box",height:"100%",width:e.quickJumperInputWidth,padding:`0 ${de(e.paginationItemPaddingInline)}`,textAlign:"center",backgroundColor:e.itemInputBg,border:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadius,outline:"none",transition:`border-color ${e.motionDurationMid}`,color:"inherit","&:hover":{borderColor:e.colorPrimary},"&:focus":{borderColor:e.colorPrimaryHover,boxShadow:`${de(e.inputOutlineOffset)} 0 ${de(e.controlOutlineWidth)} ${e.controlOutline}`},"&[disabled]":{color:e.colorTextDisabled,backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,cursor:"not-allowed"}}},[`&${t}-disabled`]:{[`${t}-prev, ${t}-next`]:{[`${t}-item-link`]:{"&:hover, &:active":{backgroundColor:"transparent"}}}},[`&${t}-mini`]:{[`${t}-prev, ${t}-next`]:{height:e.itemSizeSM,lineHeight:de(e.itemSizeSM),[`${t}-item-link`]:{height:e.itemSizeSM,"&::after":{height:e.itemSizeSM,lineHeight:de(e.itemSizeSM)}}},[`${t}-simple-pager`]:{height:e.itemSizeSM,input:{width:e.paginationMiniQuickJumperInputWidth}}}}}},cB=e=>{const{componentCls:t}=e;return{[`${t}-jump-prev, ${t}-jump-next`]:{outline:0,[`${t}-item-container`]:{position:"relative",[`${t}-item-link-icon`]:{color:e.colorPrimary,fontSize:e.fontSizeSM,opacity:0,transition:`all ${e.motionDurationMid}`,"&-svg":{top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,margin:"auto"}},[`${t}-item-ellipsis`]:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,display:"block",margin:"auto",color:e.colorTextDisabled,letterSpacing:e.paginationEllipsisLetterSpacing,textAlign:"center",textIndent:e.paginationEllipsisTextIndent,opacity:1,transition:`all ${e.motionDurationMid}`}},"&:hover":{[`${t}-item-link-icon`]:{opacity:1},[`${t}-item-ellipsis`]:{opacity:0}}},[` + ${t}-prev, + ${t}-jump-prev, + ${t}-jump-next + `]:{marginInlineEnd:e.marginXS},[` + ${t}-prev, + ${t}-next, + ${t}-jump-prev, + ${t}-jump-next + `]:{display:"inline-block",minWidth:e.itemSize,height:e.itemSize,color:e.colorText,fontFamily:e.fontFamily,lineHeight:de(e.itemSize),textAlign:"center",verticalAlign:"middle",listStyle:"none",borderRadius:e.borderRadius,cursor:"pointer",transition:`all ${e.motionDurationMid}`},[`${t}-prev, ${t}-next`]:{outline:0,button:{color:e.colorText,cursor:"pointer",userSelect:"none"},[`${t}-item-link`]:{display:"block",width:"100%",height:"100%",padding:0,fontSize:e.fontSizeSM,textAlign:"center",backgroundColor:"transparent",border:`${de(e.lineWidth)} ${e.lineType} transparent`,borderRadius:e.borderRadius,outline:"none",transition:`all ${e.motionDurationMid}`},[`&:hover ${t}-item-link`]:{backgroundColor:e.colorBgTextHover},[`&:active ${t}-item-link`]:{backgroundColor:e.colorBgTextActive},[`&${t}-disabled:hover`]:{[`${t}-item-link`]:{backgroundColor:"transparent"}}},[`${t}-slash`]:{marginInlineEnd:e.paginationSlashMarginInlineEnd,marginInlineStart:e.paginationSlashMarginInlineStart},[`${t}-options`]:{display:"inline-block",marginInlineStart:e.margin,verticalAlign:"middle","&-size-changer":{display:"inline-block",width:"auto"},"&-quick-jumper":{display:"inline-block",height:e.controlHeight,marginInlineStart:e.marginXS,lineHeight:de(e.controlHeight),verticalAlign:"top",input:Object.assign(Object.assign(Object.assign({},wh(e)),xh(e,{borderColor:e.colorBorder,hoverBorderColor:e.colorPrimaryHover,activeBorderColor:e.colorPrimary,activeShadow:e.activeShadow})),{"&[disabled]":Object.assign({},gd(e)),width:e.quickJumperInputWidth,height:e.controlHeight,boxSizing:"border-box",margin:0,marginInlineStart:e.marginXS,marginInlineEnd:e.marginXS})}}}},uB=e=>{const{componentCls:t}=e;return{[`${t}-item`]:{display:"inline-block",minWidth:e.itemSize,height:e.itemSize,marginInlineEnd:e.marginXS,fontFamily:e.fontFamily,lineHeight:de(e.calc(e.itemSize).sub(2).equal()),textAlign:"center",verticalAlign:"middle",listStyle:"none",backgroundColor:e.itemBg,border:`${de(e.lineWidth)} ${e.lineType} transparent`,borderRadius:e.borderRadius,outline:0,cursor:"pointer",userSelect:"none",a:{display:"block",padding:`0 ${de(e.paginationItemPaddingInline)}`,color:e.colorText,"&:hover":{textDecoration:"none"}},[`&:not(${t}-item-active)`]:{"&:hover":{transition:`all ${e.motionDurationMid}`,backgroundColor:e.colorBgTextHover},"&:active":{backgroundColor:e.colorBgTextActive}},"&-active":{fontWeight:e.fontWeightStrong,backgroundColor:e.itemActiveBg,borderColor:e.colorPrimary,a:{color:e.itemActiveColor},"&:hover":{borderColor:e.colorPrimaryHover},"&:hover a":{color:e.itemActiveColorHover}}}}},fB=e=>{const{componentCls:t}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Tr(e)),{display:"flex",flexWrap:"wrap",rowGap:e.paddingXS,"&-start":{justifyContent:"start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"end"},"ul, ol":{margin:0,padding:0,listStyle:"none"},"&::after":{display:"block",clear:"both",height:0,overflow:"hidden",visibility:"hidden",content:'""'},[`${t}-total-text`]:{display:"inline-block",height:e.itemSize,marginInlineEnd:e.marginXS,lineHeight:de(e.calc(e.itemSize).sub(2).equal()),verticalAlign:"middle"}}),uB(e)),cB(e)),sB(e)),lB(e)),iB(e)),{[`@media only screen and (max-width: ${e.screenLG}px)`]:{[`${t}-item`]:{"&-after-jump-prev, &-before-jump-next":{display:"none"}}},[`@media only screen and (max-width: ${e.screenSM}px)`]:{[`${t}-options`]:{display:"none"}}}),[`&${e.componentCls}-rtl`]:{direction:"rtl"}}},dB=e=>{const{componentCls:t}=e;return{[`${t}:not(${t}-disabled)`]:{[`${t}-item`]:Object.assign({},Ol(e)),[`${t}-jump-prev, ${t}-jump-next`]:{"&:focus-visible":Object.assign({[`${t}-item-link-icon`]:{opacity:1},[`${t}-item-ellipsis`]:{opacity:0}},cc(e))},[`${t}-prev, ${t}-next`]:{[`&:focus-visible ${t}-item-link`]:cc(e)}}}},a$=e=>Object.assign({itemBg:e.colorBgContainer,itemSize:e.controlHeight,itemSizeSM:e.controlHeightSM,itemActiveBg:e.colorBgContainer,itemActiveColor:e.colorPrimary,itemActiveColorHover:e.colorPrimaryHover,itemLinkBg:e.colorBgContainer,itemActiveColorDisabled:e.colorTextDisabled,itemActiveBgDisabled:e.controlItemBgActiveDisabled,itemInputBg:e.colorBgContainer,miniOptionsSizeChangerTop:0},$c(e)),o$=e=>un(e,{inputOutlineOffset:0,quickJumperInputWidth:e.calc(e.controlHeightLG).mul(1.25).equal(),paginationMiniOptionsMarginInlineStart:e.calc(e.marginXXS).div(2).equal(),paginationMiniQuickJumperInputWidth:e.calc(e.controlHeightLG).mul(1.1).equal(),paginationItemPaddingInline:e.calc(e.marginXXS).mul(1.5).equal(),paginationEllipsisLetterSpacing:e.calc(e.marginXXS).div(2).equal(),paginationSlashMarginInlineStart:e.marginSM,paginationSlashMarginInlineEnd:e.marginSM,paginationEllipsisTextIndent:"0.13em"},Oc(e)),mB=_n("Pagination",e=>{const t=o$(e);return[fB(t),dB(t)]},a$),vB=e=>{const{componentCls:t}=e;return{[`${t}${t}-bordered${t}-disabled:not(${t}-mini)`]:{"&, &:hover":{[`${t}-item-link`]:{borderColor:e.colorBorder}},"&:focus-visible":{[`${t}-item-link`]:{borderColor:e.colorBorder}},[`${t}-item, ${t}-item-link`]:{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,[`&:hover:not(${t}-item-active)`]:{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,a:{color:e.colorTextDisabled}},[`&${t}-item-active`]:{backgroundColor:e.itemActiveBgDisabled}},[`${t}-prev, ${t}-next`]:{"&:hover button":{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,color:e.colorTextDisabled},[`${t}-item-link`]:{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder}}},[`${t}${t}-bordered:not(${t}-mini)`]:{[`${t}-prev, ${t}-next`]:{"&:hover button":{borderColor:e.colorPrimaryHover,backgroundColor:e.itemBg},[`${t}-item-link`]:{backgroundColor:e.itemLinkBg,borderColor:e.colorBorder},[`&:hover ${t}-item-link`]:{borderColor:e.colorPrimary,backgroundColor:e.itemBg,color:e.colorPrimary},[`&${t}-disabled`]:{[`${t}-item-link`]:{borderColor:e.colorBorder,color:e.colorTextDisabled}}},[`${t}-item`]:{backgroundColor:e.itemBg,border:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,[`&:hover:not(${t}-item-active)`]:{borderColor:e.colorPrimary,backgroundColor:e.itemBg,a:{color:e.colorPrimary}},"&-active":{borderColor:e.colorPrimary}}}}},gB=Xf(["Pagination","bordered"],e=>{const t=o$(e);return vB(t)},a$);function X1(e){return f.useMemo(()=>typeof e=="boolean"?[e,{}]:e&&typeof e=="object"?[!0,e]:[void 0,void 0],[e])}var pB=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{align:t,prefixCls:r,selectPrefixCls:a,className:i,rootClassName:s,style:c,size:d,locale:m,responsive:v,showSizeChanger:p,selectComponentClass:h,pageSizeOptions:y}=e,C=pB(e,["align","prefixCls","selectPrefixCls","className","rootClassName","style","size","locale","responsive","showSizeChanger","selectComponentClass","pageSizeOptions"]),{xs:w}=gh(v),[,x]=ta(),{getPrefixCls:S,direction:E,showSizeChanger:O,className:R,style:_}=Lr("pagination"),T=S("pagination",r),[M,N,A]=mB(T),j=Ta(d),I=j==="small"||!!(w&&!j&&v),[L]=zl("Pagination",yE),B=Object.assign(Object.assign({},L),m),[V,H]=X1(p),[Q,z]=X1(O),F=V??Q,q=H??z,ee=h||Ll,Z=f.useMemo(()=>y?y.map(Y=>Number(Y)):void 0,[y]),D=Y=>{var ie;const{disabled:ce,size:fe,onSizeChange:Te,"aria-label":he,className:se,options:ye}=Y,{className:be,onChange:ge}=q||{},te=(ie=ye.find(xe=>String(xe.value)===String(fe)))===null||ie===void 0?void 0:ie.value;return f.createElement(ee,Object.assign({disabled:ce,showSearch:!0,popupMatchSelectWidth:!1,getPopupContainer:xe=>xe.parentNode,"aria-label":he,options:ye},q,{value:te,onChange:(xe,Ee)=>{Te==null||Te(xe),ge==null||ge(xe,Ee)},size:I?"small":"middle",className:ae(se,be)}))},U=f.useMemo(()=>{const Y=f.createElement("span",{className:`${T}-item-ellipsis`},"•••"),ie=f.createElement("button",{className:`${T}-item-link`,type:"button",tabIndex:-1},E==="rtl"?f.createElement(Of,null):f.createElement(Nf,null)),ce=f.createElement("button",{className:`${T}-item-link`,type:"button",tabIndex:-1},E==="rtl"?f.createElement(Nf,null):f.createElement(Of,null)),fe=f.createElement("a",{className:`${T}-item-link`},f.createElement("div",{className:`${T}-item-container`},E==="rtl"?f.createElement(G1,{className:`${T}-item-link-icon`}):f.createElement(q1,{className:`${T}-item-link-icon`}),Y)),Te=f.createElement("a",{className:`${T}-item-link`},f.createElement("div",{className:`${T}-item-container`},E==="rtl"?f.createElement(q1,{className:`${T}-item-link-icon`}):f.createElement(G1,{className:`${T}-item-link-icon`}),Y));return{prevIcon:ie,nextIcon:ce,jumpPrevIcon:fe,jumpNextIcon:Te}},[E,T]),G=S("select",a),W=ae({[`${T}-${t}`]:!!t,[`${T}-mini`]:I,[`${T}-rtl`]:E==="rtl",[`${T}-bordered`]:x.wireframe},R,i,s,N,A),X=Object.assign(Object.assign({},_),c);return M(f.createElement(f.Fragment,null,x.wireframe&&f.createElement(gB,{prefixCls:T}),f.createElement(oB,Object.assign({},U,C,{style:X,prefixCls:T,selectPrefixCls:G,className:W,locale:B,pageSizeOptions:Z,showSizeChanger:F,sizeChangerRender:D}))))},Df=100,i$=Df/5,l$=Df/2-i$/2,vg=l$*2*Math.PI,Y1=50,Q1=e=>{const{dotClassName:t,style:r,hasCircleCls:a}=e;return f.createElement("circle",{className:ae(`${t}-circle`,{[`${t}-circle-bg`]:a}),r:l$,cx:Y1,cy:Y1,strokeWidth:i$,style:r})},hB=({percent:e,prefixCls:t})=>{const r=`${t}-dot`,a=`${r}-holder`,i=`${a}-hidden`,[s,c]=f.useState(!1);nn(()=>{e!==0&&c(!0)},[e!==0]);const d=Math.max(Math.min(e,100),0);if(!s)return null;const m={strokeDashoffset:`${vg/4}`,strokeDasharray:`${vg*d/100} ${vg*(100-d)/100}`};return f.createElement("span",{className:ae(a,`${r}-progress`,d<=0&&i)},f.createElement("svg",{viewBox:`0 0 ${Df} ${Df}`,role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":d},f.createElement(Q1,{dotClassName:r,hasCircleCls:!0}),f.createElement(Q1,{dotClassName:r,style:m})))};function bB(e){const{prefixCls:t,percent:r=0}=e,a=`${t}-dot`,i=`${a}-holder`,s=`${i}-hidden`;return f.createElement(f.Fragment,null,f.createElement("span",{className:ae(i,r>0&&s)},f.createElement("span",{className:ae(a,`${t}-dot-spin`)},[1,2,3,4].map(c=>f.createElement("i",{className:`${t}-dot-item`,key:c})))),f.createElement(hB,{prefixCls:t,percent:r}))}function yB(e){var t;const{prefixCls:r,indicator:a,percent:i}=e,s=`${r}-dot`;return a&&f.isValidElement(a)?bi(a,{className:ae((t=a.props)===null||t===void 0?void 0:t.className,s),percent:i}):f.createElement(bB,{prefixCls:r,percent:i})}const SB=new rn("antSpinMove",{to:{opacity:1}}),CB=new rn("antRotate",{to:{transform:"rotate(405deg)"}}),xB=e=>{const{componentCls:t,calc:r}=e;return{[t]:Object.assign(Object.assign({},Tr(e)),{position:"absolute",display:"none",color:e.colorPrimary,fontSize:0,textAlign:"center",verticalAlign:"middle",opacity:0,transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`,"&-spinning":{position:"relative",display:"inline-block",opacity:1},[`${t}-text`]:{fontSize:e.fontSize,paddingTop:r(r(e.dotSize).sub(e.fontSize)).div(2).add(2).equal()},"&-fullscreen":{position:"fixed",width:"100vw",height:"100vh",backgroundColor:e.colorBgMask,zIndex:e.zIndexPopupBase,inset:0,display:"flex",alignItems:"center",flexDirection:"column",justifyContent:"center",opacity:0,visibility:"hidden",transition:`all ${e.motionDurationMid}`,"&-show":{opacity:1,visibility:"visible"},[t]:{[`${t}-dot-holder`]:{color:e.colorWhite},[`${t}-text`]:{color:e.colorTextLightSolid}}},"&-nested-loading":{position:"relative",[`> div > ${t}`]:{position:"absolute",top:0,insetInlineStart:0,zIndex:4,display:"block",width:"100%",height:"100%",maxHeight:e.contentHeight,[`${t}-dot`]:{position:"absolute",top:"50%",insetInlineStart:"50%",margin:r(e.dotSize).mul(-1).div(2).equal()},[`${t}-text`]:{position:"absolute",top:"50%",width:"100%",textShadow:`0 1px 2px ${e.colorBgContainer}`},[`&${t}-show-text ${t}-dot`]:{marginTop:r(e.dotSize).div(2).mul(-1).sub(10).equal()},"&-sm":{[`${t}-dot`]:{margin:r(e.dotSizeSM).mul(-1).div(2).equal()},[`${t}-text`]:{paddingTop:r(r(e.dotSizeSM).sub(e.fontSize)).div(2).add(2).equal()},[`&${t}-show-text ${t}-dot`]:{marginTop:r(e.dotSizeSM).div(2).mul(-1).sub(10).equal()}},"&-lg":{[`${t}-dot`]:{margin:r(e.dotSizeLG).mul(-1).div(2).equal()},[`${t}-text`]:{paddingTop:r(r(e.dotSizeLG).sub(e.fontSize)).div(2).add(2).equal()},[`&${t}-show-text ${t}-dot`]:{marginTop:r(e.dotSizeLG).div(2).mul(-1).sub(10).equal()}}},[`${t}-container`]:{position:"relative",transition:`opacity ${e.motionDurationSlow}`,"&::after":{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,zIndex:10,width:"100%",height:"100%",background:e.colorBgContainer,opacity:0,transition:`all ${e.motionDurationSlow}`,content:'""',pointerEvents:"none"}},[`${t}-blur`]:{clear:"both",opacity:.5,userSelect:"none",pointerEvents:"none","&::after":{opacity:.4,pointerEvents:"auto"}}},"&-tip":{color:e.spinDotDefault},[`${t}-dot-holder`]:{width:"1em",height:"1em",fontSize:e.dotSize,display:"inline-block",transition:`transform ${e.motionDurationSlow} ease, opacity ${e.motionDurationSlow} ease`,transformOrigin:"50% 50%",lineHeight:1,color:e.colorPrimary,"&-hidden":{transform:"scale(0.3)",opacity:0}},[`${t}-dot-progress`]:{position:"absolute",inset:0},[`${t}-dot`]:{position:"relative",display:"inline-block",fontSize:e.dotSize,width:"1em",height:"1em","&-item":{position:"absolute",display:"block",width:r(e.dotSize).sub(r(e.marginXXS).div(2)).div(2).equal(),height:r(e.dotSize).sub(r(e.marginXXS).div(2)).div(2).equal(),background:"currentColor",borderRadius:"100%",transform:"scale(0.75)",transformOrigin:"50% 50%",opacity:.3,animationName:SB,animationDuration:"1s",animationIterationCount:"infinite",animationTimingFunction:"linear",animationDirection:"alternate","&:nth-child(1)":{top:0,insetInlineStart:0,animationDelay:"0s"},"&:nth-child(2)":{top:0,insetInlineEnd:0,animationDelay:"0.4s"},"&:nth-child(3)":{insetInlineEnd:0,bottom:0,animationDelay:"0.8s"},"&:nth-child(4)":{bottom:0,insetInlineStart:0,animationDelay:"1.2s"}},"&-spin":{transform:"rotate(45deg)",animationName:CB,animationDuration:"1.2s",animationIterationCount:"infinite",animationTimingFunction:"linear"},"&-circle":{strokeLinecap:"round",transition:["stroke-dashoffset","stroke-dasharray","stroke","stroke-width","opacity"].map(a=>`${a} ${e.motionDurationSlow} ease`).join(","),fillOpacity:0,stroke:"currentcolor"},"&-circle-bg":{stroke:e.colorFillSecondary}},[`&-sm ${t}-dot`]:{"&, &-holder":{fontSize:e.dotSizeSM}},[`&-sm ${t}-dot-holder`]:{i:{width:r(r(e.dotSizeSM).sub(r(e.marginXXS).div(2))).div(2).equal(),height:r(r(e.dotSizeSM).sub(r(e.marginXXS).div(2))).div(2).equal()}},[`&-lg ${t}-dot`]:{"&, &-holder":{fontSize:e.dotSizeLG}},[`&-lg ${t}-dot-holder`]:{i:{width:r(r(e.dotSizeLG).sub(e.marginXXS)).div(2).equal(),height:r(r(e.dotSizeLG).sub(e.marginXXS)).div(2).equal()}},[`&${t}-show-text ${t}-text`]:{display:"block"}})}},EB=e=>{const{controlHeightLG:t,controlHeight:r}=e;return{contentHeight:400,dotSize:t/2,dotSizeSM:t*.35,dotSizeLG:r}},wB=_n("Spin",e=>{const t=un(e,{spinDotDefault:e.colorTextDescription});return xB(t)},EB),OB=200,Z1=[[30,.05],[70,.03],[96,.01]];function $B(e,t){const[r,a]=f.useState(0),i=f.useRef(null),s=t==="auto";return f.useEffect(()=>(s&&e&&(a(0),i.current=setInterval(()=>{a(c=>{const d=100-c;for(let m=0;m{i.current&&(clearInterval(i.current),i.current=null)}),[s,e]),s?r:t}var RB=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var t;const{prefixCls:r,spinning:a=!0,delay:i=0,className:s,rootClassName:c,size:d="default",tip:m,wrapperClassName:v,style:p,children:h,fullscreen:y=!1,indicator:C,percent:w}=e,x=RB(e,["prefixCls","spinning","delay","className","rootClassName","size","tip","wrapperClassName","style","children","fullscreen","indicator","percent"]),{getPrefixCls:S,direction:E,className:O,style:R,indicator:_}=Lr("spin"),T=S("spin",r),[M,N,A]=wB(T),[j,I]=f.useState(()=>a&&!TB(a,i)),L=$B(j,w);f.useEffect(()=>{if(a){const q=bP(i,()=>{I(!0)});return q(),()=>{var ee;(ee=q==null?void 0:q.cancel)===null||ee===void 0||ee.call(q)}}I(!1)},[i,a]);const B=f.useMemo(()=>typeof h<"u"&&!y,[h,y]),V=ae(T,O,{[`${T}-sm`]:d==="small",[`${T}-lg`]:d==="large",[`${T}-spinning`]:j,[`${T}-show-text`]:!!m,[`${T}-rtl`]:E==="rtl"},s,!y&&c,N,A),H=ae(`${T}-container`,{[`${T}-blur`]:j}),Q=(t=C??_)!==null&&t!==void 0?t:s$,z=Object.assign(Object.assign({},R),p),F=f.createElement("div",Object.assign({},x,{style:z,className:V,"aria-live":"polite","aria-busy":j}),f.createElement(yB,{prefixCls:T,indicator:Q,percent:L}),m&&(B||y)?f.createElement("div",{className:`${T}-text`},m):null);return M(B?f.createElement("div",Object.assign({},x,{className:ae(`${T}-nested-loading`,v,N,A)}),j&&f.createElement("div",{key:"loading"},F),f.createElement("div",{className:H,key:"container"},h)):y?f.createElement("div",{className:ae(`${T}-fullscreen`,{[`${T}-fullscreen-show`]:j},c,N,A)},F):F)};_B.setDefaultIndicator=e=>{s$=e};const MB=(e,t=!1)=>t&&e==null?[]:Array.isArray(e)?e:[e];let ga=null,ui=e=>e(),mc=[],vc={};function J1(){const{getContainer:e,duration:t,rtl:r,maxCount:a,top:i}=vc,s=(e==null?void 0:e())||document.body;return{getContainer:()=>s,duration:t,rtl:r,maxCount:a,top:i}}const NB=ue.forwardRef((e,t)=>{const{messageConfig:r,sync:a}=e,{getPrefixCls:i}=f.useContext(It),s=vc.prefixCls||i("message"),c=f.useContext(uj),[d,m]=uw(Object.assign(Object.assign(Object.assign({},r),{prefixCls:s}),c.message));return ue.useImperativeHandle(t,()=>{const v=Object.assign({},d);return Object.keys(v).forEach(p=>{v[p]=(...h)=>(a(),d[p].apply(d,h))}),{instance:v,sync:a}}),m}),AB=ue.forwardRef((e,t)=>{const[r,a]=ue.useState(J1),i=()=>{a(J1)};ue.useEffect(i,[]);const s=$N(),c=s.getRootPrefixCls(),d=s.getIconPrefixCls(),m=s.getTheme(),v=ue.createElement(NB,{ref:t,sync:i,messageConfig:r});return ue.createElement(xi,{prefixCls:c,iconPrefixCls:d,theme:m},s.holderRender?s.holderRender(v):v)}),yd=()=>{if(!ga){const e=document.createDocumentFragment(),t={fragment:e};ga=t,ui(()=>{mw()(ue.createElement(AB,{ref:a=>{const{instance:i,sync:s}=a||{};Promise.resolve().then(()=>{!t.instance&&i&&(t.instance=i,t.sync=s,yd())})}}),e)});return}ga.instance&&(mc.forEach(e=>{const{type:t,skipped:r}=e;if(!r)switch(t){case"open":{ui(()=>{const a=ga.instance.open(Object.assign(Object.assign({},vc),e.config));a==null||a.then(e.resolve),e.setCloseFn(a)});break}case"destroy":ui(()=>{ga==null||ga.instance.destroy(e.key)});break;default:ui(()=>{var a;const i=(a=ga.instance)[t].apply(a,Ue(e.args));i==null||i.then(e.resolve),e.setCloseFn(i)})}}),mc=[])};function zB(e){vc=Object.assign(Object.assign({},vc),e),ui(()=>{var t;(t=ga==null?void 0:ga.sync)===null||t===void 0||t.call(ga)})}function jB(e){const t=nh(r=>{let a;const i={type:"open",config:e,resolve:r,setCloseFn:s=>{a=s}};return mc.push(i),()=>{a?ui(()=>{a()}):i.skipped=!0}});return yd(),t}function DB(e,t){const r=nh(a=>{let i;const s={type:e,args:t,resolve:a,setCloseFn:c=>{i=c}};return mc.push(s),()=>{i?ui(()=>{i()}):s.skipped=!0}});return yd(),r}const IB=e=>{mc.push({type:"destroy",key:e}),yd()},PB=["success","info","warning","error","loading"],BB={open:jB,destroy:IB,config:zB,useMessage:HA,_InternalPanelDoNotUseOrYouWillBeFired:AA},LB=BB;PB.forEach(e=>{LB[e]=(...t)=>DB(e,t)});var HB={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"},FB=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:HB}))},S9=f.forwardRef(FB);const VB=e=>{const{paddingXXS:t,lineWidth:r,tagPaddingHorizontal:a,componentCls:i,calc:s}=e,c=s(a).sub(r).equal(),d=s(t).sub(r).equal();return{[i]:Object.assign(Object.assign({},Tr(e)),{display:"inline-block",height:"auto",marginInlineEnd:e.marginXS,paddingInline:c,fontSize:e.tagFontSize,lineHeight:e.tagLineHeight,whiteSpace:"nowrap",background:e.defaultBg,border:`${de(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,opacity:1,transition:`all ${e.motionDurationMid}`,textAlign:"start",position:"relative",[`&${i}-rtl`]:{direction:"rtl"},"&, a, a:hover":{color:e.defaultColor},[`${i}-close-icon`]:{marginInlineStart:d,fontSize:e.tagIconSize,color:e.colorIcon,cursor:"pointer",transition:`all ${e.motionDurationMid}`,"&:hover":{color:e.colorTextHeading}},[`&${i}-has-color`]:{borderColor:"transparent",[`&, a, a:hover, ${e.iconCls}-close, ${e.iconCls}-close:hover`]:{color:e.colorTextLightSolid}},"&-checkable":{backgroundColor:"transparent",borderColor:"transparent",cursor:"pointer",[`&:not(${i}-checkable-checked):hover`]:{color:e.colorPrimary,backgroundColor:e.colorFillSecondary},"&:active, &-checked":{color:e.colorTextLightSolid},"&-checked":{backgroundColor:e.colorPrimary,"&:hover":{backgroundColor:e.colorPrimaryHover}},"&:active":{backgroundColor:e.colorPrimaryActive}},"&-hidden":{display:"none"},[`> ${e.iconCls} + span, > span + ${e.iconCls}`]:{marginInlineStart:c}}),[`${i}-borderless`]:{borderColor:"transparent",background:e.tagBorderlessBg}}},Th=e=>{const{lineWidth:t,fontSizeIcon:r,calc:a}=e,i=e.fontSizeSM;return un(e,{tagFontSize:i,tagLineHeight:de(a(e.lineHeightSM).mul(i).equal()),tagIconSize:a(r).sub(a(t).mul(2)).equal(),tagPaddingHorizontal:8,tagBorderlessBg:e.defaultBg})},_h=e=>({defaultBg:new On(e.colorFillQuaternary).onBackground(e.colorBgContainer).toHexString(),defaultColor:e.colorText}),c$=_n("Tag",e=>{const t=Th(e);return VB(t)},_h);var UB=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:r,style:a,className:i,checked:s,children:c,icon:d,onChange:m,onClick:v}=e,p=UB(e,["prefixCls","style","className","checked","children","icon","onChange","onClick"]),{getPrefixCls:h,tag:y}=f.useContext(It),C=R=>{m==null||m(!s),v==null||v(R)},w=h("tag",r),[x,S,E]=c$(w),O=ae(w,`${w}-checkable`,{[`${w}-checkable-checked`]:s},y==null?void 0:y.className,i,S,E);return x(f.createElement("span",Object.assign({},p,{ref:t,style:Object.assign(Object.assign({},a),y==null?void 0:y.style),className:O,onClick:C}),d,f.createElement("span",null,c)))}),GB=e=>jE(e,(t,{textColor:r,lightBorderColor:a,lightColor:i,darkColor:s})=>({[`${e.componentCls}${e.componentCls}-${t}`]:{color:r,background:i,borderColor:a,"&-inverse":{color:e.colorTextLightSolid,background:s,borderColor:s},[`&${e.componentCls}-borderless`]:{borderColor:"transparent"}}})),WB=Xf(["Tag","preset"],e=>{const t=Th(e);return GB(t)},_h);function KB(e){return typeof e!="string"?e:e.charAt(0).toUpperCase()+e.slice(1)}const Zu=(e,t,r)=>{const a=KB(r);return{[`${e.componentCls}${e.componentCls}-${t}`]:{color:e[`color${r}`],background:e[`color${a}Bg`],borderColor:e[`color${a}Border`],[`&${e.componentCls}-borderless`]:{borderColor:"transparent"}}}},XB=Xf(["Tag","status"],e=>{const t=Th(e);return[Zu(t,"success","Success"),Zu(t,"processing","Info"),Zu(t,"error","Error"),Zu(t,"warning","Warning")]},_h);var YB=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:r,className:a,rootClassName:i,style:s,children:c,icon:d,color:m,onClose:v,bordered:p=!0,visible:h}=e,y=YB(e,["prefixCls","className","rootClassName","style","children","icon","color","onClose","bordered","visible"]),{getPrefixCls:C,direction:w,tag:x}=f.useContext(It),[S,E]=f.useState(!0),O=or(y,["closeIcon","closable"]);f.useEffect(()=>{h!==void 0&&E(h)},[h]);const R=dO(m),_=X5(m),T=R||_,M=Object.assign(Object.assign({backgroundColor:m&&!T?m:void 0},x==null?void 0:x.style),s),N=C("tag",r),[A,j,I]=c$(N),L=ae(N,x==null?void 0:x.className,{[`${N}-${m}`]:T,[`${N}-has-color`]:m&&!T,[`${N}-hidden`]:!S,[`${N}-rtl`]:w==="rtl",[`${N}-borderless`]:!p},a,i,j,I),B=q=>{q.stopPropagation(),v==null||v(q),!q.defaultPrevented&&E(!1)},[,V]=xA(bC(e),bC(x),{closable:!1,closeIconRender:q=>{const ee=f.createElement("span",{className:`${N}-close-icon`,onClick:B},q);return th(q,ee,Z=>({onClick:D=>{var U;(U=Z==null?void 0:Z.onClick)===null||U===void 0||U.call(Z,D),B(D)},className:ae(Z==null?void 0:Z.className,`${N}-close-icon`)}))}}),H=typeof y.onClick=="function"||c&&c.type==="a",Q=d||null,z=Q?f.createElement(f.Fragment,null,Q,c&&f.createElement("span",null,c)):c,F=f.createElement("span",Object.assign({},O,{ref:t,className:L,style:M}),z,V,R&&f.createElement(WB,{key:"preset",prefixCls:N}),_&&f.createElement(XB,{key:"status",prefixCls:N}));return A(H?f.createElement(gw,{component:"Tag"},F):F)}),ZB=QB;ZB.CheckableTag=qB;var JB={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"},kB=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:JB}))},eL=f.forwardRef(kB),tL={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 170h-60c-4.4 0-8 3.6-8 8v518H310v-73c0-6.7-7.8-10.5-13-6.3l-141.9 112a8 8 0 000 12.6l141.9 112c5.3 4.2 13 .4 13-6.3v-75h498c35.3 0 64-28.7 64-64V178c0-4.4-3.6-8-8-8z"}}]},name:"enter",theme:"outlined"},nL=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:tL}))},rL=f.forwardRef(nL);const aL=(e,t,r,a)=>{const{titleMarginBottom:i,fontWeightStrong:s}=a;return{marginBottom:i,color:r,fontWeight:s,fontSize:e,lineHeight:t}},oL=e=>{const t=[1,2,3,4,5],r={};return t.forEach(a=>{r[` + h${a}&, + div&-h${a}, + div&-h${a} > textarea, + h${a} + `]=aL(e[`fontSizeHeading${a}`],e[`lineHeightHeading${a}`],e.colorTextHeading,e)}),r},iL=e=>{const{componentCls:t}=e;return{"a&, a":Object.assign(Object.assign({},zE(e)),{userSelect:"text",[`&[disabled], &${t}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed","&:active, &:hover":{color:e.colorTextDisabled},"&:active":{pointerEvents:"none"}}})}},lL=e=>({code:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.2em 0.1em",fontSize:"85%",fontFamily:e.fontFamilyCode,background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3},kbd:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.15em 0.1em",fontSize:"90%",fontFamily:e.fontFamilyCode,background:"rgba(150, 150, 150, 0.06)",border:"1px solid rgba(100, 100, 100, 0.2)",borderBottomWidth:2,borderRadius:3},mark:{padding:0,backgroundColor:yf[2]},"u, ins":{textDecoration:"underline",textDecorationSkipInk:"auto"},"s, del":{textDecoration:"line-through"},strong:{fontWeight:e.fontWeightStrong},"ul, ol":{marginInline:0,marginBlock:"0 1em",padding:0,li:{marginInline:"20px 0",marginBlock:0,paddingInline:"4px 0",paddingBlock:0}},ul:{listStyleType:"circle",ul:{listStyleType:"disc"}},ol:{listStyleType:"decimal"},"pre, blockquote":{margin:"1em 0"},pre:{padding:"0.4em 0.6em",whiteSpace:"pre-wrap",wordWrap:"break-word",background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3,fontFamily:e.fontFamilyCode,code:{display:"inline",margin:0,padding:0,fontSize:"inherit",fontFamily:"inherit",background:"transparent",border:0}},blockquote:{paddingInline:"0.6em 0",paddingBlock:0,borderInlineStart:"4px solid rgba(100, 100, 100, 0.2)",opacity:.85}}),sL=e=>{const{componentCls:t,paddingSM:r}=e,a=r;return{"&-edit-content":{position:"relative","div&":{insetInlineStart:e.calc(e.paddingSM).mul(-1).equal(),insetBlockStart:e.calc(a).div(-2).add(1).equal(),marginBottom:e.calc(a).div(2).sub(2).equal()},[`${t}-edit-content-confirm`]:{position:"absolute",insetInlineEnd:e.calc(e.marginXS).add(2).equal(),insetBlockEnd:e.marginXS,color:e.colorIcon,fontWeight:"normal",fontSize:e.fontSize,fontStyle:"normal",pointerEvents:"none"},textarea:{margin:"0!important",MozTransition:"none",height:"1em"}}}},cL=e=>({[`${e.componentCls}-copy-success`]:{"\n &,\n &:hover,\n &:focus":{color:e.colorSuccess}},[`${e.componentCls}-copy-icon-only`]:{marginInlineStart:0}}),uL=()=>({"\n a&-ellipsis,\n span&-ellipsis\n ":{display:"inline-block",maxWidth:"100%"},"&-ellipsis-single-line":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","a&, span&":{verticalAlign:"bottom"},"> code":{paddingBlock:0,maxWidth:"calc(100% - 1.2em)",display:"inline-block",overflow:"hidden",textOverflow:"ellipsis",verticalAlign:"bottom",boxSizing:"content-box"}},"&-ellipsis-multiple-line":{display:"-webkit-box",overflow:"hidden",WebkitLineClamp:3,WebkitBoxOrient:"vertical"}}),fL=e=>{const{componentCls:t,titleMarginTop:r}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorText,wordBreak:"break-word",lineHeight:e.lineHeight,[`&${t}-secondary`]:{color:e.colorTextDescription},[`&${t}-success`]:{color:e.colorSuccessText},[`&${t}-warning`]:{color:e.colorWarningText},[`&${t}-danger`]:{color:e.colorErrorText,"a&:active, a&:focus":{color:e.colorErrorTextActive},"a&:hover":{color:e.colorErrorTextHover}},[`&${t}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed",userSelect:"none"},"\n div&,\n p\n ":{marginBottom:"1em"}},oL(e)),{[` + & + h1${t}, + & + h2${t}, + & + h3${t}, + & + h4${t}, + & + h5${t} + `]:{marginTop:r},"\n div,\n ul,\n li,\n p,\n h1,\n h2,\n h3,\n h4,\n h5":{"\n + h1,\n + h2,\n + h3,\n + h4,\n + h5\n ":{marginTop:r}}}),lL(e)),iL(e)),{[` + ${t}-expand, + ${t}-collapse, + ${t}-edit, + ${t}-copy + `]:Object.assign(Object.assign({},zE(e)),{marginInlineStart:e.marginXXS})}),sL(e)),cL(e)),uL()),{"&-rtl":{direction:"rtl"}})}},dL=()=>({titleMarginTop:"1.2em",titleMarginBottom:"0.5em"}),u$=_n("Typography",fL,dL),mL=e=>{const{prefixCls:t,"aria-label":r,className:a,style:i,direction:s,maxLength:c,autoSize:d=!0,value:m,onSave:v,onCancel:p,onEnd:h,component:y,enterIcon:C=f.createElement(rL,null)}=e,w=f.useRef(null),x=f.useRef(!1),S=f.useRef(null),[E,O]=f.useState(m);f.useEffect(()=>{O(m)},[m]),f.useEffect(()=>{var H;if(!((H=w.current)===null||H===void 0)&&H.resizableTextArea){const{textArea:Q}=w.current.resizableTextArea;Q.focus();const{length:z}=Q.value;Q.setSelectionRange(z,z)}},[]);const R=({target:H})=>{O(H.value.replace(/[\n\r]/g,""))},_=()=>{x.current=!0},T=()=>{x.current=!1},M=({keyCode:H})=>{x.current||(S.current=H)},N=()=>{v(E.trim())},A=({keyCode:H,ctrlKey:Q,altKey:z,metaKey:F,shiftKey:q})=>{S.current!==H||x.current||Q||z||F||q||(H===rt.ENTER?(N(),h==null||h()):H===rt.ESC&&p())},j=()=>{N()},[I,L,B]=u$(t),V=ae(t,`${t}-edit-content`,{[`${t}-rtl`]:s==="rtl",[`${t}-${y}`]:!!y},a,L,B);return I(f.createElement("div",{className:V,style:i},f.createElement(n$,{ref:w,maxLength:c,value:E,onChange:R,onKeyDown:M,onKeyUp:A,onCompositionStart:_,onCompositionEnd:T,onBlur:j,"aria-label":r,rows:1,autoSize:d}),C!==null?bi(C,{className:`${t}-edit-content-confirm`}):null))};var gg,k1;function vL(){return k1||(k1=1,gg=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,r=[],a=0;a"u"){d&&console.warn("unable to use e.clipboardData"),d&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var S=t[c.format]||t.default;window.clipboardData.setData(S,s)}else x.clipboardData.clearData(),x.clipboardData.setData(c.format,s);c.onCopy&&(x.preventDefault(),c.onCopy(x.clipboardData))}),document.body.appendChild(y),p.selectNodeContents(y),h.addRange(p);var w=document.execCommand("copy");if(!w)throw new Error("copy command was unsuccessful");C=!0}catch(x){d&&console.error("unable to copy using execCommand: ",x),d&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(c.format||"text",s),c.onCopy&&c.onCopy(window.clipboardData),C=!0}catch(S){d&&console.error("unable to copy using clipboardData: ",S),d&&console.error("falling back to prompt"),m=a("message"in c?c.message:r),window.prompt(m,s)}}finally{h&&(typeof h.removeRange=="function"?h.removeRange(p):h.removeAllRanges()),y&&document.body.removeChild(y),v()}return C}return pg=i,pg}var pL=gL();const hL=Ml(pL);var bL=function(e,t,r,a){function i(s){return s instanceof r?s:new r(function(c){c(s)})}return new(r||(r=Promise))(function(s,c){function d(p){try{v(a.next(p))}catch(h){c(h)}}function m(p){try{v(a.throw(p))}catch(h){c(h)}}function v(p){p.done?s(p.value):i(p.value).then(d,m)}v((a=a.apply(e,t||[])).next())})};const yL=({copyConfig:e,children:t})=>{const[r,a]=f.useState(!1),[i,s]=f.useState(!1),c=f.useRef(null),d=()=>{c.current&&clearTimeout(c.current)},m={};e.format&&(m.format=e.format),f.useEffect(()=>d,[]);const v=Gn(p=>bL(void 0,void 0,void 0,function*(){var h;p==null||p.preventDefault(),p==null||p.stopPropagation(),s(!0);try{const y=typeof e.text=="function"?yield e.text():e.text;hL(y||MB(t,!0).join("")||"",m),s(!1),a(!0),d(),c.current=setTimeout(()=>{a(!1)},3e3),(h=e.onCopy)===null||h===void 0||h.call(e,p)}catch(y){throw s(!1),y}}));return{copied:r,copyLoading:i,onClick:v}};function hg(e,t){return f.useMemo(()=>{const r=!!e;return[r,Object.assign(Object.assign({},t),r&&typeof e=="object"?e:null)]},[e])}const SL=e=>{const t=f.useRef(void 0);return f.useEffect(()=>{t.current=e}),t.current},CL=(e,t,r)=>f.useMemo(()=>e===!0?{title:t??r}:f.isValidElement(e)?{title:e}:typeof e=="object"?Object.assign({title:t??r},e):{title:e},[e,t,r]);var xL=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{prefixCls:r,component:a="article",className:i,rootClassName:s,setContentRef:c,children:d,direction:m,style:v}=e,p=xL(e,["prefixCls","component","className","rootClassName","setContentRef","children","direction","style"]),{getPrefixCls:h,direction:y,className:C,style:w}=Lr("typography"),x=m??y,S=c?ea(t,c):t,E=h("typography",r),[O,R,_]=u$(E),T=ae(E,C,{[`${E}-rtl`]:x==="rtl"},i,s,R,_),M=Object.assign(Object.assign({},w),v);return O(f.createElement(a,Object.assign({className:T,style:M,ref:S},p),d))});var EL={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"}}]},name:"copy",theme:"outlined"},wL=function(t,r){return f.createElement(Mn,Le({},t,{ref:r,icon:EL}))},OL=f.forwardRef(wL);function tx(e){return e===!1?[!1,!1]:Array.isArray(e)?e:[e]}function bg(e,t,r){return e===!0||e===void 0?t:e||r&&t}function $L(e){const t=document.createElement("em");e.appendChild(t);const r=e.getBoundingClientRect(),a=t.getBoundingClientRect();return e.removeChild(t),r.left>a.left||a.right>r.right||r.top>a.top||a.bottom>r.bottom}const Mh=e=>["string","number"].includes(typeof e),RL=({prefixCls:e,copied:t,locale:r,iconOnly:a,tooltips:i,icon:s,tabIndex:c,onCopy:d,loading:m})=>{const v=tx(i),p=tx(s),{copied:h,copy:y}=r??{},C=t?h:y,w=bg(v[t?1:0],C),x=typeof w=="string"?w:C;return f.createElement(dd,{title:w},f.createElement("button",{type:"button",className:ae(`${e}-copy`,{[`${e}-copy-success`]:t,[`${e}-copy-icon-only`]:a}),onClick:d,"aria-label":x,tabIndex:c},t?bg(p[1],f.createElement(nO,null),!0):bg(p[0],m?f.createElement(Qf,null):f.createElement(OL,null),!0)))},Ju=f.forwardRef(({style:e,children:t},r)=>{const a=f.useRef(null);return f.useImperativeHandle(r,()=>({isExceed:()=>{const i=a.current;return i.scrollHeight>i.clientHeight},getHeight:()=>a.current.clientHeight})),f.createElement("span",{"aria-hidden":!0,ref:a,style:Object.assign({position:"fixed",display:"block",left:0,top:0,pointerEvents:"none",backgroundColor:"rgba(255, 0, 0, 0.65)"},e)},t)}),TL=e=>e.reduce((t,r)=>t+(Mh(r)?String(r).length:1),0);function nx(e,t){let r=0;const a=[];for(let i=0;it){const v=t-r;return a.push(String(s).slice(0,v)),a}a.push(s),r=m}return e}const yg=0,Sg=1,Cg=2,xg=3,rx=4,ku={display:"-webkit-box",overflow:"hidden",WebkitBoxOrient:"vertical"};function _L(e){const{enableMeasure:t,width:r,text:a,children:i,rows:s,expanded:c,miscDeps:d,onEllipsis:m}=e,v=f.useMemo(()=>kr(a),[a]),p=f.useMemo(()=>TL(v),[a]),h=f.useMemo(()=>i(v,!1),[a]),[y,C]=f.useState(null),w=f.useRef(null),x=f.useRef(null),S=f.useRef(null),E=f.useRef(null),O=f.useRef(null),[R,_]=f.useState(!1),[T,M]=f.useState(yg),[N,A]=f.useState(0),[j,I]=f.useState(null);nn(()=>{M(t&&r&&p?Sg:yg)},[r,a,s,t,v]),nn(()=>{var H,Q,z,F;if(T===Sg){M(Cg);const q=x.current&&getComputedStyle(x.current).whiteSpace;I(q)}else if(T===Cg){const q=!!(!((H=S.current)===null||H===void 0)&&H.isExceed());M(q?xg:rx),C(q?[0,p]:null),_(q);const ee=((Q=S.current)===null||Q===void 0?void 0:Q.getHeight())||0,Z=s===1?0:((z=E.current)===null||z===void 0?void 0:z.getHeight())||0,D=((F=O.current)===null||F===void 0?void 0:F.getHeight())||0,U=Math.max(ee,Z+D);A(U+1),m(q)}},[T]);const L=y?Math.ceil((y[0]+y[1])/2):0;nn(()=>{var H;const[Q,z]=y||[0,0];if(Q!==z){const q=(((H=w.current)===null||H===void 0?void 0:H.getHeight())||0)>N;let ee=L;z-Q===1&&(ee=q?Q:z),C(q?[Q,ee]:[ee,z])}},[y,L]);const B=f.useMemo(()=>{if(!t)return i(v,!1);if(T!==xg||!y||y[0]!==y[1]){const H=i(v,!1);return[rx,yg].includes(T)?H:f.createElement("span",{style:Object.assign(Object.assign({},ku),{WebkitLineClamp:s})},H)}return i(c?v:nx(v,y[0]),R)},[c,T,y,v].concat(Ue(d))),V={width:r,margin:0,padding:0,whiteSpace:j==="nowrap"?"normal":"inherit"};return f.createElement(f.Fragment,null,B,T===Cg&&f.createElement(f.Fragment,null,f.createElement(Ju,{style:Object.assign(Object.assign(Object.assign({},V),ku),{WebkitLineClamp:s}),ref:S},h),f.createElement(Ju,{style:Object.assign(Object.assign(Object.assign({},V),ku),{WebkitLineClamp:s-1}),ref:E},h),f.createElement(Ju,{style:Object.assign(Object.assign(Object.assign({},V),ku),{WebkitLineClamp:1}),ref:O},i([],!0))),T===xg&&y&&y[0]!==y[1]&&f.createElement(Ju,{style:Object.assign(Object.assign({},V),{top:400}),ref:w},i(nx(v,L),!0)),T===Sg&&f.createElement("span",{style:{whiteSpace:"inherit"},ref:x}))}const ML=({enableEllipsis:e,isEllipsis:t,children:r,tooltipProps:a})=>!(a!=null&&a.title)||!e?r:f.createElement(dd,Object.assign({open:t?void 0:!1},a),r);var NL=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var r;const{prefixCls:a,className:i,style:s,type:c,disabled:d,children:m,ellipsis:v,editable:p,copyable:h,component:y,title:C}=e,w=NL(e,["prefixCls","className","style","type","disabled","children","ellipsis","editable","copyable","component","title"]),{getPrefixCls:x,direction:S}=f.useContext(It),[E]=zl("Text"),O=f.useRef(null),R=f.useRef(null),_=x("typography",a),T=or(w,ax),[M,N]=hg(p),[A,j]=ur(!1,{value:N.editing}),{triggerType:I=["icon"]}=N,L=Ne=>{var Ge;Ne&&((Ge=N.onStart)===null||Ge===void 0||Ge.call(N)),j(Ne)},B=SL(A);nn(()=>{var Ne;!A&&B&&((Ne=R.current)===null||Ne===void 0||Ne.focus())},[A]);const V=Ne=>{Ne==null||Ne.preventDefault(),L(!0)},H=Ne=>{var Ge;(Ge=N.onChange)===null||Ge===void 0||Ge.call(N,Ne),L(!1)},Q=()=>{var Ne;(Ne=N.onCancel)===null||Ne===void 0||Ne.call(N),L(!1)},[z,F]=hg(h),{copied:q,copyLoading:ee,onClick:Z}=yL({copyConfig:F,children:m}),[D,U]=f.useState(!1),[G,W]=f.useState(!1),[X,Y]=f.useState(!1),[ie,ce]=f.useState(!1),[fe,Te]=f.useState(!0),[he,se]=hg(v,{expandable:!1,symbol:Ne=>Ne?E==null?void 0:E.collapse:E==null?void 0:E.expand}),[ye,be]=ur(se.defaultExpanded||!1,{value:se.expanded}),ge=he&&(!ye||se.expandable==="collapsible"),{rows:te=1}=se,xe=f.useMemo(()=>ge&&(se.suffix!==void 0||se.onEllipsis||se.expandable||M||z),[ge,se,M,z]);nn(()=>{he&&!xe&&(U(WC("webkitLineClamp")),W(WC("textOverflow")))},[xe,he]);const[Ee,_e]=f.useState(ge),je=f.useMemo(()=>xe?!1:te===1?G:D,[xe,G,D]);nn(()=>{_e(je&&ge)},[je,ge]);const Ae=ge&&(Ee?ie:X),He=ge&&te===1&&Ee,Ie=ge&&te>1&&Ee,Ce=(Ne,Ge)=>{var _t;be(Ge.expanded),(_t=se.onExpand)===null||_t===void 0||_t.call(se,Ne,Ge)},[Xe,at]=f.useState(0),mt=({offsetWidth:Ne})=>{at(Ne)},ke=Ne=>{var Ge;Y(Ne),X!==Ne&&((Ge=se.onEllipsis)===null||Ge===void 0||Ge.call(se,Ne))};f.useEffect(()=>{const Ne=O.current;if(he&&Ee&&Ne){const Ge=$L(Ne);ie!==Ge&&ce(Ge)}},[he,Ee,m,Ie,fe,Xe]),f.useEffect(()=>{const Ne=O.current;if(typeof IntersectionObserver>"u"||!Ne||!Ee||!ge)return;const Ge=new IntersectionObserver(()=>{Te(!!Ne.offsetParent)});return Ge.observe(Ne),()=>{Ge.disconnect()}},[Ee,ge]);const We=CL(se.tooltip,N.text,m),ct=f.useMemo(()=>{if(!(!he||Ee))return[N.text,m,C,We.title].find(Mh)},[he,Ee,C,We.title,Ae]);if(A)return f.createElement(mL,{value:(r=N.text)!==null&&r!==void 0?r:typeof m=="string"?m:"",onSave:H,onCancel:Q,onEnd:N.onEnd,prefixCls:_,className:i,style:s,direction:S,component:y,maxLength:N.maxLength,autoSize:N.autoSize,enterIcon:N.enterIcon});const Qe=()=>{const{expandable:Ne,symbol:Ge}=se;return Ne?f.createElement("button",{type:"button",key:"expand",className:`${_}-${ye?"collapse":"expand"}`,onClick:_t=>Ce(_t,{expanded:!ye}),"aria-label":ye?E.collapse:E==null?void 0:E.expand},typeof Ge=="function"?Ge(ye):Ge):null},ut=()=>{if(!M)return;const{icon:Ne,tooltip:Ge,tabIndex:_t}=N,gt=kr(Ge)[0]||(E==null?void 0:E.edit),Ht=typeof gt=="string"?gt:"";return I.includes("icon")?f.createElement(dd,{key:"edit",title:Ge===!1?"":gt},f.createElement("button",{type:"button",ref:R,className:`${_}-edit`,onClick:V,"aria-label":Ht,tabIndex:_t},Ne||f.createElement(eL,{role:"button"}))):null},Ye=()=>z?f.createElement(RL,Object.assign({key:"copy"},F,{prefixCls:_,copied:q,locale:E,onCopy:Z,loading:ee,iconOnly:m==null})):null,ze=Ne=>[Ne&&Qe(),ut(),Ye()],Ke=Ne=>[Ne&&!ye&&f.createElement("span",{"aria-hidden":!0,key:"ellipsis"},zL),se.suffix,ze(Ne)];return f.createElement(pa,{onResize:mt,disabled:!ge},Ne=>f.createElement(ML,{tooltipProps:We,enableEllipsis:ge,isEllipsis:Ae},f.createElement(f$,Object.assign({className:ae({[`${_}-${c}`]:c,[`${_}-disabled`]:d,[`${_}-ellipsis`]:he,[`${_}-ellipsis-single-line`]:He,[`${_}-ellipsis-multiple-line`]:Ie},i),prefixCls:a,style:Object.assign(Object.assign({},s),{WebkitLineClamp:Ie?te:void 0}),component:y,ref:ea(Ne,O,t),direction:S,onClick:I.includes("text")?V:void 0,"aria-label":ct==null?void 0:ct.toString(),title:C},T),f.createElement(_L,{enableMeasure:ge&&!Ee,text:m,rows:te,width:Xe,onEllipsis:ke,expanded:ye,miscDeps:[q,ye,ee,M,z,E].concat(Ue(ax.map(Ge=>e[Ge])))},(Ge,_t)=>AL(e,f.createElement(f.Fragment,null,Ge.length>0&&_t&&!ye&&ct?f.createElement("span",{key:"show-content","aria-hidden":!0},Ge):Ge,Ke(_t)))))))});var jL=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{ellipsis:r,rel:a,children:i,navigate:s}=e,c=jL(e,["ellipsis","rel","children","navigate"]),d=Object.assign(Object.assign({},c),{rel:a===void 0&&c.target==="_blank"?"noopener noreferrer":a});return f.createElement(Sd,Object.assign({},d,{ref:t,ellipsis:!!r,component:"a"}),i)});var IL=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{children:r}=e,a=IL(e,["children"]);return f.createElement(Sd,Object.assign({ref:t},a,{component:"div"}),r)});var BL=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{ellipsis:r,children:a}=e,i=BL(e,["ellipsis","children"]),s=f.useMemo(()=>r&&typeof r=="object"?or(r,["expandable","rows"]):r,[r]);return f.createElement(Sd,Object.assign({ref:t},i,{ellipsis:s,component:"span"}),a)},HL=f.forwardRef(LL);var FL=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{level:r=1,children:a}=e,i=FL(e,["level","children"]),s=VL.includes(r)?`h${r}`:"h1";return f.createElement(Sd,Object.assign({ref:t},i,{component:s}),a)}),Cd=f$;Cd.Text=HL;Cd.Link=DL;Cd.Title=UL;Cd.Paragraph=PL;var Bs={},Eg={exports:{}},ox;function xd(){return ox||(ox=1,(function(e){function t(r){return r&&r.__esModule?r:{default:r}}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports})(Eg)),Eg.exports}var Ls={},ix;function qL(){if(ix)return Ls;ix=1,Object.defineProperty(Ls,"__esModule",{value:!0}),Ls.default=void 0;var e={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"};return Ls.default=e,Ls}var Hs={},Fs={},Vs={},wg={exports:{}},Og={exports:{}},$g={exports:{}},Rg={exports:{}},lx;function d$(){return lx||(lx=1,(function(e){function t(r){"@babel/helpers - typeof";return e.exports=t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports})(Rg)),Rg.exports}var Tg={exports:{}},sx;function GL(){return sx||(sx=1,(function(e){var t=d$().default;function r(a,i){if(t(a)!="object"||!a)return a;var s=a[Symbol.toPrimitive];if(s!==void 0){var c=s.call(a,i||"default");if(t(c)!="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(i==="string"?String:Number)(a)}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports})(Tg)),Tg.exports}var cx;function WL(){return cx||(cx=1,(function(e){var t=d$().default,r=GL();function a(i){var s=r(i,"string");return t(s)=="symbol"?s:s+""}e.exports=a,e.exports.__esModule=!0,e.exports.default=e.exports})($g)),$g.exports}var ux;function KL(){return ux||(ux=1,(function(e){var t=WL();function r(a,i,s){return(i=t(i))in a?Object.defineProperty(a,i,{value:s,enumerable:!0,configurable:!0,writable:!0}):a[i]=s,a}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports})(Og)),Og.exports}var fx;function XL(){return fx||(fx=1,(function(e){var t=KL();function r(i,s){var c=Object.keys(i);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(i);s&&(d=d.filter(function(m){return Object.getOwnPropertyDescriptor(i,m).enumerable})),c.push.apply(c,d)}return c}function a(i){for(var s=1;s(t,r)=>e.call(t,r))(Object.prototype),gc=(e,t)=>{let r=e;const a=[];for(;r!=null&&r!==Object.prototype;){if(a.indexOf(r)!==-1)return!1;if(a.push(r),If(r,t))return!0;r=Tl(r)}return!1},oH=(e,t)=>e!=null&&gc(e,t)?e[t]:void 0,Nh=(e=>t=>{const r=aH.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),_a=e=>(e=e.toLowerCase(),t=>Nh(t)===e),Ed=e=>t=>typeof t===e,{isArray:yi}=Array,_l=Ed("undefined");function Fl(e){return e!==null&&!_l(e)&&e.constructor!==null&&!_l(e.constructor)&&Br(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const h$=_a("ArrayBuffer");function iH(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&h$(e.buffer),t}const lH=Ed("string"),Br=Ed("function"),b$=Ed("number"),Vl=e=>e!==null&&typeof e=="object",sH=e=>e===!0||e===!1,mf=e=>{if(!Vl(e))return!1;const t=Tl(e);return(t===null||t===Object.prototype||Tl(t)===null)&&!gc(e,p$)&&!gc(e,Tc)},cH=e=>{if(!Vl(e)||Fl(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},uH=_a("Date"),fH=_a("File"),dH=e=>!!(e&&typeof e.uri<"u"),mH=e=>e&&typeof e.getParts<"u",vH=_a("Blob"),gH=_a("FileList"),pH=e=>Vl(e)&&Br(e.pipe);function hH(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const yx=hH(),Sx=typeof yx.FormData<"u"?yx.FormData:void 0,bH=e=>{if(!e)return!1;if(Sx&&e instanceof Sx)return!0;const t=Tl(e);if(!t||t===Object.prototype||!Br(e.append))return!1;const r=Nh(e);return r==="formdata"||r==="object"&&Br(e.toString)&&e.toString()==="[object FormData]"},yH=_a("URLSearchParams"),[SH,CH,xH,EH]=["ReadableStream","Request","Response","Headers"].map(_a),wH=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function _c(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let a,i;if(typeof e!="object"&&(e=[e]),yi(e))for(a=0,i=e.length;a0;)if(i=r[a],t===i.toLowerCase())return i;return null}const fi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,S$=e=>!_l(e)&&e!==fi;function Bp(...e){const{caseless:t,skipUndefined:r}=S$(this)&&this||{},a={},i=(s,c)=>{if(c==="__proto__"||c==="constructor"||c==="prototype")return;const d=t&&typeof c=="string"&&y$(a,c)||c,m=If(a,d)?a[d]:void 0;mf(m)&&mf(s)?a[d]=Bp(m,s):mf(s)?a[d]=Bp({},s):yi(s)?a[d]=s.slice():(!r||!_l(s))&&(a[d]=s)};for(let s=0,c=e.length;s(_c(t,(i,s)=>{r&&Br(i)?Object.defineProperty(e,s,{__proto__:null,value:g$(i,r),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,s,{__proto__:null,value:i,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:a}),e),$H=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),RH=(e,t,r,a)=>{e.prototype=Object.create(t.prototype,a),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),r&&Object.assign(e.prototype,r)},TH=(e,t,r,a)=>{let i,s,c;const d={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),s=i.length;s-- >0;)c=i[s],(!a||a(c,e,t))&&!d[c]&&(t[c]=e[c],d[c]=!0);e=r!==!1&&Tl(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},_H=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;const a=e.indexOf(t,r);return a!==-1&&a===r},MH=e=>{if(!e)return null;if(yi(e))return e;let t=e.length;if(!b$(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},NH=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Tl(Uint8Array)),AH=(e,t)=>{const a=(e&&e[Tc]).call(e);let i;for(;(i=a.next())&&!i.done;){const s=i.value;t.call(e,s[0],s[1])}},zH=(e,t)=>{let r;const a=[];for(;(r=e.exec(t))!==null;)a.push(r);return a},jH=_a("HTMLFormElement"),DH=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,a,i){return a.toUpperCase()+i}),{propertyIsEnumerable:IH}=Object.prototype,PH=_a("RegExp"),C$=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),a={};_c(r,(i,s)=>{let c;(c=t(i,s,e))!==!1&&(a[s]=c||i)}),Object.defineProperties(e,a)},BH=e=>{C$(e,(t,r)=>{if(Br(e)&&["arguments","caller","callee"].includes(r))return!1;const a=e[r];if(Br(a)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},LH=(e,t)=>{const r={},a=i=>{i.forEach(s=>{r[s]=!0})};return yi(e)?a(e):a(String(e).split(t)),r},HH=()=>{},FH=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function VH(e){return!!(e&&Br(e.append)&&e[p$]==="FormData"&&e[Tc])}const UH=e=>{const t=new WeakSet,r=a=>{if(Vl(a)){if(t.has(a))return;if(Fl(a))return a;if(!("toJSON"in a)){t.add(a);const i=yi(a)?[]:{};return _c(a,(s,c)=>{const d=r(s);!_l(d)&&(i[c]=d)}),t.delete(a),i}}return a};return r(e)},qH=_a("AsyncFunction"),GH=e=>e&&(Vl(e)||Br(e))&&Br(e.then)&&Br(e.catch),x$=((e,t)=>e?setImmediate:t?((r,a)=>(fi.addEventListener("message",({source:i,data:s})=>{i===fi&&s===r&&a.length&&a.shift()()},!1),i=>{a.push(i),fi.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",Br(fi.postMessage)),WH=typeof queueMicrotask<"u"?queueMicrotask.bind(fi):typeof process<"u"&&process.nextTick||x$,E$=e=>e!=null&&Br(e[Tc]),KH=e=>e!=null&&gc(e,Tc)&&E$(e),re={isArray:yi,isArrayBuffer:h$,isBuffer:Fl,isFormData:bH,isArrayBufferView:iH,isString:lH,isNumber:b$,isBoolean:sH,isObject:Vl,isPlainObject:mf,isEmptyObject:cH,isReadableStream:SH,isRequest:CH,isResponse:xH,isHeaders:EH,isUndefined:_l,isDate:uH,isFile:fH,isReactNativeBlob:dH,isReactNative:mH,isBlob:vH,isRegExp:PH,isFunction:Br,isStream:pH,isURLSearchParams:yH,isTypedArray:NH,isFileList:gH,forEach:_c,merge:Bp,extend:OH,trim:wH,stripBOM:$H,inherits:RH,toFlatObject:TH,kindOf:Nh,kindOfTest:_a,endsWith:_H,toArray:MH,forEachEntry:AH,matchAll:zH,isHTMLForm:jH,hasOwnProperty:If,hasOwnProp:If,hasOwnInPrototypeChain:gc,getSafeProp:oH,reduceDescriptors:C$,freezeMethods:BH,toObjectSet:LH,toCamelCase:DH,noop:HH,toFiniteNumber:FH,findKey:y$,global:fi,isContextDefined:S$,isSpecCompliantForm:VH,toJSONObject:UH,isAsyncFn:qH,isThenable:GH,setImmediate:x$,asap:WH,isIterable:E$,isSafeIterable:KH},XH=re.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),YH=e=>{const t={};let r,a,i;return e&&e.split(` +`).forEach(function(c){i=c.indexOf(":"),r=c.substring(0,i).trim().toLowerCase(),a=c.substring(i+1).trim(),!(!r||t[r]&&XH[r])&&(r==="set-cookie"?t[r]?t[r].push(a):t[r]=[a]:t[r]=t[r]?t[r]+", "+a:a)}),t};function QH(e){let t=0,r=e.length;for(;tt;){const a=e.charCodeAt(r-1);if(a!==9&&a!==32)break;r-=1}return t===0&&r===e.length?e:e.slice(t,r)}const ZH=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),JH=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function Ah(e,t){return re.isArray(e)?e.map(r=>Ah(r,t)):QH(String(e).replace(t,""))}const kH=e=>Ah(e,ZH),e7=e=>Ah(e,JH);function w$(e){const t=Object.create(null);return re.forEach(e.toJSON(),(r,a)=>{t[a]=e7(r)}),t}const Cx=Symbol("internals");function Gs(e){return e&&String(e).trim().toLowerCase()}function vf(e){return e===!1||e==null?e:re.isArray(e)?e.map(vf):kH(String(e))}function t7(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let a;for(;a=r.exec(e);)t[a[1]]=a[2];return t}const n7=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Mg(e,t,r,a,i){if(re.isFunction(a))return a.call(this,t,r);if(i&&(t=r),!!re.isString(t)){if(re.isString(a))return t.indexOf(a)!==-1;if(re.isRegExp(a))return a.test(t)}}function r7(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,a)=>r.toUpperCase()+a)}function a7(e,t){const r=re.toCamelCase(" "+t);["get","set","has"].forEach(a=>{Object.defineProperty(e,a+r,{__proto__:null,value:function(i,s,c){return this[a].call(this,t,i,s,c)},configurable:!0})})}let Er=class{constructor(t){t&&this.set(t)}set(t,r,a){const i=this;function s(d,m,v){const p=Gs(m);if(!p)return;const h=re.findKey(i,p);(!h||i[h]===void 0||v===!0||v===void 0&&i[h]!==!1)&&(i[h||m]=vf(d))}const c=(d,m)=>re.forEach(d,(v,p)=>s(v,p,m));if(re.isPlainObject(t)||t instanceof this.constructor)c(t,r);else if(re.isString(t)&&(t=t.trim())&&!n7(t))c(YH(t),r);else if(re.isObject(t)&&re.isSafeIterable(t)){let d=Object.create(null),m,v;for(const p of t){if(!re.isArray(p))throw new TypeError("Object iterator must return a key-value pair");v=p[0],re.hasOwnProp(d,v)?(m=d[v],d[v]=re.isArray(m)?[...m,p[1]]:[m,p[1]]):d[v]=p[1]}c(d,r)}else t!=null&&s(r,t,a);return this}get(t,r){if(t=Gs(t),t){const a=re.findKey(this,t);if(a){const i=this[a];if(!r)return i;if(r===!0)return t7(i);if(re.isFunction(r))return r.call(this,i,a);if(re.isRegExp(r))return r.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,r){if(t=Gs(t),t){const a=re.findKey(this,t);return!!(a&&this[a]!==void 0&&(!r||Mg(this,this[a],a,r)))}return!1}delete(t,r){const a=this;let i=!1;function s(c){if(c=Gs(c),c){const d=re.findKey(a,c);d&&(!r||Mg(a,a[d],d,r))&&(delete a[d],i=!0)}}return re.isArray(t)?t.forEach(s):s(t),i}clear(t){const r=Object.keys(this);let a=r.length,i=!1;for(;a--;){const s=r[a];(!t||Mg(this,this[s],s,t,!0))&&(delete this[s],i=!0)}return i}normalize(t){const r=this,a={};return re.forEach(this,(i,s)=>{const c=re.findKey(a,s);if(c){r[c]=vf(i),delete r[s];return}const d=t?r7(s):String(s).trim();d!==s&&delete r[s],r[d]=vf(i),a[d]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const r=Object.create(null);return re.forEach(this,(a,i)=>{a!=null&&a!==!1&&(r[i]=t&&re.isArray(a)?a.join(", "):a)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,r])=>t+": "+r).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){const a=new this(t);return r.forEach(i=>a.set(i)),a}static accessor(t){const a=(this[Cx]=this[Cx]={accessors:{}}).accessors,i=this.prototype;function s(c){const d=Gs(c);a[d]||(a7(i,c),a[d]=!0)}return re.isArray(t)?t.forEach(s):s(t),this}};Er.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);re.reduceDescriptors(Er.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(a){this[r]=a}}});re.freezeMethods(Er);const o7="[REDACTED ****]";function i7(e){if(re.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(re.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function l7(e,t){const r=new Set(t.map(s=>String(s).toLowerCase())),a=[],i=s=>{if(s===null||typeof s!="object"||re.isBuffer(s))return s;if(a.indexOf(s)!==-1)return;s instanceof Er&&(s=s.toJSON()),a.push(s);let c;if(re.isArray(s))c=[],s.forEach((d,m)=>{const v=i(d);re.isUndefined(v)||(c[m]=v)});else{if(!re.isPlainObject(s)&&i7(s))return a.pop(),s;c=Object.create(null);for(const[d,m]of Object.entries(s)){const v=r.has(d.toLowerCase())?o7:i(m);re.isUndefined(v)||(c[d]=v)}}return a.pop(),c};return i(e)}let et=class O$ extends Error{static from(t,r,a,i,s,c){const d=new O$(t.message,r||t.code,a,i,s);return Object.defineProperty(d,"cause",{__proto__:null,value:t,writable:!0,enumerable:!1,configurable:!0}),d.name=t.name,t.status!=null&&d.status==null&&(d.status=t.status),c&&Object.assign(d,c),d}constructor(t,r,a,i,s){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,r&&(this.code=r),a&&(this.config=a),i&&(this.request=i),s&&(this.response=s,this.status=s.status)}toJSON(){const t=this.config,r=t&&re.hasOwnProp(t,"redact")?t.redact:void 0,a=re.isArray(r)&&r.length>0?l7(t,r):re.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:a,code:this.code,status:this.status}}};et.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";et.ERR_BAD_OPTION="ERR_BAD_OPTION";et.ECONNABORTED="ECONNABORTED";et.ETIMEDOUT="ETIMEDOUT";et.ECONNREFUSED="ECONNREFUSED";et.ERR_NETWORK="ERR_NETWORK";et.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";et.ERR_DEPRECATED="ERR_DEPRECATED";et.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";et.ERR_BAD_REQUEST="ERR_BAD_REQUEST";et.ERR_CANCELED="ERR_CANCELED";et.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";et.ERR_INVALID_URL="ERR_INVALID_URL";et.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const s7=null,$$=100;function Lp(e){return re.isPlainObject(e)||re.isArray(e)}function R$(e){return re.endsWith(e,"[]")?e.slice(0,-2):e}function Ng(e,t,r){return e?e.concat(t).map(function(i,s){return i=R$(i),!r&&s?"["+i+"]":i}).join(r?".":""):t}function c7(e){return re.isArray(e)&&!e.some(Lp)}const u7=re.toFlatObject(re,{},null,function(t){return/^is[A-Z]/.test(t)});function wd(e,t,r){if(!re.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,r=re.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(O,R){return!re.isUndefined(R[O])});const a=r.metaTokens,i=r.visitor||w,s=r.dots,c=r.indexes,d=r.Blob||typeof Blob<"u"&&Blob,m=r.maxDepth===void 0?$$:r.maxDepth,v=d&&re.isSpecCompliantForm(t),p=[];if(!re.isFunction(i))throw new TypeError("visitor must be a function");function h(E){if(E===null)return"";if(re.isDate(E))return E.toISOString();if(re.isBoolean(E))return E.toString();if(!v&&re.isBlob(E))throw new et("Blob is not supported. Use a Buffer instead.");if(re.isArrayBuffer(E)||re.isTypedArray(E)){if(v&&typeof d=="function")return new d([E]);if(typeof Buffer<"u")return Buffer.from(E);throw new et("Blob is not supported. Use a Buffer instead.",et.ERR_NOT_SUPPORT)}return E}function y(E){if(E>m)throw new et("Object is too deeply nested ("+E+" levels). Max depth: "+m,et.ERR_FORM_DATA_DEPTH_EXCEEDED)}function C(E,O){if(m===1/0)return JSON.stringify(E);const R=[];return JSON.stringify(E,function(T,M){if(!re.isObject(M))return M;for(;R.length&&R[R.length-1]!==this;)R.pop();return R.push(M),y(O+R.length-1),M})}function w(E,O,R){let _=E;if(re.isReactNative(t)&&re.isReactNativeBlob(E))return t.append(Ng(R,O,s),h(E)),!1;if(E&&!R&&typeof E=="object"){if(re.endsWith(O,"{}"))O=a?O:O.slice(0,-2),E=C(E,1);else if(re.isArray(E)&&c7(E)||(re.isFileList(E)||re.endsWith(O,"[]"))&&(_=re.toArray(E)))return O=R$(O),_.forEach(function(M,N){!(re.isUndefined(M)||M===null)&&t.append(c===!0?Ng([O],N,s):c===null?O:O+"[]",h(M))}),!1}return Lp(E)?!0:(t.append(Ng(R,O,s),h(E)),!1)}const x=Object.assign(u7,{defaultVisitor:w,convertValue:h,isVisitable:Lp});function S(E,O,R=0){if(!re.isUndefined(E)){if(y(R),p.indexOf(E)!==-1)throw new Error("Circular reference detected in "+O.join("."));p.push(E),re.forEach(E,function(T,M){(!(re.isUndefined(T)||T===null)&&i.call(t,T,re.isString(M)?M.trim():M,O,x))===!0&&S(T,O?O.concat(M):[M],R+1)}),p.pop()}}if(!re.isObject(e))throw new TypeError("data must be an object");return S(e),t}function xx(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(a){return t[a]})}function zh(e,t){this._pairs=[],e&&wd(e,this,t)}const T$=zh.prototype;T$.append=function(t,r){this._pairs.push([t,r])};T$.toString=function(t){const r=t?a=>t.call(this,a,xx):xx;return this._pairs.map(function(i){return r(i[0])+"="+r(i[1])},"").join("&")};function f7(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function _$(e,t,r){if(!t)return e;e=e||"";const a=re.isFunction(r)?{serialize:r}:r,i=re.getSafeProp(a,"encode")||f7,s=re.getSafeProp(a,"serialize");let c;if(s?c=s(t,a):c=re.isURLSearchParams(t)?t.toString():new zh(t,a).toString(i),c){const d=e.indexOf("#");d!==-1&&(e=e.slice(0,d)),e+=(e.indexOf("?")===-1?"?":"&")+c}return e}class Ex{constructor(){this.handlers=[]}use(t,r,a){return this.handlers.push({fulfilled:t,rejected:r,synchronous:a?a.synchronous:!1,runWhen:a?a.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){re.forEach(this.handlers,function(a){a!==null&&t(a)})}}const jh={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1,validateStatusUndefinedResolves:!0},d7=typeof URLSearchParams<"u"?URLSearchParams:zh,m7=typeof FormData<"u"?FormData:null,v7=typeof Blob<"u"?Blob:null,g7={isBrowser:!0,classes:{URLSearchParams:d7,FormData:m7,Blob:v7},protocols:["http","https","file","blob","url","data"]},Dh=typeof window<"u"&&typeof document<"u",Hp=typeof navigator=="object"&&navigator||void 0,p7=Dh&&(!Hp||["ReactNative","NativeScript","NS"].indexOf(Hp.product)<0),h7=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",b7=Dh&&window.location.href||"http://localhost",y7=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Dh,hasStandardBrowserEnv:p7,hasStandardBrowserWebWorkerEnv:h7,navigator:Hp,origin:b7},Symbol.toStringTag,{value:"Module"})),hr={...y7,...g7};function S7(e,t){return wd(e,new hr.classes.URLSearchParams,{visitor:function(r,a,i,s){return hr.isNode&&re.isBuffer(r)?(this.append(a,r.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)},...t})}const wx=$$;function M$(e){if(e>wx)throw new et("FormData field is too deeply nested ("+e+" levels). Max depth: "+wx,et.ERR_FORM_DATA_DEPTH_EXCEEDED)}function C7(e){const t=[],r=/\w+|\[(\w*)]/g;let a;for(;(a=r.exec(e))!==null;)M$(t.length),t.push(a[0]==="[]"?"":a[1]||a[0]);return t}function x7(e){const t={},r=Object.keys(e);let a;const i=r.length;let s;for(a=0;a=r.length;return c=!c&&re.isArray(i)?i.length:c,m?(re.hasOwnProp(i,c)?i[c]=re.isArray(i[c])?i[c].concat(a):[i[c],a]:i[c]=a,!d):((!re.hasOwnProp(i,c)||!re.isObject(i[c]))&&(i[c]=[]),t(r,a,i[c],s)&&re.isArray(i[c])&&(i[c]=x7(i[c])),!d)}if(re.isFormData(e)&&re.isFunction(e.entries)){const r={};return re.forEachEntry(e,(a,i)=>{t(C7(a),i,r,0)}),r}return null}const dl=(e,t)=>e!=null&&re.hasOwnProp(e,t)?e[t]:void 0;function E7(e,t,r){if(re.isString(e))try{return(t||JSON.parse)(e),re.trim(e)}catch(a){if(a.name!=="SyntaxError")throw a}return(r||JSON.stringify)(e)}const Mc={transitional:jh,adapter:["xhr","http","fetch"],transformRequest:[function(t,r){const a=r.getContentType()||"",i=a.indexOf("application/json")>-1,s=re.isObject(t);if(s&&re.isHTMLForm(t)&&(t=new FormData(t)),re.isFormData(t))return i?JSON.stringify(N$(t)):t;if(re.isArrayBuffer(t)||re.isBuffer(t)||re.isStream(t)||re.isFile(t)||re.isBlob(t)||re.isReadableStream(t))return t;if(re.isArrayBufferView(t))return t.buffer;if(re.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let d;if(s){const m=dl(this,"formSerializer");if(a.indexOf("application/x-www-form-urlencoded")>-1)return S7(t,m).toString();if((d=re.isFileList(t))||a.indexOf("multipart/form-data")>-1){const v=dl(this,"env"),p=v&&v.FormData;return wd(d?{"files[]":t}:t,p&&new p,m)}}return s||i?(r.setContentType("application/json",!1),E7(t)):t}],transformResponse:[function(t){const r=dl(this,"transitional")||Mc.transitional,a=r&&r.forcedJSONParsing,i=dl(this,"responseType"),s=i==="json";if(re.isResponse(t)||re.isReadableStream(t))return t;if(t&&re.isString(t)&&(a&&!i||s)){const d=!(r&&r.silentJSONParsing)&&s;try{return JSON.parse(t,dl(this,"parseReviver"))}catch(m){if(d)throw m.name==="SyntaxError"?et.from(m,et.ERR_BAD_RESPONSE,this,null,dl(this,"response")):m}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:hr.classes.FormData,Blob:hr.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};re.forEach(["delete","get","head","post","put","patch","query"],e=>{Mc.headers[e]={}});function Ag(e,t){const r=this||Mc,a=t||r,i=Er.from(a.headers);let s=a.data;return re.forEach(e,function(d){s=d.call(r,s,i.normalize(),t?t.status:void 0)}),i.normalize(),s}function A$(e){return!!(e&&e.__CANCEL__)}let Nc=class extends et{constructor(t,r,a){super(t??"canceled",et.ERR_CANCELED,r,a),this.name="CanceledError",this.__CANCEL__=!0}};function z$(e,t,r){const a=r.config.validateStatus;!r.status||!a||a(r.status)?e(r):t(new et("Request failed with status code "+r.status,r.status>=400&&r.status<500?et.ERR_BAD_REQUEST:et.ERR_BAD_RESPONSE,r.config,r.request,r))}function w7(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}function O7(e,t){e=e||10;const r=new Array(e),a=new Array(e);let i=0,s=0,c;return t=t!==void 0?t:1e3,function(m){const v=Date.now(),p=a[s];c||(c=v),r[i]=m,a[i]=v;let h=s,y=0;for(;h!==i;)y+=r[h++],h=h%e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),v-c{r=p,i=null,s&&(clearTimeout(s),s=null),e(...v)};return[(...v)=>{const p=Date.now(),h=p-r;h>=a?c(v,p):(i=v,s||(s=setTimeout(()=>{s=null,c(i)},a-h)))},()=>i&&c(i)]}const Pf=(e,t,r=3)=>{let a=0;const i=O7(50,250);return $7(s=>{if(!s||typeof s.loaded!="number")return;const c=s.loaded,d=s.lengthComputable?s.total:void 0,m=d!=null?Math.min(c,d):c,v=Math.max(0,m-a),p=i(v);a=Math.max(a,m);const h={loaded:m,total:d,progress:d?m/d:void 0,bytes:v,rate:p||void 0,estimated:p&&d?(d-m)/p:void 0,event:s,lengthComputable:d!=null,[t?"download":"upload"]:!0};e(h)},r)},Ox=(e,t)=>{const r=e!=null;return[a=>t[0]({lengthComputable:r,total:e,loaded:a}),t[1]]},$x=e=>(...t)=>re.asap(()=>e(...t)),R7=hr.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,hr.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(hr.origin),hr.navigator&&/(msie|trident)/i.test(hr.navigator.userAgent)):()=>!0,T7=hr.hasStandardBrowserEnv?{write(e,t,r,a,i,s,c){if(typeof document>"u")return;const d=[`${e}=${encodeURIComponent(t)}`];re.isNumber(r)&&d.push(`expires=${new Date(r).toUTCString()}`),re.isString(a)&&d.push(`path=${a}`),re.isString(i)&&d.push(`domain=${i}`),s===!0&&d.push("secure"),re.isString(c)&&d.push(`SameSite=${c}`),document.cookie=d.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.split(";");for(let r=0;re instanceof Er?{...e}:e;function Si(e,t){e=e||{},t=t||{};const r=Object.create(null);Object.defineProperty(r,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function a(p,h,y,C){return re.isPlainObject(p)&&re.isPlainObject(h)?re.merge.call({caseless:C},p,h):re.isPlainObject(h)?re.merge({},h):re.isArray(h)?h.slice():h}function i(p,h,y,C){if(re.isUndefined(h)){if(!re.isUndefined(p))return a(void 0,p,y,C)}else return a(p,h,y,C)}function s(p,h){if(!re.isUndefined(h))return a(void 0,h)}function c(p,h){if(re.isUndefined(h)){if(!re.isUndefined(p))return a(void 0,p)}else return a(void 0,h)}function d(p){const h=re.hasOwnProp(t,"transitional")?t.transitional:void 0;if(!re.isUndefined(h))if(re.isPlainObject(h)){if(re.hasOwnProp(h,p))return h[p]}else return;const y=re.hasOwnProp(e,"transitional")?e.transitional:void 0;if(re.isPlainObject(y)&&re.hasOwnProp(y,p))return y[p]}function m(p,h,y){if(re.hasOwnProp(t,y))return a(p,h);if(re.hasOwnProp(e,y))return a(void 0,p)}const v={url:s,method:s,data:s,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,withXSRFToken:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,beforeRedirect:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,allowedSocketPaths:c,responseEncoding:c,validateStatus:m,headers:(p,h,y)=>i(Tx(p),Tx(h),y,!0)};return re.forEach(Object.keys({...e,...t}),function(h){if(h==="__proto__"||h==="constructor"||h==="prototype")return;const y=re.hasOwnProp(v,h)?v[h]:i,C=re.hasOwnProp(e,h)?e[h]:void 0,w=re.hasOwnProp(t,h)?t[h]:void 0,x=y(C,w,h);re.isUndefined(x)&&y!==m||(r[h]=x)}),re.hasOwnProp(t,"validateStatus")&&re.isUndefined(t.validateStatus)&&d("validateStatusUndefinedResolves")===!1&&(re.hasOwnProp(e,"validateStatus")?r.validateStatus=a(void 0,e.validateStatus):delete r.validateStatus),r}const D7=["content-type","content-length"];function I7(e,t,r){if(r!=="content-only"){e.set(t);return}Object.entries(t||{}).forEach(([a,i])=>{D7.includes(a.toLowerCase())&&e.set(a,i)})}const P7=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,r)=>String.fromCharCode(parseInt(r,16)));function D$(e){const t=Si({},e),r=y=>re.hasOwnProp(t,y)?t[y]:void 0,a=r("data");let i=r("withXSRFToken");const s=r("xsrfHeaderName"),c=r("xsrfCookieName");let d=r("headers");const m=r("auth"),v=r("baseURL"),p=r("allowAbsoluteUrls"),h=r("url");if(t.headers=d=Er.from(d),t.url=_$(j$(v,h,p,t),r("params"),r("paramsSerializer")),m){const y=re.getSafeProp(m,"username")||"",C=re.getSafeProp(m,"password")||"";try{d.set("Authorization","Basic "+btoa(y+":"+(C?P7(C):"")))}catch(w){throw et.from(w,et.ERR_BAD_OPTION_VALUE,e)}}if(re.isFormData(a)&&(hr.hasStandardBrowserEnv||hr.hasStandardBrowserWebWorkerEnv||re.isReactNative(a)?d.setContentType(void 0):re.isFunction(a.getHeaders)&&I7(d,a.getHeaders(),r("formDataHeaderPolicy"))),hr.hasStandardBrowserEnv&&(re.isFunction(i)&&(i=i(t)),i===!0||i==null&&R7(t.url))){const C=s&&c&&T7.read(c);C&&d.set(s,C)}return t}const B7=typeof XMLHttpRequest<"u",L7=B7&&function(e){return new Promise(function(r,a){const i=D$(e);let s=i.data;const c=Er.from(i.headers).normalize();let{responseType:d,onUploadProgress:m,onDownloadProgress:v}=i,p,h,y,C,w;function x(){C&&C(),w&&w(),i.cancelToken&&i.cancelToken.unsubscribe(p),i.signal&&i.signal.removeEventListener("abort",p)}let S=new XMLHttpRequest;S.open(i.method.toUpperCase(),i.url,!0),S.timeout=i.timeout;function E(){if(!S)return;const R=Er.from("getAllResponseHeaders"in S&&S.getAllResponseHeaders()),T={data:!d||d==="text"||d==="json"?S.responseText:S.response,status:S.status,statusText:S.statusText,headers:R,config:e,request:S};z$(function(N){r(N),x()},function(N){a(N),x()},T),S=null}"onloadend"in S?S.onloadend=E:S.onreadystatechange=function(){!S||S.readyState!==4||S.status===0&&!(S.responseURL&&S.responseURL.startsWith("file:"))||setTimeout(E)},S.onabort=function(){S&&(a(new et("Request aborted",et.ECONNABORTED,e,S)),x(),S=null)},S.onerror=function(_){const T=_&&_.message?_.message:"Network Error",M=new et(T,et.ERR_NETWORK,e,S);M.event=_||null,a(M),x(),S=null},S.ontimeout=function(){let _=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const T=i.transitional||jh;i.timeoutErrorMessage&&(_=i.timeoutErrorMessage),a(new et(_,T.clarifyTimeoutError?et.ETIMEDOUT:et.ECONNABORTED,e,S)),x(),S=null},s===void 0&&c.setContentType(null),"setRequestHeader"in S&&re.forEach(w$(c),function(_,T){S.setRequestHeader(T,_)}),re.isUndefined(i.withCredentials)||(S.withCredentials=!!i.withCredentials),d&&d!=="json"&&(S.responseType=i.responseType),v&&([y,w]=Pf(v,!0),S.addEventListener("progress",y)),m&&S.upload&&([h,C]=Pf(m),S.upload.addEventListener("progress",h),S.upload.addEventListener("loadend",C)),(i.cancelToken||i.signal)&&(p=R=>{S&&(a(!R||R.type?new Nc(null,e,S):R),S.abort(),x(),S=null)},i.cancelToken&&i.cancelToken.subscribe(p),i.signal&&(i.signal.aborted?p():i.signal.addEventListener("abort",p)));const O=w7(i.url);if(O&&!hr.protocols.includes(O)){a(new et("Unsupported protocol "+O+":",et.ERR_BAD_REQUEST,e)),x();return}S.send(s||null)})},H7=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const r=new AbortController;let a=!1;const i=function(m){if(!a){a=!0,c();const v=m instanceof Error?m:this.reason;r.abort(v instanceof et?v:new Nc(v instanceof Error?v.message:v))}};let s=t&&setTimeout(()=>{s=null,i(new et(`timeout of ${t}ms exceeded`,et.ETIMEDOUT))},t);const c=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach(m=>{m.unsubscribe?m.unsubscribe(i):m.removeEventListener("abort",i)}),e=null)};e.forEach(m=>m.addEventListener("abort",i,{once:!0}));const{signal:d}=r;return d.unsubscribe=()=>re.asap(c),d},F7=function*(e,t){let r=e.byteLength;if(r{const i=V7(e,t);let s=0,c,d=m=>{c||(c=!0,a&&a(m))};return new ReadableStream({async pull(m){try{const{done:v,value:p}=await i.next();if(v){d(),m.close();return}let h=p.byteLength;if(r){let y=s+=h;r(y)}m.enqueue(new Uint8Array(p))}catch(v){throw d(v),v}},cancel(m){return d(m),i.return()}},{highWaterMark:2})},Bf=e=>e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102,q7=(e,t,r)=>t+2C>=2&&a.charCodeAt(C-2)===37&&a.charCodeAt(C-1)===51&&(a.charCodeAt(C)===68||a.charCodeAt(C)===100);v>=0&&(a.charCodeAt(v)===61?(m++,v--):p(v)&&(m++,v-=3)),m===1&&v>=0&&(a.charCodeAt(v)===61||p(v))&&m++;const y=Math.floor(c/4)*3-(m||0);return y>0?y:0}let s=0;for(let c=0,d=a.length;c=55296&&m<=56319&&c+1=56320&&v<=57343?(s+=4,c++):s+=3}else s+=3}return s}const Ih="1.18.1",Mx=64*1024,{isFunction:ef}=re,W7=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,r)=>String.fromCharCode(parseInt(r,16))),Nx=e=>{if(!re.isString(e))return e;try{return decodeURIComponent(e)}catch{return e}},Ax=(e,...t)=>{try{return!!e(...t)}catch{return!1}},K7=e=>{const t=e.indexOf("://");let r=e;return t!==-1&&(r=r.slice(t+3)),r.includes("@")||r.includes(":")},X7=e=>{const t=re.global!==void 0&&re.global!==null?re.global:globalThis,{ReadableStream:r,TextEncoder:a}=t;e=re.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:i,Request:s,Response:c}=e,d=i?ef(i):typeof fetch=="function",m=ef(s),v=ef(c);if(!d)return!1;const p=d&&ef(r),h=d&&(typeof a=="function"?(E=>O=>E.encode(O))(new a):async E=>new Uint8Array(await new s(E).arrayBuffer())),y=m&&p&&Ax(()=>{let E=!1;const O=new s(hr.origin,{body:new r,method:"POST",get duplex(){return E=!0,"half"}}),R=O.headers.has("Content-Type");return O.body!=null&&O.body.cancel(),E&&!R}),C=v&&p&&Ax(()=>re.isReadableStream(new c("").body)),w={stream:C&&(E=>E.body)};d&&["text","arrayBuffer","blob","formData","stream"].forEach(E=>{!w[E]&&(w[E]=(O,R)=>{let _=O&&O[E];if(_)return _.call(O);throw new et(`Response type '${E}' is not supported`,et.ERR_NOT_SUPPORT,R)})});const x=async E=>{if(E==null)return 0;if(re.isBlob(E))return E.size;if(re.isSpecCompliantForm(E))return(await new s(hr.origin,{method:"POST",body:E}).arrayBuffer()).byteLength;if(re.isArrayBufferView(E)||re.isArrayBuffer(E))return E.byteLength;if(re.isURLSearchParams(E)&&(E=E+""),re.isString(E))return(await h(E)).byteLength},S=async(E,O)=>{const R=re.toFiniteNumber(E.getContentLength());return R??x(O)};return async E=>{let{url:O,method:R,data:_,signal:T,cancelToken:M,timeout:N,onDownloadProgress:A,onUploadProgress:j,responseType:I,headers:L,withCredentials:B="same-origin",fetchOptions:V,maxContentLength:H,maxBodyLength:Q}=D$(E);const z=re.isNumber(H)&&H>-1,F=re.isNumber(Q)&&Q>-1,q=Y=>re.hasOwnProp(E,Y)?E[Y]:void 0;let ee=i||fetch;I=I?(I+"").toLowerCase():"text";let Z=H7([T,M&&M.toAbortSignal()],N),D=null;const U=Z&&Z.unsubscribe&&(()=>{Z.unsubscribe()});let G,W=null;const X=()=>new et("Request body larger than maxBodyLength limit",et.ERR_BAD_REQUEST,E,D);try{let Y;const ie=q("auth");if(ie){const te=re.getSafeProp(ie,"username")||"",xe=re.getSafeProp(ie,"password")||"";Y={username:te,password:xe}}if(K7(O)){const te=new URL(O,hr.origin);if(!Y&&(te.username||te.password)){const xe=Nx(te.username),Ee=Nx(te.password);Y={username:xe,password:Ee}}(te.username||te.password)&&(te.username="",te.password="",O=te.href)}if(Y&&(L.delete("authorization"),L.set("Authorization","Basic "+btoa(W7((Y.username||"")+":"+(Y.password||""))))),z&&typeof O=="string"&&O.startsWith("data:")&&G7(O)>H)throw new et("maxContentLength size of "+H+" exceeded",et.ERR_BAD_RESPONSE,E,D);if(F&&R!=="get"&&R!=="head"){const te=await x(_);if(typeof te=="number"&&isFinite(te)&&(G=te,te>Q))throw X()}const ce=F&&(re.isReadableStream(_)||re.isStream(_)),fe=(te,xe,Ee)=>_x(te,Mx,_e=>{if(F&&_e>Q)throw W=X();xe&&xe(_e)},Ee);if(y&&R!=="get"&&R!=="head"&&(j||ce)){if(G=G??await S(L,_),G!==0||ce){let te=new s(O,{method:"POST",body:_,duplex:"half"}),xe;if(re.isFormData(_)&&(xe=te.headers.get("content-type"))&&L.setContentType(xe),te.body){const[Ee,_e]=j&&Ox(G,Pf($x(j)))||[];_=fe(te.body,Ee,_e)}}}else if(ce&&!m&&p&&R!=="get"&&R!=="head")_=fe(_);else if(ce&&m&&!y&&R!=="get"&&R!=="head")throw new et("Stream request bodies are not supported by the current fetch implementation",et.ERR_NOT_SUPPORT,E,D);re.isString(B)||(B=B?"include":"omit");const Te=m&&"credentials"in s.prototype;if(re.isFormData(_)){const te=L.getContentType();te&&/^multipart\/form-data/i.test(te)&&!/boundary=/i.test(te)&&L.delete("content-type")}L.set("User-Agent","axios/"+Ih,!1);const he={...V,signal:Z,method:R.toUpperCase(),headers:w$(L.normalize()),body:_,duplex:"half",credentials:Te?B:void 0};D=m&&new s(O,he);let se=await(m?ee(D,V):ee(O,he));const ye=Er.from(se.headers);if(z){const te=re.toFiniteNumber(ye.getContentLength());if(te!=null&&te>H)throw new et("maxContentLength size of "+H+" exceeded",et.ERR_BAD_RESPONSE,E,D)}const be=C&&(I==="stream"||I==="response");if(C&&se.body&&(A||z||be&&U)){const te={};["status","statusText","headers"].forEach(He=>{te[He]=se[He]});const xe=re.toFiniteNumber(ye.getContentLength()),[Ee,_e]=A&&Ox(xe,Pf($x(A),!0))||[];let je=0;const Ae=He=>{if(z&&(je=He,je>H))throw new et("maxContentLength size of "+H+" exceeded",et.ERR_BAD_RESPONSE,E,D);Ee&&Ee(He)};se=new c(_x(se.body,Mx,Ae,()=>{_e&&_e(),U&&U()}),te)}I=I||"text";let ge=await w[re.findKey(w,I)||"text"](se,E);if(z&&!C&&!be){let te;if(ge!=null&&(typeof ge.byteLength=="number"?te=ge.byteLength:typeof ge.size=="number"?te=ge.size:typeof ge=="string"&&(te=typeof a=="function"?new a().encode(ge).byteLength:ge.length)),typeof te=="number"&&te>H)throw new et("maxContentLength size of "+H+" exceeded",et.ERR_BAD_RESPONSE,E,D)}return!be&&U&&U(),await new Promise((te,xe)=>{z$(te,xe,{data:ge,headers:Er.from(se.headers),status:se.status,statusText:se.statusText,config:E,request:D})})}catch(Y){if(U&&U(),Z&&Z.aborted&&Z.reason instanceof et){const ie=Z.reason;throw ie.config=E,D&&(ie.request=D),Y!==ie&&Object.defineProperty(ie,"cause",{__proto__:null,value:Y,writable:!0,enumerable:!1,configurable:!0}),ie}if(W)throw D&&!W.request&&(W.request=D),W;if(Y instanceof et)throw D&&!Y.request&&(Y.request=D),Y;if(Y&&Y.name==="TypeError"&&/Load failed|fetch/i.test(Y.message)){const ie=new et("Network Error",et.ERR_NETWORK,E,D,Y&&Y.response);throw Object.defineProperty(ie,"cause",{__proto__:null,value:Y.cause||Y,writable:!0,enumerable:!1,configurable:!0}),ie}throw et.from(Y,Y&&Y.code,E,D,Y&&Y.response)}}},Y7=new Map,I$=e=>{let t=e&&e.env||{};const{fetch:r,Request:a,Response:i}=t,s=[a,i,r];let c=s.length,d=c,m,v,p=Y7;for(;d--;)m=s[d],v=p.get(m),v===void 0&&p.set(m,v=d?new Map:X7(t)),p=v;return v};I$();const Ph={http:s7,xhr:L7,fetch:{get:I$}};re.forEach(Ph,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch{}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const zx=e=>`- ${e}`,Q7=e=>re.isFunction(e)||e===null||e===!1;function Z7(e,t){e=re.isArray(e)?e:[e];const{length:r}=e;let a,i;const s={};for(let c=0;c`adapter ${m} `+(v===!1?"is not supported by the environment":"is not available in the build"));let d=r?c.length>1?`since : +`+c.map(zx).join(` +`):" "+zx(c[0]):"as no adapter specified";throw new et("There is no suitable adapter to dispatch the request "+d,et.ERR_NOT_SUPPORT)}return i}const P$={getAdapter:Z7,adapters:Ph};function zg(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Nc(null,e)}function jx(e){return zg(e),e.headers=Er.from(e.headers),e.data=Ag.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),P$.getAdapter(e.adapter||Mc.adapter,e)(e).then(function(a){zg(e),e.response=a;try{a.data=Ag.call(e,e.transformResponse,a)}finally{delete e.response}return a.headers=Er.from(a.headers),a},function(a){if(!A$(a)&&(zg(e),a&&a.response)){e.response=a.response;try{a.response.data=Ag.call(e,e.transformResponse,a.response)}finally{delete e.response}a.response.headers=Er.from(a.response.headers)}return Promise.reject(a)})}const Od={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Od[e]=function(a){return typeof a===e||"a"+(t<1?"n ":" ")+e}});const Dx={};Od.transitional=function(t,r,a){function i(s,c){return"[Axios v"+Ih+"] Transitional option '"+s+"'"+c+(a?". "+a:"")}return(s,c,d)=>{if(t===!1)throw new et(i(c," has been removed"+(r?" in "+r:"")),et.ERR_DEPRECATED);return r&&!Dx[c]&&(Dx[c]=!0,console.warn(i(c," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(s,c,d):!0}};Od.spelling=function(t){return(r,a)=>(console.warn(`${a} is likely a misspelling of ${t}`),!0)};function J7(e,t,r){if(typeof e!="object"||e===null)throw new et("options must be an object",et.ERR_BAD_OPTION_VALUE);const a=Object.keys(e);let i=a.length;for(;i-- >0;){const s=a[i],c=Object.prototype.hasOwnProperty.call(t,s)?t[s]:void 0;if(c){const d=e[s],m=d===void 0||c(d,s,e);if(m!==!0)throw new et("option "+s+" must be "+m,et.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new et("Unknown option "+s,et.ERR_BAD_OPTION)}}const gf={assertOptions:J7,validators:Od},yr=gf.validators;let mi=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Ex,response:new Ex}}async request(t,r){try{return await this._request(t,r)}catch(a){if(a instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;const s=(()=>{if(!i.stack)return"";const c=i.stack.indexOf(` +`);return c===-1?"":i.stack.slice(c+1)})();try{if(!a.stack)a.stack=s;else if(s){const c=s.indexOf(` +`),d=c===-1?-1:s.indexOf(` +`,c+1),m=d===-1?"":s.slice(d+1);String(a.stack).endsWith(m)||(a.stack+=` +`+s)}}catch{}}throw a}}_request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=Si(this.defaults,r);const{transitional:a,paramsSerializer:i,headers:s}=r;a!==void 0&&gf.assertOptions(a,{silentJSONParsing:yr.transitional(yr.boolean),forcedJSONParsing:yr.transitional(yr.boolean),clarifyTimeoutError:yr.transitional(yr.boolean),legacyInterceptorReqResOrdering:yr.transitional(yr.boolean),advertiseZstdAcceptEncoding:yr.transitional(yr.boolean),validateStatusUndefinedResolves:yr.transitional(yr.boolean)},!1),i!=null&&(re.isFunction(i)?r.paramsSerializer={serialize:i}:gf.assertOptions(i,{encode:yr.function,serialize:yr.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),gf.assertOptions(r,{baseUrl:yr.spelling("baseURL"),withXsrfToken:yr.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let c=s&&re.merge(s.common,s[r.method]);s&&re.forEach(["delete","get","head","post","put","patch","query","common"],w=>{delete s[w]}),r.headers=Er.concat(c,s);const d=[];let m=!0;this.interceptors.request.forEach(function(x){if(typeof x.runWhen=="function"&&x.runWhen(r)===!1)return;m=m&&x.synchronous;const S=r.transitional||jh;S&&S.legacyInterceptorReqResOrdering?d.unshift(x.fulfilled,x.rejected):d.push(x.fulfilled,x.rejected)});const v=[];this.interceptors.response.forEach(function(x){v.push(x.fulfilled,x.rejected)});let p,h=0,y;if(!m){const w=[jx.bind(this),void 0];for(w.unshift(...d),w.push(...v),y=w.length,p=Promise.resolve(r);h{if(!a._listeners)return;let s=a._listeners.length;for(;s-- >0;)a._listeners[s](i);a._listeners=null}),this.promise.then=i=>{let s;const c=new Promise(d=>{a.subscribe(d),s=d}).then(i);return c.cancel=function(){a.unsubscribe(s)},c},t(function(s,c,d){a.reason||(a.reason=new Nc(s,c,d),r(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){const t=new AbortController,r=a=>{t.abort(a)};return this.subscribe(r),t.signal.unsubscribe=()=>this.unsubscribe(r),t.signal}static source(){let t;return{token:new B$(function(i){t=i}),cancel:t}}};function e9(e){return function(r){return e.apply(null,r)}}function t9(e){return re.isObject(e)&&e.isAxiosError===!0}const Fp={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Fp).forEach(([e,t])=>{Fp[t]=e});function L$(e){const t=new mi(e),r=g$(mi.prototype.request,t);return re.extend(r,mi.prototype,t,{allOwnKeys:!0}),re.extend(r,t,null,{allOwnKeys:!0}),r.create=function(i){return L$(Si(e,i))},r}const Wn=L$(Mc);Wn.Axios=mi;Wn.CanceledError=Nc;Wn.CancelToken=k7;Wn.isCancel=A$;Wn.VERSION=Ih;Wn.toFormData=wd;Wn.AxiosError=et;Wn.Cancel=Wn.CanceledError;Wn.all=function(t){return Promise.all(t)};Wn.spread=e9;Wn.isAxiosError=t9;Wn.mergeConfig=Si;Wn.AxiosHeaders=Er;Wn.formToJSON=e=>N$(re.isHTMLForm(e)?new FormData(e):e);Wn.getAdapter=P$.getAdapter;Wn.HttpStatusCode=Fp;Wn.default=Wn;const{Axios:O9,AxiosError:$9,CanceledError:R9,isCancel:T9,CancelToken:_9,VERSION:M9,all:N9,Cancel:A9,isAxiosError:z9,spread:j9,toFormData:D9,AxiosHeaders:I9,HttpStatusCode:P9,formToJSON:B9,getAdapter:L9,mergeConfig:H9,create:F9}=Wn,n9="shopops.auth.token",r9="shopops.auth.user";function V9(){try{const e=JSON.parse(localStorage.getItem(r9)||"null");return e?{tenantId:e.tenantId?String(e.tenantId):void 0,shopId:e.shopId?String(e.shopId):void 0,userId:e.userId?String(e.userId):void 0,roles:Array.isArray(e.roles)&&e.roles.length?e.roles.join(","):void 0}:{}}catch{return{}}}const H$=Wn.create({baseURL:"",timeout:1e4});async function U9(e,t){const r=await H$.get(e,{headers:F$(t)});return V$(r.data)}async function q9(e,t,r){const a=await H$.post(e,t,{headers:F$(r)});return V$(a.data)}function F$(e){const t={"X-Tenant-Id":e.tenantId||"1","X-Shop-Id":e.shopId||"1","X-User-Id":e.userId||"1","X-User-Roles":e.roles||"ADMIN,OPERATOR"},r=localStorage.getItem(n9);return r&&(t.Authorization=`Bearer ${r}`),t}function V$(e){if(e&&typeof e=="object"&&"code"in e){if(e.code&&e.code!==200)throw new Error(e.message||`API ${e.code}`);return e.data}return e}const{Sider:a9}=Hl,o9=[["/admin/workbench.html","Agent 工作台"],["/admin/dashboard.html","Dashboard"],["/admin/tasks.html","任务"],["/admin/reports.html","报告"],["/admin/audit.html","审计"],["/admin/tools.html","工具"],["/admin/approvals.html","审批"],["/admin/connectors.html","Connector"],["/admin/prompts.html","Prompt"],["/admin/users.html","组织"],["/admin/auth.html","认证"]];function G9({active:e}){return No.jsxs(a9,{width:232,className:"sidebar",children:[No.jsxs("div",{className:"brand",children:[No.jsx(rH,{}),No.jsxs("div",{children:[No.jsx("strong",{children:"ShopOps"}),No.jsx("span",{children:"Agent 运营平台"})]})]}),No.jsx("nav",{className:"nav","aria-label":"后台导航",children:o9.map(([t,r])=>No.jsx("a",{className:t.includes(e)?"active":"",href:t,children:r},t))})]})}function W9(e){const t=String(e||"").toUpperCase();return t==="SUCCESS"||t==="FAILED"||t==="DEGRADED"}function K9(e){if(!e)return{};if(typeof e=="string")try{return JSON.parse(e)}catch{return{}}return e}function X9(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(String(e))}catch{return{}}}function i9(e){if(e==null||e==="")return"-";const t=Number(e);return Number.isFinite(t)?t.toLocaleString("zh-CN",{maximumFractionDigits:2}):String(e)}function Y9(e){const t=i9(e);return t==="-"?t:`¥${t}`}function Q9(e){if(e==null||e==="")return"-";const t=Number(e);return Number.isFinite(t)?`${(t*100).toFixed(2)}%`:String(e)}export{y9 as $,G9 as A,sh as B,xi as C,qP as D,_n as E,b9 as F,un as G,Tr as H,Mn as I,de as J,It as K,Hl as L,ae as M,Ue as N,Qf as O,kr as P,Dl as Q,l9 as R,JO as S,Cd as T,W9 as U,X9 as V,bi as W,Lr as X,Ta as Y,hC as Z,Le as _,ue as a,ea as a$,gh as a0,Rl as a1,Q6 as a2,_B as a3,oe as a4,Rr as a5,pt as a6,J as a7,zt as a8,Pv as a9,Kf as aA,Wf as aB,Ec as aC,lw as aD,Ch as aE,wc as aF,eI as aG,u9 as aH,$O as aI,xw as aJ,Sw as aK,Cw as aL,yw as aM,L5 as aN,Ol as aO,_C as aP,uO as aQ,P5 as aR,Jp as aS,ta as aT,ur as aU,U5 as aV,lD as aW,ow as aX,Nf as aY,Of as aZ,dj as a_,dd as aa,rn as ab,On as ac,or as ad,Yf as ae,bc as af,JE as ag,nO as ah,K as ai,rt as aj,hi as ak,cc as al,ro as am,Bl as an,Gn as ao,bn as ap,EA as aq,OO as ar,NO as as,vd as at,s9 as au,Ci as av,Nl as aw,Tf as ax,$f as ay,e3 as az,V9 as b,ao as b0,Lo as b1,gw as b2,vw as b3,Dw as b4,dT as b5,_w as b6,xr as b7,Il as b8,Uz as b9,M4 as bA,Dg as bB,rc as bC,Bo as bD,pc as bE,pa as bF,Up as bG,f9 as bH,A3 as bI,WC as bJ,Yw as bK,C5 as bL,Ba as bM,oo as bN,Kn as bO,Ut as bP,Xn as bQ,hd as bR,si as bS,zE as bT,g9 as ba,Fo as bb,bN as bc,k_ as bd,z4 as be,wM as bf,wl as bg,v9 as bh,d9 as bi,A4 as bj,Cc as bk,Xf as bl,Da as bm,Ea as bn,nn as bo,zl as bp,gi as bq,kE as br,oh as bs,m9 as bt,$l as bu,Rf as bv,sc as bw,zw as bx,Ho as by,w4 as bz,U9 as c,Rc as d,cA as e,h9 as f,p9 as g,qO as h,Ll as i,No as j,rO as k,S9 as l,rH as m,OL as n,i9 as o,q9 as p,ZB as q,f as r,LB as s,F$ as t,R8 as u,Q9 as v,K9 as w,VO as x,Y9 as y,C9 as z}; diff --git a/shopops-admin/src/main/resources/static/admin/assets/tasks-DmoexCVG.js b/shopops-admin/src/main/resources/static/admin/assets/tasks-DmoexCVG.js new file mode 100644 index 0000000..cd5f24e --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/tasks-DmoexCVG.js @@ -0,0 +1 @@ +import{r as i,I as ge,_ as ye,j as e,L as K,T as Se,R as ve,a as we,C as Ce,z as Ne,b as be,c as z,A as Te,S as w,d as j,f as F,g as o,e as ke,h as T,B as h,l as Re,i as O,F as V,k as De,D as R,n as Ee,p as H,s as M,q as Ae,v as $e,o as ze}from"./styles-CdbHnvft.js";import{i as Fe}from"./index-ClPwX7rX.js";import{F as c,a as ne}from"./Table-sHSMbx0B.js";import{S as L}from"./index-emnzbHoJ.js";import{R as Le}from"./PlayCircleOutlined-g8qloYTv.js";import{S as Me}from"./index-D7Zu6-V4.js";import{R as Ue}from"./FileTextOutlined-DR_VCDvU.js";import{R as Pe}from"./ApiOutlined-CqRwPpT6.js";import{R as Ge}from"./ToolOutlined-MDl_KHZ_.js";var qe={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M136 552h63.6c4.4 0 8-3.6 8-8V288.7h528.6v72.6c0 1.9.6 3.7 1.8 5.2a8.3 8.3 0 0011.7 1.4L893 255.4c4.3-5 3.6-10.3 0-13.2L749.7 129.8a8.22 8.22 0 00-5.2-1.8c-4.6 0-8.4 3.8-8.4 8.4V209H199.7c-39.5 0-71.7 32.2-71.7 71.8V544c0 4.4 3.6 8 8 8zm752-80h-63.6c-4.4 0-8 3.6-8 8v255.3H287.8v-72.6c0-1.9-.6-3.7-1.8-5.2a8.3 8.3 0 00-11.7-1.4L131 768.6c-4.3 5-3.6 10.3 0 13.2l143.3 112.4c1.5 1.2 3.3 1.8 5.2 1.8 4.6 0 8.4-3.8 8.4-8.4V815h536.6c39.5 0 71.7-32.2 71.7-71.8V480c-.2-4.4-3.8-8-8.2-8z"}}]},name:"retweet",theme:"outlined"},Be=function(a,r){return i.createElement(ge,ye({},a,{ref:r,icon:qe}))},ie=i.forwardRef(Be);function _e({metrics:t}){const a=i.useRef(null);return i.useEffect(()=>{if(!a.current)return;const r=Fe(a.current),l=(t==null?void 0:t.statusBreakdown)||{};r.setOption({tooltip:{trigger:"axis"},grid:{left:34,right:14,top:24,bottom:28},xAxis:{type:"category",data:["待执行","运行中","成功","失败"],axisTick:{show:!1}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#edf1f7"}}},series:[{type:"bar",data:[l.PENDING||0,l.RUNNING||0,(t==null?void 0:t.success)||0,(t==null?void 0:t.failed)||0],itemStyle:{color:y=>["#faad14","#1677ff","#52c41a","#ff4d4f"][y.dataIndex]},barMaxWidth:34}]});const g=()=>r.resize();return window.addEventListener("resize",g),()=>{window.removeEventListener("resize",g),r.dispose()}},[t]),e.jsx("div",{className:"task-metrics-chart",ref:a})}const{Header:Oe,Content:Ve}=K,{Paragraph:xt,Text:He,Title:Ke}=Se;function We(){var ae,re;const t=be(),[a]=c.useForm(),[r]=c.useForm(),[l,g]=i.useState({tenantId:t.tenantId||"1",shopId:t.shopId||"1",userId:t.userId||"1",roles:t.roles||"ADMIN,OPERATOR"}),[y,U]=i.useState(1),[I,J]=i.useState(20),[de,Q]=i.useState(0),[ce,Y]=i.useState([]),[u,ue]=i.useState(null),[xe,pe]=i.useState([]),[f,D]=i.useState(""),[m,X]=i.useState(null),[P,Z]=i.useState(!1),[he,ee]=i.useState(!1),[G,C]=i.useState(!1),[me,x]=i.useState("任务队列已就绪。"),te=m==null?void 0:m.task,q=i.useMemo(()=>(m==null?void 0:m.steps)||[],[m]),se=i.useCallback((s=y,n=I)=>{const d=a.getFieldsValue(),p=new URLSearchParams;return p.set("pageNum",String(s)),p.set("pageSize",String(n)),v(p,"status",d.status),v(p,"taskType",d.taskType),v(p,"taskNo",d.taskNo),v(p,"userId",d.userId),v(p,"traceId",d.traceId),v(p,"reportId",d.reportId),v(p,"taskId",f),p},[a,y,I,f]),E=i.useCallback(async()=>{const s=await z("/api/admin/agent/tasks/metrics",l);ue(s)},[l]),A=i.useCallback(async()=>{const s=await z("/api/admin/agent/tasks/events?pageNum=1&pageSize=8",l);pe(s.list||[])},[l]),N=i.useCallback(async s=>{var n;ee(!0),D(String(s));try{const d=await z(`/api/admin/agent/tasks/${encodeURIComponent(s)}/detail`,l);X(d),x(`已加载任务 ${((n=d.task)==null?void 0:n.taskNo)||s}`)}catch(d){x(`任务详情加载失败:${k(d)}`)}finally{ee(!1)}},[l]),S=i.useCallback(async(s=y,n=I)=>{var p;Z(!0);const d=se(s,n);window.history.replaceState(null,"",`${window.location.pathname}?${d.toString()}`);try{const b=await z(`/api/admin/agent/tasks?${d.toString()}`,l),_=b.list||[];Y(_),Q(Number(b.total||0)),U(Number(b.pageNum||s)),J(Number(b.pageSize||n)),x("任务列表已刷新。"),f?N(f):(p=_[0])!=null&&p.taskId&&N(_[0].taskId)}catch(b){Y([]),Q(0),x(`任务加载失败:${k(b)}`)}finally{Z(!1)}},[se,l,N,y,I,f]),B=i.useCallback(async()=>{x("正在加载任务。"),await Promise.all([E(),A(),S()]),x("任务已刷新。")},[A,E,S]);i.useEffect(()=>{const s=new URLSearchParams(window.location.search);a.setFieldsValue({status:s.get("status")||void 0,taskType:s.get("taskType")||void 0,taskNo:s.get("taskNo")||void 0,userId:s.get("userId")||void 0,traceId:s.get("traceId")||void 0,reportId:s.get("reportId")||void 0}),r.setFieldsValue({taskType:"daily_review",userInput:"根据所选日期范围生成每日运营复盘。",startDate:oe(),endDate:oe()}),D(s.get("taskId")||""),U(le(s.get("pageNum"),1)),J(le(s.get("pageSize"),20)),B()},[]);async function je(s){C(!0),x("正在创建任务。");try{const n=await H("/api/agent/tasks",{taskType:s.taskType,userInput:s.userInput,dateRange:{start:s.startDate,end:s.endDate}},l);D(String(n.taskId)),await Promise.all([E(),A(),S(1,I)]),await N(n.taskId),x(`已创建 ${n.taskNo||n.taskId}`)}catch(n){x(`创建失败:${k(n)}`),M.error(k(n))}finally{C(!1)}}async function Ie(){if(!f){M.warning("请先选择任务");return}C(!0);try{const s=await H(`/api/agent/tasks/${encodeURIComponent(f)}/retry`,null,l);D(String(s.taskId)),await Promise.all([E(),A(),S(1,I)]),await N(s.taskId),x(`重试任务已创建 ${s.taskNo||s.taskId}`)}catch(s){x(`重试失败:${k(s)}`)}finally{C(!1)}}async function fe(){C(!0);try{const s=await H("/api/agent/tasks/stale/requeue?queuedTimeoutMinutes=10&runningTimeoutMinutes=30&limit=20",null,l);await B(),X({task:void 0,steps:[],events:[],recoveryResult:s}),x(`已重排 ${s.requeuedCount||0} 个超时任务。`)}catch(s){x(`重排失败:${k(s)}`)}finally{C(!1)}}function $(s){s==="clear"?a.resetFields():a.setFieldsValue({status:s.toUpperCase()}),U(1),S(1,I)}return e.jsxs(K,{className:"app-shell",children:[e.jsx(Te,{active:"tasks"}),e.jsxs(K,{children:[e.jsxs(Oe,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Ke,{level:3,children:"任务队列"}),e.jsx(He,{type:"secondary",children:"追踪 Agent 异步任务、执行步骤、失败重试、超时重排和配置快照。"})]}),e.jsxs(w,{wrap:!0,children:[e.jsx(j,{addonBefore:"租户",value:l.tenantId,onChange:s=>g({...l,tenantId:s.target.value})}),e.jsx(j,{addonBefore:"店铺",value:l.shopId,onChange:s=>g({...l,shopId:s.target.value})}),e.jsx(j,{addonBefore:"用户",value:l.userId,onChange:s=>g({...l,userId:s.target.value})}),e.jsx(j,{addonBefore:"角色",value:l.roles,onChange:s=>g({...l,roles:s.target.value})})]})]}),e.jsx(Ve,{className:"content",children:e.jsxs(F,{gutter:[16,16],children:[e.jsx(o,{xs:24,xl:15,children:e.jsxs(w,{direction:"vertical",className:"full",size:16,children:[e.jsx(ke,{type:"info",showIcon:!0,message:me}),e.jsxs(T,{title:"任务指标",extra:e.jsx(h,{icon:e.jsx(Re,{}),onClick:B,loading:P,children:"刷新"}),children:[e.jsxs(F,{gutter:[12,12],children:[e.jsx(o,{xs:12,md:6,children:e.jsx(L,{title:"总数",value:(u==null?void 0:u.total)||0})}),e.jsx(o,{xs:12,md:6,children:e.jsx(L,{title:"待执行",value:((ae=u==null?void 0:u.statusBreakdown)==null?void 0:ae.PENDING)||0})}),e.jsx(o,{xs:12,md:6,children:e.jsx(L,{title:"运行中",value:((re=u==null?void 0:u.statusBreakdown)==null?void 0:re.RUNNING)||0})}),e.jsx(o,{xs:12,md:6,children:e.jsx(L,{title:"失败",value:(u==null?void 0:u.failed)||0})})]}),e.jsx(_e,{metrics:u})]}),e.jsx(T,{title:"创建任务",children:e.jsxs(c,{form:r,layout:"vertical",onFinish:je,children:[e.jsxs(F,{gutter:10,children:[e.jsx(o,{xs:24,md:8,children:e.jsx(c.Item,{name:"taskType",label:"任务类型",rules:[{required:!0}],children:e.jsx(O,{options:[{value:"daily_review"},{value:"comment_risk"},{value:"product_optimization"},{value:"ad_anomaly"}]})})}),e.jsx(o,{xs:12,md:8,children:e.jsx(c.Item,{name:"startDate",label:"开始日期",rules:[{required:!0}],children:e.jsx(j,{type:"date"})})}),e.jsx(o,{xs:12,md:8,children:e.jsx(c.Item,{name:"endDate",label:"结束日期",rules:[{required:!0}],children:e.jsx(j,{type:"date"})})})]}),e.jsx(c.Item,{name:"userInput",label:"任务说明",rules:[{required:!0}],children:e.jsx(j.TextArea,{rows:3})}),e.jsx(V,{justify:"end",children:e.jsx(h,{id:"createTaskSubmit",type:"primary",htmlType:"submit",icon:e.jsx(Le,{}),loading:G,children:"创建任务"})})]})}),e.jsx(T,{title:"任务筛选",children:e.jsxs(c,{form:a,layout:"vertical",onFinish:()=>S(1,I),children:[e.jsxs(F,{gutter:10,children:[e.jsx(o,{xs:24,md:8,children:e.jsx(c.Item,{name:"status",label:"状态",children:e.jsx(O,{allowClear:!0,options:[{value:"PENDING"},{value:"RUNNING"},{value:"SUCCESS"},{value:"FAILED"},{value:"DEGRADED"}]})})}),e.jsx(o,{xs:24,md:8,children:e.jsx(c.Item,{name:"taskType",label:"类型",children:e.jsx(O,{allowClear:!0,options:[{value:"daily_review"},{value:"comment_risk"},{value:"product_optimization"},{value:"ad_anomaly"}]})})}),e.jsx(o,{xs:24,md:8,children:e.jsx(c.Item,{name:"taskNo",label:"任务编号",children:e.jsx(j,{})})}),e.jsx(o,{xs:24,md:8,children:e.jsx(c.Item,{name:"userId",label:"用户",children:e.jsx(j,{})})}),e.jsx(o,{xs:24,md:8,children:e.jsx(c.Item,{name:"traceId",label:"Trace",children:e.jsx(j,{})})}),e.jsx(o,{xs:24,md:8,children:e.jsx(c.Item,{name:"reportId",label:"报告",children:e.jsx(j,{})})})]}),e.jsxs(V,{justify:"space-between",gap:8,wrap:"wrap",children:[e.jsxs(w,{wrap:!0,children:[e.jsx(h,{onClick:()=>$("running"),children:"运行中"}),e.jsx(h,{"data-quick-filter":"failed",onClick:()=>$("failed"),children:"失败"}),e.jsx(h,{onClick:()=>$("success"),children:"成功"}),e.jsx(h,{onClick:()=>$("clear"),children:"清空"})]}),e.jsxs(w,{children:[e.jsx(h,{icon:e.jsx(ie,{}),onClick:fe,loading:G,children:"重排超时"}),e.jsx(h,{id:"taskFilterSubmit",type:"primary",htmlType:"submit",icon:e.jsx(De,{}),loading:P,children:"查询"})]})]})]})}),e.jsx(T,{title:"任务列表",children:e.jsx(ne,{rowKey:s=>String(s.taskId),loading:P,dataSource:ce,pagination:{current:y,pageSize:I,total:de,showSizeChanger:!0,onChange:(s,n)=>S(s,n)},onRow:s=>({onClick:()=>s.taskId&&N(s.taskId)}),rowClassName:s=>String(s.taskId)===String(f)?"selected-row":"clickable",columns:[{title:"任务编号",dataIndex:"taskNo",render:(s,n)=>s||n.taskId},{title:"类型",dataIndex:"taskType",width:150},{title:"状态",dataIndex:"status",width:110,render:s=>e.jsx(W,{status:s})},{title:"用户",dataIndex:"userId",width:90},{title:"报告",dataIndex:"reportId",width:90},{title:"Trace",dataIndex:"traceId",ellipsis:!0},{title:"创建时间",dataIndex:"createdAt",width:180},{title:"摘要",dataIndex:"resultSummary",ellipsis:!0,render:(s,n)=>s||n.errorMessage||n.userInput}]})})]})}),e.jsx(o,{xs:24,xl:9,children:e.jsxs(w,{direction:"vertical",className:"full",size:16,children:[e.jsx(T,{title:"任务详情",loading:he,extra:e.jsx(Je,{task:te,selectedTaskId:f}),children:m?e.jsxs(w,{direction:"vertical",className:"full",size:14,children:[e.jsx(R,{size:"small",column:1,bordered:!0,items:Ye(te)}),e.jsx(Qe,{snapshot:m.shopConfigSnapshot}),e.jsx(Me,{direction:"vertical",size:"small",current:Xe(q),items:(q.length?q:et()).map(s=>({title:s.stepName||"等待执行",description:s.toolCode||"Agent 创建任务后会展示工具调用过程",status:Ze(s.status)}))}),e.jsxs(V,{gap:8,wrap:"wrap",children:[e.jsx(h,{id:"retryTask",icon:e.jsx(ie,{}),onClick:Ie,loading:G,children:"重试"}),e.jsx(h,{id:"copyDetail",icon:e.jsx(Ee,{}),onClick:()=>st(JSON.stringify(m,null,2)),children:"复制详情"})]}),e.jsx("pre",{className:"json-box",children:JSON.stringify(m,null,2)})]}):e.jsxs("div",{className:"empty-state",children:[e.jsx("strong",{children:"暂无任务详情"}),e.jsx("span",{children:"选择左侧任务,或创建一个新的 Agent 任务。"})]})}),e.jsx(T,{title:"最近事件",children:e.jsx(ne,{size:"small",pagination:!1,rowKey:(s,n)=>String(s.eventId||`${s.taskId}-${n}`),dataSource:xe,columns:[{title:"时间",dataIndex:"createdAt",width:170},{title:"事件",dataIndex:"eventType"},{title:"状态",dataIndex:"toStatus",render:(s,n)=>e.jsx(W,{status:s||n.eventStatus})}]})})]})})]})})]})]})}function Je({task:t,selectedTaskId:a}){const r=(t==null?void 0:t.taskId)||a;return e.jsxs(w,{children:[e.jsx(h,{id:"openReport",href:t!=null&&t.reportId?`/admin/reports.html?reportId=${t.reportId}`:"/admin/reports.html",icon:e.jsx(Ue,{}),children:"报告"}),e.jsx(h,{id:"openAudit",href:r?`/admin/audit.html?source=TASK&taskId=${r}`:"/admin/audit.html",icon:e.jsx(Pe,{}),children:"审计"}),e.jsx(h,{id:"openToolLogs",href:r?`/admin/tools.html?taskId=${r}`:"/admin/tools.html",icon:e.jsx(Ge,{}),children:"工具"})]})}function Qe({snapshot:t}){return t?e.jsxs(R,{title:"店铺配置快照",size:"small",column:1,bordered:!0,children:[e.jsx(R.Item,{label:"退款率预警阈值",children:$e(t.refundRateWarnThreshold)}),e.jsx(R.Item,{label:"差评预警阈值",children:ze(t.negativeCommentWarnThreshold)}),e.jsx(R.Item,{label:"高风险工具审批",children:tt(t.agentToolApprovalEnabled)}),e.jsx(R.Item,{label:"模型策略",children:String(t.agentModelPolicy||"-")})]}):null}function Ye(t){return[{key:"task",label:"任务",children:(t==null?void 0:t.taskNo)||(t==null?void 0:t.taskId)||"-"},{key:"status",label:"状态",children:e.jsx(W,{status:t==null?void 0:t.status})},{key:"type",label:"类型",children:(t==null?void 0:t.taskType)||"-"},{key:"report",label:"报告",children:(t==null?void 0:t.reportId)||"-"},{key:"trace",label:"Trace",children:(t==null?void 0:t.traceId)||"-"},{key:"summary",label:"摘要",children:(t==null?void 0:t.resultSummary)||(t==null?void 0:t.errorMessage)||(t==null?void 0:t.userInput)||"-"}]}function W({status:t}){const a=String(t||"-").toUpperCase(),r=a==="SUCCESS"?"success":a==="FAILED"||a==="DEGRADED"?"error":a==="-"?"default":"processing";return e.jsx(Ae,{color:r,children:a})}function Xe(t){const a=t.findIndex(r=>!["SUCCESS","FAILED","DEGRADED"].includes(String(r.status||"").toUpperCase()));return a>=0?a:Math.max(t.length-1,0)}function Ze(t){const a=String(t||"").toUpperCase();return a==="SUCCESS"?"finish":a==="FAILED"||a==="DEGRADED"?"error":a==="RUNNING"?"process":"wait"}function et(){return[{stepName:"任务排队",toolCode:"task.queue"},{stepName:"工具编排执行",toolCode:"mcp.tool.invoke"},{stepName:"报告生成",toolCode:"report.generate"}]}function tt(t){return t===!0||t==="true"?"需要审批":t===!1||t==="false"?"配置关闭":"-"}function v(t,a,r){r!=null&&String(r).trim()!==""&&t.set(a,String(r).trim())}function le(t,a){const r=Number(t);return Number.isInteger(r)&&r>0?r:a}function oe(){return new Date(Date.now()-1440*60*1e3).toISOString().slice(0,10)}async function st(t){try{await navigator.clipboard.writeText(t),M.success("已复制")}catch{M.error("复制失败")}}function k(t){return t instanceof Error?t.message:String(t)}ve.createRoot(document.getElementById("root")).render(e.jsx(we.StrictMode,{children:e.jsx(Ce,{locale:Ne,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx(We,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/tools-DiETzEt1.js b/shopops-admin/src/main/resources/static/admin/assets/tools-DiETzEt1.js new file mode 100644 index 0000000..c20ad07 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/tools-DiETzEt1.js @@ -0,0 +1 @@ +import{r,j as e,L as J,T as ge,R as Ce,a as be,C as Se,z as ye,b as ve,c as U,s as C,p as we,A as ke,S as w,B as x,l as Ne,e as Re,f as F,g as I,h as k,q as D,D as c,i as le,d as b,n as M,F as Le,k as Ee,o as Ae}from"./styles-CdbHnvft.js";import{i as Te}from"./index-ClPwX7rX.js";import{F as p,a as oe}from"./Table-sHSMbx0B.js";import{R as re}from"./AuditOutlined-D7IGVWIo.js";import{R as Fe}from"./PlayCircleOutlined-g8qloYTv.js";import{R as Oe}from"./ApiOutlined-CqRwPpT6.js";import{R as De}from"./FileTextOutlined-DR_VCDvU.js";import{S as Pe}from"./index-emnzbHoJ.js";const $e={SUCCESS:"#31795a",FAILED:"#d14343",APPROVAL_REQUIRED:"#8f55d6",RUNNING:"#2f6fbb"};function Ue({logs:s}){const a=r.useRef(null);return r.useEffect(()=>{if(!a.current)return;const l=Te(a.current),h=s.reduce((f,g)=>{const E=g.status||"UNKNOWN";return f[E]=(f[E]||0)+1,f},{}),L=Object.entries(h).map(([f,g])=>({name:f,value:g,itemStyle:{color:$e[f]||"#637083"}}));l.setOption({tooltip:{trigger:"item"},legend:{bottom:0,left:"center"},series:[{name:"调用状态",type:"pie",radius:["42%","68%"],center:["50%","44%"],label:{formatter:"{b}: {c}"},data:L.length?L:[{name:"暂无日志",value:1,itemStyle:{color:"#d9dee8"}}]}]});const S=()=>l.resize();return window.addEventListener("resize",S),()=>{window.removeEventListener("resize",S),l.dispose()}},[s]),e.jsx("div",{className:"tool-status-chart",ref:a})}const{Header:Me,Content:ze}=J,{Paragraph:st,Text:ce,Title:Ve}=ge,Be=["SUCCESS","FAILED","APPROVAL_REQUIRED","RUNNING"];function Je(){const s=ve(),[a]=p.useForm(),[l]=p.useForm(),[h,L]=r.useState({tenantId:s.tenantId||"1",shopId:s.shopId||"1",userId:s.userId||"1",roles:s.roles||"ADMIN,OPERATOR"}),[S,f]=r.useState([]),[g,E]=r.useState([]),[Q,ue]=r.useState(0),[N,_]=r.useState(1),[u,q]=r.useState(20),[y,P]=r.useState(""),[m,G]=r.useState(null),[i,H]=r.useState(null),[v,me]=r.useState(null),[xe,K]=r.useState(!1),[he,W]=r.useState(!1),[pe,X]=r.useState(!1),[je,Y]=r.useState(!1),[Ie,A]=r.useState("工具日志中心已就绪。"),Z=r.useMemo(()=>_e(g,S),[g,S]),ee=r.useCallback((t=N,o=u)=>{const d=a.getFieldsValue(),n=new URLSearchParams;return n.set("pageNum",String(t)),n.set("pageSize",String(o)),O(n,"logId",d.logId),O(n,"taskId",d.taskId),O(n,"status",d.status),O(n,"toolCode",d.toolCode||y),n},[a,N,u,y]),te=r.useCallback(t=>{window.history.replaceState(null,"",`${window.location.pathname}?${t.toString()}`)},[]),T=r.useCallback(async t=>{if(!t){G(null);return}W(!0);try{const o=await U(`/api/tools/${encodeURIComponent(t)}`,h);G(o),P(t),l.setFieldsValue({toolCode:t}),a.setFieldsValue({toolCode:t}),A(`已选中工具 ${t}。`)}catch(o){C.error(R(o))}finally{W(!1)}},[h,a,l]),$=r.useCallback(async()=>{var t;K(!0);try{const o=await U("/api/tools",h);f(o||[]);const d=y||((t=o==null?void 0:o[0])==null?void 0:t.toolCode)||"";d&&T(d)}catch(o){C.error(R(o))}finally{K(!1)}},[h,T,y]),j=r.useCallback(async(t=N,o=u)=>{X(!0);const d=ee(t,o);te(d);try{const n=await U(`/api/tools/call-logs?${d.toString()}`,h),ae=n.list||[];E(ae),ue(Number(n.total||0)),_(Number(n.pageNum||t)),q(Number(n.pageSize||o)),H(ae[0]||null),A("工具调用日志已刷新。")}catch(n){C.error(R(n)),A(`工具调用日志加载失败:${R(n)}`)}finally{X(!1)}},[ee,h,N,u,te]),fe=r.useCallback(async()=>{const t=l.getFieldsValue(),o=t.toolCode||y;if(!o){C.warning("请选择工具");return}let d;try{d=t.payload?JSON.parse(t.payload):{}}catch{C.error("Payload 必须是合法 JSON");return}t.approvalId&&(d.approvalId=Number(t.approvalId)),Y(!0);try{const n=await we(`/api/tools/${encodeURIComponent(o)}/invoke`,d,h);me(n),A(`工具 ${o} 调用完成:${n.status||"-"}`),await j(1,u)}catch(n){C.error(R(n))}finally{Y(!1)}},[h,l,j,u,y]),se=r.useCallback(t=>{a.setFieldsValue({status:t==="failed"?"FAILED":"APPROVAL_REQUIRED"}),j(1,u)},[a,j,u]);return r.useEffect(()=>{const t=new URLSearchParams(window.location.search),o={};["logId","taskId","status","toolCode"].forEach(d=>{const n=t.get(d);n&&(o[d]=n)}),a.setFieldsValue(o),o.toolCode&&(P(o.toolCode),l.setFieldsValue({toolCode:o.toolCode})),_(de(t.get("pageNum"),1)),q(de(t.get("pageSize"),20))},[a,l]),r.useEffect(()=>{$(),j(N,u)},[$]),e.jsxs(J,{className:"app-shell",children:[e.jsx(ke,{active:"tools"}),e.jsxs(J,{children:[e.jsxs(Me,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Ve,{level:3,children:"MCP 工具调用日志"}),e.jsx(ce,{type:"secondary",children:"统一展示工具注册、手动调用、审批拦截、失败原因和审计链路"})]}),e.jsxs(w,{children:[e.jsx(x,{icon:e.jsx(Ne,{}),onClick:()=>{$(),j(1,u)},children:"刷新"}),e.jsx(x,{href:i!=null&&i.taskId?`/admin/audit.html?source=TOOL&toolCode=${i.toolCode}`:"/admin/audit.html",icon:e.jsx(re,{}),children:"审计"})]})]}),e.jsxs(ze,{className:"content",children:[e.jsx(Re,{className:"status-alert",message:Ie,type:"info",showIcon:!0}),e.jsxs(F,{gutter:[16,16],children:[e.jsx(z,{title:"注册工具",value:Z.toolTotal}),e.jsx(z,{title:"日志总数",value:Q}),e.jsx(z,{title:"失败/审批",value:Z.failedOrApproval})]}),e.jsxs(F,{gutter:[16,16],children:[e.jsx(I,{xs:24,xl:14,children:e.jsx(k,{title:"工具注册表",className:"section-card",loading:xe,children:e.jsx(oe,{rowKey:t=>t.toolCode||"",dataSource:S,pagination:!1,onRow:t=>({onClick:()=>{T(t.toolCode||""),j(1,u)}}),rowClassName:t=>t.toolCode===y?"selected-row clickable":"clickable",columns:[{title:"工具编码",dataIndex:"toolCode",width:220},{title:"名称",dataIndex:"toolName"},{title:"分类",dataIndex:"category",width:120},{title:"风险",dataIndex:"riskLevel",width:100,render:ie},{title:"审批",dataIndex:"needApproval",width:90,render:t=>e.jsx(D,{color:t?"purple":"green",children:t?"需要":"无需"})},{title:"状态",dataIndex:"enabled",width:90,render:t=>e.jsx(D,{color:t?"green":"default",children:t?"启用":"停用"})}]})})}),e.jsx(I,{xs:24,xl:10,children:e.jsx(k,{title:"工具状态分布",className:"section-card",children:e.jsx(Ue,{logs:g})})})]}),e.jsxs(F,{gutter:[16,16],children:[e.jsx(I,{xs:24,xl:12,children:e.jsxs(k,{title:"手动调用",className:"section-card",loading:he,children:[e.jsxs(c,{size:"small",bordered:!0,column:1,id:"toolSummary",children:[e.jsx(c.Item,{label:"工具",children:(m==null?void 0:m.toolCode)||"-"}),e.jsx(c.Item,{label:"名称",children:(m==null?void 0:m.toolName)||"-"}),e.jsx(c.Item,{label:"权限",children:(m==null?void 0:m.permissionCode)||"-"}),e.jsx(c.Item,{label:"版本",children:(m==null?void 0:m.version)||"-"})]}),e.jsxs(p,{form:l,layout:"vertical",className:"form-stack",children:[e.jsx(p.Item,{label:"工具编码",name:"toolCode",children:e.jsx(le,{showSearch:!0,options:S.map(t=>({value:t.toolCode,label:t.toolCode})),onChange:t=>{T(t)}})}),e.jsx(p.Item,{label:"审批 ID",name:"approvalId",children:e.jsx(b,{allowClear:!0,placeholder:"需要人工审批后的高风险工具可填 approvalId"})}),e.jsx(p.Item,{label:"Payload JSON",name:"payload",initialValue:"{}",children:e.jsx(b.TextArea,{rows:8,spellCheck:!1})}),e.jsxs(w,{wrap:!0,children:[e.jsx(x,{id:"invokeSubmit",type:"primary",icon:e.jsx(Fe,{}),loading:je,onClick:fe,children:"调用工具"}),e.jsx(x,{id:"copyToolDetail",icon:e.jsx(M,{}),onClick:()=>B(m),children:"复制工具"})]})]})]})}),e.jsx(I,{xs:24,xl:12,children:e.jsx(k,{title:"调用结果",className:"section-card",extra:e.jsx(x,{id:"copyInvokeResult",icon:e.jsx(M,{}),onClick:()=>B(v),children:"复制"}),children:v?e.jsxs(w,{direction:"vertical",className:"full-width",children:[e.jsxs(c,{size:"small",bordered:!0,column:1,children:[e.jsx(c.Item,{label:"状态",children:ne(v.status)}),e.jsx(c.Item,{label:"Log ID",children:v.toolCallLogId||"-"}),e.jsx(c.Item,{label:"审批 ID",children:v.approvalId||"-"}),e.jsx(c.Item,{label:"错误",children:v.errorMessage||"-"})]}),e.jsx(V,{title:"结果数据",value:v.data})]}):e.jsx("div",{className:"empty-state",children:"暂无调用结果"})})})]}),e.jsxs(k,{title:"调用日志",className:"section-card",children:[e.jsxs(p,{form:a,layout:"vertical",onFinish:()=>j(1,u),children:[e.jsxs(F,{gutter:12,children:[e.jsx(I,{xs:24,md:6,children:e.jsx(p.Item,{label:"Log ID",name:"logId",children:e.jsx(b,{allowClear:!0})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(p.Item,{label:"任务 ID",name:"taskId",children:e.jsx(b,{allowClear:!0})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(p.Item,{label:"工具编码",name:"toolCode",children:e.jsx(b,{allowClear:!0})})}),e.jsx(I,{xs:24,md:6,children:e.jsx(p.Item,{label:"状态",name:"status",children:e.jsx(le,{allowClear:!0,options:Be.map(t=>({value:t,label:t}))})})})]}),e.jsxs(Le,{justify:"space-between",wrap:"wrap",gap:12,children:[e.jsxs(w,{children:[e.jsx(x,{id:"toolFilterSubmit",type:"primary",htmlType:"submit",icon:e.jsx(Ee,{}),children:"查询"}),e.jsx(x,{onClick:()=>{a.resetFields(),P(""),j(1,u)},children:"重置"}),e.jsx(x,{"data-quick-filter":"failed",onClick:()=>se("failed"),children:"失败日志"}),e.jsx(x,{"data-quick-filter":"approval",onClick:()=>se("approval"),children:"审批 required"})]}),e.jsx(Qe,{context:h,onChange:L})]})]}),e.jsx(oe,{className:"spaced-table",rowKey:t=>String(t.id),loading:pe,dataSource:g,pagination:{current:N,pageSize:u,total:Q,showSizeChanger:!0,onChange:(t,o)=>j(t,o)},onRow:t=>({onClick:()=>H(t)}),rowClassName:t=>t.id===(i==null?void 0:i.id)?"selected-row clickable":"clickable",columns:[{title:"Log ID",dataIndex:"id",width:90},{title:"时间",dataIndex:"createdAt",width:170,render:qe},{title:"工具",dataIndex:"toolCode",width:210},{title:"状态",dataIndex:"status",width:140,render:ne},{title:"风险",dataIndex:"riskLevel",width:100,render:ie},{title:"任务",dataIndex:"taskId",width:100},{title:"耗时",dataIndex:"latencyMs",width:90,render:t=>`${t||0} ms`},{title:"错误",dataIndex:"errorMessage",ellipsis:!0}]})]}),e.jsx(k,{title:"日志详情",className:"section-card",extra:e.jsx(x,{id:"copyLogPayload",icon:e.jsx(M,{}),onClick:()=>B(i),children:"复制"}),children:i?e.jsxs(w,{direction:"vertical",className:"full-width",children:[e.jsxs(c,{size:"small",bordered:!0,column:1,id:"logSummary",children:[e.jsx(c.Item,{label:"Log ID",children:i.id||"-"}),e.jsx(c.Item,{label:"Trace",children:i.traceId||"-"}),e.jsx(c.Item,{label:"Span",children:i.spanId||"-"}),e.jsx(c.Item,{label:"审批",children:i.approvalId||"-"}),e.jsxs(c.Item,{label:"错误",children:[i.errorCode||"-"," ",i.errorMessage||""]})]}),e.jsxs(w,{wrap:!0,children:[e.jsx(x,{id:"openTask",href:i.taskId?`/admin/tasks.html?taskId=${i.taskId}`:"/admin/tasks.html",icon:e.jsx(re,{}),children:"任务队列"}),e.jsx(x,{id:"openAudit",href:`/admin/audit.html?source=TOOL&toolCode=${i.toolCode||""}`,icon:e.jsx(Oe,{}),children:"审计中心"}),e.jsx(x,{id:"openReports",href:i.taskId?`/admin/reports.html?taskId=${i.taskId}`:"/admin/reports.html",icon:e.jsx(De,{}),children:"报告"})]}),e.jsx(V,{title:"Input",value:i.input}),e.jsx(V,{title:"Output",value:i.output})]}):e.jsx("div",{className:"empty-state",children:"暂无日志详情"})})]})]})]})}function z({title:s,value:a}){return e.jsx(I,{xs:24,md:8,children:e.jsx(k,{className:"metric-card",children:e.jsx(Pe,{title:s,value:Ae(a)})})})}function Qe({context:s,onChange:a}){return e.jsxs(w,{wrap:!0,children:[e.jsx(b,{addonBefore:"Tenant",value:s.tenantId,onChange:l=>a({...s,tenantId:l.target.value})}),e.jsx(b,{addonBefore:"Shop",value:s.shopId,onChange:l=>a({...s,shopId:l.target.value})}),e.jsx(b,{addonBefore:"User",value:s.userId,onChange:l=>a({...s,userId:l.target.value})})]})}function V({title:s,value:a}){return a?e.jsxs("div",{children:[e.jsx(ce,{strong:!0,children:s}),e.jsx("pre",{className:"json-block",children:JSON.stringify(a,null,2)})]}):null}function _e(s,a){return{toolTotal:a.length,failedOrApproval:s.filter(l=>l.status==="FAILED"||l.status==="APPROVAL_REQUIRED").length}}function ne(s){const a=s==="SUCCESS"?"green":s==="FAILED"?"red":s==="APPROVAL_REQUIRED"?"purple":"blue";return e.jsx(D,{color:a,children:s||"-"})}function ie(s){const a=s==="HIGH"?"red":s==="MEDIUM"?"orange":s==="LOW"?"green":"default";return e.jsx(D,{color:a,children:s||"-"})}function O(s,a,l){l&&l.trim()&&s.set(a,l.trim())}function de(s,a){const l=Number(s);return Number.isFinite(l)&&l>0?Math.floor(l):a}function qe(s){return s?String(s).replace("T"," ").slice(0,19):"-"}async function B(s){const a=JSON.stringify(s||{},null,2);try{await navigator.clipboard.writeText(a),C.success("已复制")}catch{Ge(a),C.success("已复制")}}function Ge(s){const a=document.createElement("textarea");a.dataset.copyMode="fallbackCopy",a.value=s,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a)}function R(s){return s instanceof Error?s.message:String(s)}Ce.createRoot(document.getElementById("root")).render(e.jsx(be.StrictMode,{children:e.jsx(Se,{locale:ye,children:e.jsx(Je,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/users-HBNypZOR.js b/shopops-admin/src/main/resources/static/admin/assets/users-HBNypZOR.js new file mode 100644 index 0000000..0136316 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/users-HBNypZOR.js @@ -0,0 +1 @@ +import{r as o,I as ae,_ as te,L as se,T as Re,R as Ne,j as e,a as ze,C as Ae,z as Fe,b as Oe,c as A,s as S,A as Ee,S as N,d,e as Ve,f as x,x as Me,g as t,h as g,B as v,l as Pe,i as h,o as H,F as _e,D as oe,q as K,p as R}from"./styles-CdbHnvft.js";import{F as a,a as B}from"./Table-sHSMbx0B.js";import{R as U}from"./SaveOutlined-DonLai3u.js";import{S as ke}from"./index-emnzbHoJ.js";var qe={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M882 272.1V144c0-17.7-14.3-32-32-32H174c-17.7 0-32 14.3-32 32v128.1c-16.7 1-30 14.9-30 31.9v131.7a177 177 0 0014.4 70.4c4.3 10.2 9.6 19.8 15.6 28.9v345c0 17.6 14.3 32 32 32h676c17.7 0 32-14.3 32-32V535a175 175 0 0015.6-28.9c9.5-22.3 14.4-46 14.4-70.4V304c0-17-13.3-30.9-30-31.9zM214 184h596v88H214v-88zm362 656.1H448V736h128v104.1zm234 0H640V704c0-17.7-14.3-32-32-32H416c-17.7 0-32 14.3-32 32v136.1H214V597.9c2.9 1.4 5.9 2.8 9 4 22.3 9.4 46 14.1 70.4 14.1s48-4.7 70.4-14.1c13.8-5.8 26.8-13.2 38.7-22.1.2-.1.4-.1.6 0a180.4 180.4 0 0038.7 22.1c22.3 9.4 46 14.1 70.4 14.1 24.4 0 48-4.7 70.4-14.1 13.8-5.8 26.8-13.2 38.7-22.1.2-.1.4-.1.6 0a180.4 180.4 0 0038.7 22.1c22.3 9.4 46 14.1 70.4 14.1 24.4 0 48-4.7 70.4-14.1 3-1.3 6-2.6 9-4v242.2zm30-404.4c0 59.8-49 108.3-109.3 108.3-40.8 0-76.4-22.1-95.2-54.9-2.9-5-8.1-8.1-13.9-8.1h-.6c-5.7 0-11 3.1-13.9 8.1A109.24 109.24 0 01512 544c-40.7 0-76.2-22-95-54.7-3-5.1-8.4-8.3-14.3-8.3s-11.4 3.2-14.3 8.3a109.63 109.63 0 01-95.1 54.7C233 544 184 495.5 184 435.7v-91.2c0-.3.2-.5.5-.5h655c.3 0 .5.2.5.5v91.2z"}}]},name:"shop",theme:"outlined"},$e=function(i,c){return o.createElement(ae,te({},i,{ref:c,icon:qe}))},Be=o.forwardRef($e),Ue={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M824.2 699.9a301.55 301.55 0 00-86.4-60.4C783.1 602.8 812 546.8 812 484c0-110.8-92.4-201.7-203.2-200-109.1 1.7-197 90.6-197 200 0 62.8 29 118.8 74.2 155.5a300.95 300.95 0 00-86.4 60.4C345 754.6 314 826.8 312 903.8a8 8 0 008 8.2h56c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5A226.62 226.62 0 01612 684c60.9 0 118.2 23.7 161.3 66.8C814.5 792 838 846.3 840 904.3c.1 4.3 3.7 7.7 8 7.7h56a8 8 0 008-8.2c-2-77-33-149.2-87.8-203.9zM612 612c-34.2 0-66.4-13.3-90.5-37.5a126.86 126.86 0 01-37.5-91.8c.3-32.8 13.4-64.5 36.3-88 24-24.6 56.1-38.3 90.4-38.7 33.9-.3 66.8 12.9 91 36.6 24.8 24.3 38.4 56.8 38.4 91.4 0 34.2-13.3 66.3-37.5 90.5A127.3 127.3 0 01612 612zM361.5 510.4c-.9-8.7-1.4-17.5-1.4-26.4 0-15.9 1.5-31.4 4.3-46.5.7-3.6-1.2-7.3-4.5-8.8-13.6-6.1-26.1-14.5-36.9-25.1a127.54 127.54 0 01-38.7-95.4c.9-32.1 13.8-62.6 36.3-85.6 24.7-25.3 57.9-39.1 93.2-38.7 31.9.3 62.7 12.6 86 34.4 7.9 7.4 14.7 15.6 20.4 24.4 2 3.1 5.9 4.4 9.3 3.2 17.6-6.1 36.2-10.4 55.3-12.4 5.6-.6 8.8-6.6 6.3-11.6-32.5-64.3-98.9-108.7-175.7-109.9-110.9-1.7-203.3 89.2-203.3 199.9 0 62.8 28.9 118.8 74.2 155.5-31.8 14.7-61.1 35-86.5 60.4-54.8 54.7-85.8 126.9-87.8 204a8 8 0 008 8.2h56.1c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5 29.4-29.4 65.4-49.8 104.7-59.7 3.9-1 6.5-4.7 6-8.7z"}}]},name:"team",theme:"outlined"},De=function(i,c){return o.createElement(ae,te({},i,{ref:c,icon:Ue}))},We=o.forwardRef(De),He={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M678.3 642.4c24.2-13 51.9-20.4 81.4-20.4h.1c3 0 4.4-3.6 2.2-5.6a371.67 371.67 0 00-103.7-65.8c-.4-.2-.8-.3-1.2-.5C719.2 505 759.6 431.7 759.6 349c0-137-110.8-248-247.5-248S264.7 212 264.7 349c0 82.7 40.4 156 102.6 201.1-.4.2-.8.3-1.2.5-44.7 18.9-84.8 46-119.3 80.6a373.42 373.42 0 00-80.4 119.5A373.6 373.6 0 00137 888.8a8 8 0 008 8.2h59.9c4.3 0 7.9-3.5 8-7.8 2-77.2 32.9-149.5 87.6-204.3C357 628.2 432.2 597 512.2 597c56.7 0 111.1 15.7 158 45.1a8.1 8.1 0 008.1.3zM512.2 521c-45.8 0-88.9-17.9-121.4-50.4A171.2 171.2 0 01340.5 349c0-45.9 17.9-89.1 50.3-121.6S466.3 177 512.2 177s88.9 17.9 121.4 50.4A171.2 171.2 0 01683.9 349c0 45.9-17.9 89.1-50.3 121.6C601.1 503.1 558 521 512.2 521zM880 759h-84v-84c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v84h-84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h84v84c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-84h84c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z"}}]},name:"user-add",theme:"outlined"},Ke=function(i,c){return o.createElement(ae,te({},i,{ref:c,icon:He}))},Le=o.forwardRef(Ke);const{Header:Ge,Content:Je}=se,{Paragraph:Ye,Text:p,Title:Qe}=Re,M=["ACTIVE","DISABLED"],Xe=["TENANT_ADMIN","TENANT_OPERATOR","TENANT_VIEWER"],Z=["SHOP_ADMIN","SHOP_OPERATOR","SHOP_VIEWER"],Ze=["conservative","balanced","aggressive"];function es(){const l=Oe(),[i]=a.useForm(),[c]=a.useForm(),[C]=a.useForm(),[_]=a.useForm(),[k]=a.useForm(),[q]=a.useForm(),[b]=a.useForm(),[r,$]=o.useState({tenantId:l.tenantId||"1",shopId:l.shopId||"1",userId:l.userId||"1",roles:l.roles||"ADMIN,OPERATOR"}),[F,de]=o.useState({}),[L,ce]=o.useState([]),[me,he]=o.useState([]),[G,ue]=o.useState([]),[xe,pe]=o.useState([]),[ne,je]=o.useState([]),[w,m]=o.useState(!1),[ge,I]=o.useState("组织中心已就绪,可管理用户、租户、店铺、成员权限和店铺配置。"),T=a.useWatch("shopId",b)||r.shopId,Ie=a.useWatch("shopId",k)||r.shopId,J=o.useMemo(()=>L.map(s=>({value:String(s.userId),label:`${s.username||s.userId} / ${s.displayName||"-"}`})),[L]),re=o.useMemo(()=>G.map(s=>({value:String(s.shopId),label:`${s.shopName||s.shopId} / ${s.shopNo||"-"}`})),[G]),z=o.useCallback(async()=>{de(await A("/api/admin/organization/overview",r))},[r]),Y=o.useCallback(async()=>{const s=await A("/api/admin/organization/users?pageNum=1&pageSize=50",r);ce(s.list||[])},[r]),Q=o.useCallback(async()=>{const s=await A("/api/admin/organization/tenants?pageNum=1&pageSize=50",r);he(s.list||[])},[r]),X=o.useCallback(async()=>{const s=await A("/api/admin/organization/shops?pageNum=1&pageSize=50",r);ue(s.list||[])},[r]),O=o.useCallback(async()=>{const s=await A("/api/admin/organization/shop-members?pageNum=1&pageSize=50",r);pe(s.list||[])},[r]),E=o.useCallback(async(s=T)=>{if(!s)return;const f=(await A(`/api/admin/organization/shops/${encodeURIComponent(String(s))}/configs?pageNum=1&pageSize=50`,r)).list||[];je(f),b.setFieldsValue(ss(String(s),f))},[b,r,T]),le=o.useCallback(async()=>{m(!0);try{await Promise.all([z(),Y(),Q(),X(),O()]),await E(T||"1"),I("组织目录、店铺成员和店铺配置已刷新。")}catch(s){I(`组织数据加载失败:${y(s)}`),S.error(y(s))}finally{m(!1)}},[E,O,z,X,Q,Y,T]);o.useEffect(()=>{b.setFieldsValue({shopId:r.shopId}),k.setFieldsValue({shopId:r.shopId,roleCode:"SHOP_OPERATOR",status:"ACTIVE"}),i.setFieldsValue({tenantRole:"TENANT_OPERATOR",shopRole:"SHOP_OPERATOR",status:"ACTIVE"}),C.setFieldsValue({status:"ACTIVE",planType:"demo"}),_.setFieldsValue({platformType:"olist",status:"ACTIVE"}),q.setFieldsValue({roleCode:"SHOP_OPERATOR",status:"ACTIVE"}),le()},[]);async function fe(){const s=await i.validateFields();m(!0);try{const n=await R("/api/admin/organization/users",s,r);I(`用户已创建:${n.username||s.username}`),i.setFieldsValue({password:""}),await Promise.all([z(),Y(),O()])}catch(n){S.error(y(n))}finally{m(!1)}}async function ve(){const s=await c.validateFields();m(!0);try{await R(`/api/admin/organization/users/${encodeURIComponent(String(s.userId))}/password`,{password:s.password},r),I(`用户密码已重置:${s.userId}`),c.setFieldsValue({password:""})}catch(n){S.error(y(n))}finally{m(!1)}}async function ye(){var f;const s=await C.validateFields(),n=(f=s.tenantId)==null?void 0:f.trim();m(!0);try{const u=n?`/api/admin/organization/tenants/${encodeURIComponent(n)}`:"/api/admin/organization/tenants",V=await R(u,W(s,"tenantId"),r);I(n?`租户已更新:${V.tenantName}`:`租户已创建:${V.tenantName}`),await Promise.all([z(),Q()])}catch(u){S.error(y(u))}finally{m(!1)}}async function be(){var f;const s=await _.validateFields(),n=(f=s.shopId)==null?void 0:f.trim();m(!0);try{const u=n?`/api/admin/organization/shops/${encodeURIComponent(n)}`:"/api/admin/organization/shops",V=await R(u,W(s,"shopId"),r);I(n?`店铺已更新:${V.shopName}`:`店铺已创建:${V.shopName}`),await Promise.all([z(),X()])}catch(u){S.error(y(u))}finally{m(!1)}}async function we(){const s=await k.validateFields();m(!0);try{const n=await R(`/api/admin/organization/shops/${encodeURIComponent(String(s.shopId||Ie))}/members`,W(s,"shopId"),r);I(`店铺成员已绑定:${n.username||s.userId}`),await Promise.all([z(),O()])}catch(n){S.error(y(n))}finally{m(!1)}}async function Se(){const s=await q.validateFields();m(!0);try{const n=await R(`/api/admin/organization/shop-members/${encodeURIComponent(String(s.memberId))}`,W(s,"memberId"),r);I(`成员权限已更新:${n.username||s.memberId}`),await O()}catch(n){S.error(y(n))}finally{m(!1)}}async function Ce(){const s=await b.validateFields(),n=s.shopId||T||r.shopId,f=[{configKey:"refund_rate_warn_threshold",configValue:s.refundRateWarnThreshold,valueType:"number"},{configKey:"negative_comment_warn_threshold",configValue:s.negativeCommentWarnThreshold,valueType:"number"},{configKey:"agent_tool_approval_enabled",configValue:s.agentToolApprovalEnabled,valueType:"boolean"},{configKey:"agent_model_policy",configValue:s.agentModelPolicy,valueType:"string"}];m(!0);try{for(const u of f)await R(`/api/admin/organization/shops/${encodeURIComponent(String(n))}/configs`,u,r);I(`店铺配置已保存:shop=${n}`),await E(n)}catch(u){S.error(y(u))}finally{m(!1)}}function Te(){b.setFieldsValue({shopId:T||r.shopId,refundRateWarnThreshold:"0.08",negativeCommentWarnThreshold:"10",agentToolApprovalEnabled:"true",agentModelPolicy:"balanced"}),I("已恢复店铺配置默认值,保存后才会生效。")}return e.jsxs(se,{className:"app-shell","data-page-markers":"shopConfigFields refundRateWarnThreshold negativeCommentWarnThreshold agentToolApprovalEnabled agentModelPolicy restoreShopConfigDefaults","data-api-patterns":"/api/admin/organization/overview /api/admin/organization/users /password /api/admin/organization/tenants /api/admin/organization/shops /configs /api/admin/organization/shop-members",children:[e.jsx(Ee,{active:"users"}),e.jsxs(se,{children:[e.jsxs(Ge,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Qe,{level:3,children:"组织中心"}),e.jsx(p,{type:"secondary",children:"统一管理用户租户、组织目录、店铺成员、成员权限和店铺配置。"})]}),e.jsxs(N,{wrap:!0,children:[e.jsx(d,{addonBefore:"Tenant",value:r.tenantId,onChange:s=>$({...r,tenantId:s.target.value})}),e.jsx(d,{addonBefore:"Shop",value:r.shopId,onChange:s=>$({...r,shopId:s.target.value})}),e.jsx(d,{addonBefore:"User",value:r.userId,onChange:s=>$({...r,userId:s.target.value})}),e.jsx(d,{addonBefore:"Roles",value:r.roles,onChange:s=>$({...r,roles:s.target.value})})]})]}),e.jsxs(Je,{className:"content",children:[e.jsx(Ve,{className:"status-alert",type:"info",showIcon:!0,message:ge}),e.jsxs(x,{gutter:[16,16],children:[e.jsx(P,{title:"租户数",value:F.tenantTotal}),e.jsx(P,{title:"店铺数",value:F.shopTotal}),e.jsx(P,{title:"用户数",value:F.userTotal}),e.jsx(P,{title:"活跃成员",value:F.activeMemberTotal}),e.jsx(P,{title:"停用成员",value:F.disabledMemberTotal})]}),e.jsx(Me,{className:"section-card",items:[{key:"directory",label:"组织目录",children:e.jsxs(x,{gutter:[16,16],children:[e.jsx(t,{xs:24,xl:12,children:e.jsx(g,{title:"用户列表",extra:e.jsx(v,{icon:e.jsx(Pe,{}),loading:w,onClick:le,children:"刷新"}),children:e.jsx(B,{rowKey:s=>String(s.userId),dataSource:L,pagination:{pageSize:8},columns:[{title:"用户",dataIndex:"username",render:(s,n)=>e.jsxs(N,{direction:"vertical",size:0,children:[e.jsx(p,{strong:!0,children:s}),e.jsx(p,{type:"secondary",children:n.displayName})]})},{title:"状态",dataIndex:"status",width:110,render:D},{title:"租户角色",dataIndex:"tenantRoles",render:ie},{title:"店铺角色",dataIndex:"shopRoles",render:ie},{title:"创建时间",dataIndex:"createdAt",width:170,render:ee}]})})}),e.jsx(t,{xs:24,xl:12,children:e.jsxs(g,{title:"新增用户 / 重置密码",children:[e.jsxs(a,{form:i,layout:"vertical",children:[e.jsxs(x,{gutter:12,children:[e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"用户名",name:"username",rules:[{required:!0}],children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"显示名",name:"displayName",children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"密码",name:"password",rules:[{required:!0}],children:e.jsx(d.Password,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"邮箱",name:"email",children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"手机",name:"phone",children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"状态",name:"status",rules:[{required:!0}],children:e.jsx(h,{options:M.map(j)})})}),e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"租户角色",name:"tenantRole",rules:[{required:!0}],children:e.jsx(h,{options:Xe.map(j)})})}),e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"店铺角色",name:"shopRole",rules:[{required:!0}],children:e.jsx(h,{options:Z.map(j)})})})]}),e.jsx(v,{id:"createUserBtn",type:"primary",icon:e.jsx(Le,{}),loading:w,onClick:fe,children:"新增用户"})]}),e.jsxs(a,{className:"form-stack",form:c,layout:"vertical",children:[e.jsxs(x,{gutter:12,children:[e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"用户",name:"userId",rules:[{required:!0}],children:e.jsx(h,{showSearch:!0,options:J})})}),e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"新密码",name:"password",rules:[{required:!0}],children:e.jsx(d.Password,{})})})]}),e.jsx(v,{id:"resetPasswordBtn",icon:e.jsx(U,{}),loading:w,onClick:ve,children:"重置密码"})]})]})})]})},{key:"tenants",label:"租户与店铺",children:e.jsxs(x,{gutter:[16,16],children:[e.jsx(t,{xs:24,xl:12,children:e.jsx(g,{title:"租户列表",children:e.jsx(B,{rowKey:s=>String(s.tenantId),dataSource:me,pagination:{pageSize:8},onRow:s=>({onClick:()=>C.setFieldsValue({...s,tenantId:String(s.tenantId)})}),rowClassName:"clickable",columns:[{title:"租户",dataIndex:"tenantName",render:(s,n)=>e.jsxs(N,{direction:"vertical",size:0,children:[e.jsx(p,{strong:!0,children:s}),e.jsx(p,{type:"secondary",children:n.tenantNo})]})},{title:"状态",dataIndex:"status",width:110,render:D},{title:"套餐",dataIndex:"planType",width:100},{title:"店铺",dataIndex:"shopCount",width:90,render:H},{title:"成员",dataIndex:"memberCount",width:90,render:H}]})})}),e.jsx(t,{xs:24,xl:12,children:e.jsx(g,{title:"店铺列表",children:e.jsx(B,{rowKey:s=>String(s.shopId),dataSource:G,pagination:{pageSize:8},onRow:s=>({onClick:()=>{_.setFieldsValue({...s,shopId:String(s.shopId),ownerId:String(s.ownerId||"")}),b.setFieldsValue({shopId:String(s.shopId)}),E(String(s.shopId))}}),rowClassName:"clickable",columns:[{title:"店铺",dataIndex:"shopName",render:(s,n)=>e.jsxs(N,{direction:"vertical",size:0,children:[e.jsx(p,{strong:!0,children:s}),e.jsx(p,{type:"secondary",children:n.shopNo})]})},{title:"平台",dataIndex:"platformType",width:100},{title:"负责人",dataIndex:"ownerId",width:90},{title:"状态",dataIndex:"status",width:110,render:D},{title:"成员",dataIndex:"memberCount",width:90,render:H}]})})}),e.jsx(t,{xs:24,xl:12,children:e.jsx(g,{title:"新增租户 / 编辑租户",children:e.jsxs(a,{form:C,layout:"vertical",children:[e.jsxs(x,{gutter:12,children:[e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"租户 ID",name:"tenantId",children:e.jsx(d,{placeholder:"编辑时填写"})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"租户编号",name:"tenantNo",rules:[{required:!0}],children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"租户名称",name:"tenantName",rules:[{required:!0}],children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"状态",name:"status",rules:[{required:!0}],children:e.jsx(h,{options:M.map(j)})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"套餐",name:"planType",children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"联系人",name:"contactName",children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"联系电话",name:"contactPhone",children:e.jsx(d,{})})})]}),e.jsx(v,{id:"saveTenantBtn",type:"primary",icon:e.jsx(U,{}),loading:w,onClick:ye,children:"新增租户 / 保存租户"})]})})}),e.jsx(t,{xs:24,xl:12,children:e.jsx(g,{title:"新增店铺 / 编辑店铺",children:e.jsxs(a,{form:_,layout:"vertical",children:[e.jsxs(x,{gutter:12,children:[e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"店铺 ID",name:"shopId",children:e.jsx(d,{placeholder:"编辑时填写"})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"店铺编号",name:"shopNo",rules:[{required:!0}],children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"店铺名称",name:"shopName",rules:[{required:!0}],children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"平台",name:"platformType",rules:[{required:!0}],children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"负责人",name:"ownerId",rules:[{required:!0}],children:e.jsx(h,{showSearch:!0,options:J})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"状态",name:"status",rules:[{required:!0}],children:e.jsx(h,{options:M.map(j)})})})]}),e.jsx(v,{id:"saveShopBtn",type:"primary",icon:e.jsx(Be,{}),loading:w,onClick:be,children:"新增店铺 / 保存店铺"})]})})})]})},{key:"members",label:"店铺成员",children:e.jsxs(x,{gutter:[16,16],children:[e.jsx(t,{xs:24,xl:14,children:e.jsx(g,{title:"店铺成员",children:e.jsx(B,{rowKey:s=>String(s.memberId),dataSource:xe,pagination:{pageSize:10},onRow:s=>({onClick:()=>q.setFieldsValue({memberId:String(s.memberId),roleCode:s.roleCode,status:s.status})}),rowClassName:"clickable",columns:[{title:"成员",dataIndex:"username",render:(s,n)=>e.jsxs(N,{direction:"vertical",size:0,children:[e.jsx(p,{strong:!0,children:s}),e.jsx(p,{type:"secondary",children:n.displayName})]})},{title:"店铺",dataIndex:"shopName"},{title:"角色",dataIndex:"roleCode",render:as},{title:"标准角色",dataIndex:"normalizedRole",width:120},{title:"状态",dataIndex:"status",width:110,render:D},{title:"加入时间",dataIndex:"joinedAt",width:170,render:ee}]})})}),e.jsx(t,{xs:24,xl:10,children:e.jsxs(g,{title:"绑定店铺成员",children:[e.jsxs(a,{form:k,layout:"vertical",children:[e.jsxs(x,{gutter:12,children:[e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"店铺",name:"shopId",rules:[{required:!0}],children:e.jsx(h,{showSearch:!0,options:re})})}),e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"用户",name:"userId",rules:[{required:!0}],children:e.jsx(h,{showSearch:!0,options:J})})}),e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"角色",name:"roleCode",rules:[{required:!0}],children:e.jsx(h,{options:Z.map(j)})})}),e.jsx(t,{xs:24,md:12,children:e.jsx(a.Item,{label:"状态",name:"status",rules:[{required:!0}],children:e.jsx(h,{options:M.map(j)})})})]}),e.jsx(v,{id:"addShopMemberBtn",type:"primary",icon:e.jsx(We,{}),loading:w,onClick:we,children:"绑定店铺成员"})]}),e.jsxs(a,{className:"form-stack",form:q,layout:"vertical",children:[e.jsxs(x,{gutter:12,children:[e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"成员 ID",name:"memberId",rules:[{required:!0}],children:e.jsx(d,{})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"角色",name:"roleCode",rules:[{required:!0}],children:e.jsx(h,{options:Z.map(j)})})}),e.jsx(t,{xs:24,md:8,children:e.jsx(a.Item,{label:"状态",name:"status",rules:[{required:!0}],children:e.jsx(h,{options:M.map(j)})})})]}),e.jsx(v,{id:"updateMemberBtn",icon:e.jsx(U,{}),loading:w,onClick:Se,children:"更新成员权限"})]})]})})]})},{key:"configs",label:"店铺配置",children:e.jsxs(x,{gutter:[16,16],children:[e.jsx(t,{xs:24,xl:10,children:e.jsx(g,{title:"店铺配置表单","data-shop-config-fields":"shopConfigFields",children:e.jsxs(a,{form:b,layout:"vertical",children:[e.jsx(a.Item,{label:"店铺",name:"shopId",rules:[{required:!0}],children:e.jsx(h,{showSearch:!0,options:re,onChange:s=>E(s)})}),e.jsx(a.Item,{label:"退款率预警阈值",name:"refundRateWarnThreshold",rules:[{required:!0}],children:e.jsx(d,{id:"refundRateWarnThreshold",addonAfter:"ratio"})}),e.jsx(a.Item,{label:"差评预警阈值",name:"negativeCommentWarnThreshold",rules:[{required:!0}],children:e.jsx(d,{id:"negativeCommentWarnThreshold"})}),e.jsx(a.Item,{label:"高风险工具审批",name:"agentToolApprovalEnabled",rules:[{required:!0}],children:e.jsx(h,{id:"agentToolApprovalEnabled",options:["true","false"].map(j)})}),e.jsx(a.Item,{label:"模型策略",name:"agentModelPolicy",rules:[{required:!0}],children:e.jsx(h,{id:"agentModelPolicy",options:Ze.map(j)})}),e.jsxs(_e,{gap:8,wrap:"wrap",children:[e.jsx(v,{id:"saveShopConfigBtn",type:"primary",icon:e.jsx(U,{}),loading:w,onClick:Ce,children:"保存店铺配置"}),e.jsx(v,{id:"restoreShopConfigDefaults",onClick:Te,children:"恢复默认配置"})]})]})})}),e.jsx(t,{xs:24,xl:14,children:e.jsxs(g,{title:"当前店铺配置",children:[e.jsx(oe,{bordered:!0,size:"small",column:1,children:ne.map(s=>e.jsx(oe.Item,{label:s.configKey,children:e.jsxs(N,{children:[e.jsx(K,{children:s.valueType}),e.jsx(p,{children:s.configValue}),e.jsx(p,{type:"secondary",children:ee(s.updatedAt)})]})},s.configKey))}),e.jsx(Ye,{className:"json-block",children:JSON.stringify({shopId:T,configs:ne},null,2)})]})})]})}]})]})]})]})}function P({title:l,value:i}){return e.jsx(t,{xs:12,md:5,children:e.jsx(g,{className:"metric-card",children:e.jsx(ke,{title:l,value:H(i)})})})}function ss(l,i){const c=new Map(i.map(C=>[C.configKey,C.configValue]));return{shopId:l,refundRateWarnThreshold:c.get("refund_rate_warn_threshold")||"0.08",negativeCommentWarnThreshold:c.get("negative_comment_warn_threshold")||"10",agentToolApprovalEnabled:c.get("agent_tool_approval_enabled")||"true",agentModelPolicy:c.get("agent_model_policy")||"balanced"}}function ie(l){return e.jsx(N,{wrap:!0,children:(l||[]).map(i=>e.jsx(K,{children:i},i))})}function as(l){return e.jsx(K,{color:"blue",children:l||"-"})}function D(l){const i=String(l||"-"),c=i==="ACTIVE"?"green":i==="DISABLED"?"orange":"default";return e.jsx(K,{color:c,children:i})}function j(l){return{value:l,label:l}}function W(l,i){const c={...l};return delete c[i],c}function ee(l){return l?String(l).replace("T"," ").slice(0,19):"-"}function y(l){return l instanceof Error?l.message:String(l)}Ne.createRoot(document.getElementById("root")).render(e.jsx(ze.StrictMode,{children:e.jsx(Ae,{locale:Fe,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx(es,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/workbench-CY-IhXcA.js b/shopops-admin/src/main/resources/static/admin/assets/workbench-CY-IhXcA.js new file mode 100644 index 0000000..54d6d30 --- /dev/null +++ b/shopops-admin/src/main/resources/static/admin/assets/workbench-CY-IhXcA.js @@ -0,0 +1,9 @@ +import{E as Be,G as Ve,H as Le,J as j,r as l,K as $e,M as Q,N as qe,O as He,P as Fe,Q as We,I as ke,_ as Ue,j as t,L as me,T as Ge,b as Xe,w as Ke,c as V,U as te,A as Qe,f as U,g as y,S as I,h as N,d as oe,F as Je,B as E,l as we,q as v,e as Oe,y as xe,v as Ye,o as P,s as ce,p as Ze,V as pe,D as g,R as et,a as tt,C as rt,z as nt}from"./styles-CdbHnvft.js";import{i as at}from"./index-ClPwX7rX.js";import{F as k,a as re}from"./Table-sHSMbx0B.js";import{R as st}from"./ThunderboltOutlined-xUGxlyJ6.js";import{R as Ie}from"./PlayCircleOutlined-g8qloYTv.js";import{L as K}from"./index-rsTaKYdt.js";import{S as it}from"./index-D7Zu6-V4.js";import{S as A}from"./index-emnzbHoJ.js";import{R as lt}from"./FileTextOutlined-DR_VCDvU.js";import{R as ot}from"./ApiOutlined-CqRwPpT6.js";const ct=e=>{const{componentCls:r,calc:n}=e;return{[r]:Object.assign(Object.assign({},Le(e)),{margin:0,padding:0,listStyle:"none",[`${r}-item`]:{position:"relative",margin:0,paddingBottom:e.itemPaddingBottom,fontSize:e.fontSize,listStyle:"none","&-tail":{position:"absolute",insetBlockStart:e.itemHeadSize,insetInlineStart:n(n(e.itemHeadSize).sub(e.tailWidth)).div(2).equal(),height:`calc(100% - ${j(e.itemHeadSize)})`,borderInlineStart:`${j(e.tailWidth)} ${e.lineType} ${e.tailColor}`},"&-pending":{[`${r}-item-head`]:{fontSize:e.fontSizeSM,backgroundColor:"transparent"},[`${r}-item-tail`]:{display:"none"}},"&-head":{position:"absolute",width:e.itemHeadSize,height:e.itemHeadSize,backgroundColor:e.dotBg,border:`${j(e.dotBorderWidth)} ${e.lineType} transparent`,borderRadius:"50%","&-blue":{color:e.colorPrimary,borderColor:e.colorPrimary},"&-red":{color:e.colorError,borderColor:e.colorError},"&-green":{color:e.colorSuccess,borderColor:e.colorSuccess},"&-gray":{color:e.colorTextDisabled,borderColor:e.colorTextDisabled}},"&-head-custom":{position:"absolute",insetBlockStart:n(e.itemHeadSize).div(2).equal(),insetInlineStart:n(e.itemHeadSize).div(2).equal(),width:"auto",height:"auto",marginBlockStart:0,paddingBlock:e.customHeadPaddingVertical,lineHeight:1,textAlign:"center",border:0,borderRadius:0,transform:"translate(-50%, -50%)"},"&-content":{position:"relative",insetBlockStart:n(n(e.fontSize).mul(e.lineHeight).sub(e.fontSize)).mul(-1).add(e.lineWidth).equal(),marginInlineStart:n(e.margin).add(e.itemHeadSize).equal(),marginInlineEnd:0,marginBlockStart:0,marginBlockEnd:0,wordBreak:"break-word"},"&-last":{[`> ${r}-item-tail`]:{display:"none"},[`> ${r}-item-content`]:{minHeight:n(e.controlHeightLG).mul(1.2).equal()}}},[`&${r}-alternate, + &${r}-right, + &${r}-label`]:{[`${r}-item`]:{"&-tail, &-head, &-head-custom":{insetInlineStart:"50%"},"&-head":{marginInlineStart:n(e.marginXXS).mul(-1).equal(),"&-custom":{marginInlineStart:n(e.tailWidth).div(2).equal()}},"&-left":{[`${r}-item-content`]:{insetInlineStart:`calc(50% - ${j(e.marginXXS)})`,width:`calc(50% - ${j(e.marginSM)})`,textAlign:"start"}},"&-right":{[`${r}-item-content`]:{width:`calc(50% - ${j(e.marginSM)})`,margin:0,textAlign:"end"}}}},[`&${r}-right`]:{[`${r}-item-right`]:{[`${r}-item-tail, + ${r}-item-head, + ${r}-item-head-custom`]:{insetInlineStart:`calc(100% - ${j(n(n(e.itemHeadSize).add(e.tailWidth)).div(2).equal())})`},[`${r}-item-content`]:{width:`calc(100% - ${j(n(e.itemHeadSize).add(e.marginXS).equal())})`}}},[`&${r}-pending + ${r}-item-last + ${r}-item-tail`]:{display:"block",height:`calc(100% - ${j(e.margin)})`,borderInlineStart:`${j(e.tailWidth)} dotted ${e.tailColor}`},[`&${r}-reverse + ${r}-item-last + ${r}-item-tail`]:{display:"none"},[`&${r}-reverse ${r}-item-pending`]:{[`${r}-item-tail`]:{insetBlockStart:e.margin,display:"block",height:`calc(100% - ${j(e.margin)})`,borderInlineStart:`${j(e.tailWidth)} dotted ${e.tailColor}`},[`${r}-item-content`]:{minHeight:n(e.controlHeightLG).mul(1.2).equal()}},[`&${r}-label`]:{[`${r}-item-label`]:{position:"absolute",insetBlockStart:n(n(e.fontSize).mul(e.lineHeight).sub(e.fontSize)).mul(-1).add(e.tailWidth).equal(),width:`calc(50% - ${j(e.marginSM)})`,textAlign:"end"},[`${r}-item-right`]:{[`${r}-item-label`]:{insetInlineStart:`calc(50% + ${j(e.marginSM)})`,width:`calc(50% - ${j(e.marginSM)})`,textAlign:"start"}}},"&-rtl":{direction:"rtl",[`${r}-item-head-custom`]:{transform:"translate(50%, -50%)"}}})}},dt=e=>({tailColor:e.colorSplit,tailWidth:e.lineWidthBold,dotBorderWidth:e.wireframe?e.lineWidthBold:e.lineWidth*3,dotBg:e.colorBgContainer,itemPaddingBottom:e.padding*1.25}),ut=Be("Timeline",e=>{const r=Ve(e,{itemHeadSize:10,customHeadPaddingVertical:e.paddingXXS,paddingInlineEnd:2});return ct(r)},dt);var mt=function(e,r){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&r.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var{prefixCls:r,className:n,color:a="blue",dot:i,pending:c=!1,position:m,label:d,children:f}=e,u=mt(e,["prefixCls","className","color","dot","pending","position","label","children"]);const{getPrefixCls:w}=l.useContext($e),x=w("timeline",r),C=Q(`${x}-item`,{[`${x}-item-pending`]:c},n),S=/blue|red|green|gray/.test(a||"")?void 0:a,p=Q(`${x}-item-head`,{[`${x}-item-head-custom`]:!!i,[`${x}-item-head-${a}`]:!S});return l.createElement("li",Object.assign({},u,{className:C}),d&&l.createElement("div",{className:`${x}-item-label`},d),l.createElement("div",{className:`${x}-item-tail`}),l.createElement("div",{className:p,style:{borderColor:S,color:S}},i),l.createElement("div",{className:`${x}-item-content`},f))};var Ce=function(e,r){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&r.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{var{prefixCls:r,className:n,pending:a=!1,children:i,items:c,rootClassName:m,reverse:d=!1,direction:f,hashId:u,pendingDot:w,mode:x=""}=e,C=Ce(e,["prefixCls","className","pending","children","items","rootClassName","reverse","direction","hashId","pendingDot","mode"]);const S=(h,R)=>x==="alternate"?h==="right"?`${r}-item-right`:h==="left"?`${r}-item-left`:R%2===0?`${r}-item-left`:`${r}-item-right`:x==="left"?`${r}-item-left`:x==="right"?`${r}-item-right`:h==="right"?`${r}-item-right`:"",p=qe(c||[]),D=typeof a=="boolean"?null:a;a&&p.push({pending:!!a,dot:w||l.createElement(He,null),children:D}),d&&p.reverse();const T=p.length,J=`${r}-item-last`,L=p.filter(h=>!!h).map((h,R)=>{var q;const ae=R===T-2?J:"",Y=R===T-1?J:"",{className:_}=h,O=Ce(h,["className"]);return l.createElement(Ne,Object.assign({},O,{className:Q([_,!d&&a?ae:Y,S((q=h==null?void 0:h.position)!==null&&q!==void 0?q:"",R)]),key:(h==null?void 0:h.key)||R}))}),M=p.some(h=>!!(h!=null&&h.label)),b=Q(r,{[`${r}-pending`]:!!a,[`${r}-reverse`]:!!d,[`${r}-${x}`]:!!x&&!M,[`${r}-label`]:M,[`${r}-rtl`]:f==="rtl"},n,m,u);return l.createElement("ol",Object.assign({},C,{className:b}),L)};function ht(e,r){return e&&Array.isArray(e)?e:Fe(r).map(n=>{var a,i;return Object.assign({children:(i=(a=n==null?void 0:n.props)===null||a===void 0?void 0:a.children)!==null&&i!==void 0?i:""},n.props)})}var xt=function(e,r){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&r.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i{const{getPrefixCls:r,direction:n,timeline:a}=l.useContext($e),{prefixCls:i,children:c,items:m,className:d,style:f}=e,u=xt(e,["prefixCls","children","items","className","style"]),w=r("timeline",i),x=We(w),[C,S,p]=ut(w,x),D=ht(m,c);return C(l.createElement(pt,Object.assign({},u,{className:Q(a==null?void 0:a.className,d,p,x),style:Object.assign(Object.assign({},a==null?void 0:a.style),f),prefixCls:w,direction:n,items:D,hashId:S})))};Te.Item=Ne;var ft={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm-600-80h56c4.4 0 8-3.6 8-8V560c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V384c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v320c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V462c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v242c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V304c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v400c0 4.4 3.6 8 8 8z"}}]},name:"bar-chart",theme:"outlined"},gt=function(r,n){return l.createElement(ke,Ue({},r,{ref:n,icon:ft}))},jt=l.forwardRef(gt);function bt({metrics:e}){const r=l.useRef(null);return l.useEffect(()=>{if(!r.current)return;const n=at(r.current),a={tooltip:{trigger:"axis"},grid:{left:36,right:16,top:28,bottom:28},xAxis:{type:"category",data:["GMV","退款率","风险评价","商品候选","广告ROI"],axisTick:{show:!1}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#edf1f7"}}},series:[{type:"bar",data:[Z(e.gmv),yt(e.refundRate),Z(e.negativeCount),Z(e.candidateCount),Z(e.roi)],itemStyle:{color:c=>["#1677ff","#faad14","#f5222d","#13c2c2","#52c41a"][c.dataIndex]},barMaxWidth:34}]};n.setOption(a);const i=()=>n.resize();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i),n.dispose()}},[e]),t.jsx("div",{className:"metrics-chart",ref:r})}function Z(e){const r=Number(e);return Number.isFinite(r)?r:0}function yt(e){const r=Number(e);return Number.isFinite(r)?Number((r*100).toFixed(2)):0}const{Header:It,Content:Ct}=me,{Text:$,Title:St,Paragraph:Re}=Ge,z="2018-08-07",G="2018-08-01",X=z,vt={tenantId:"1",shopId:"1",userId:"1",roles:"ADMIN,OPERATOR"},$t="基于 Olist 真实订单和评价数据,生成 2018-08-07 店铺运营日报,重点分析 GMV、退款风险、差评原因和商品优化建议。",Se=[{title:"经营日报",prompt:"生成今天店铺运营日报,给出 GMV、退款、差评和商品建议。"},{title:"差评专项",prompt:"分析最近差评原因,找出高风险评价和需要优先处理的问题。"},{title:"商品优化",prompt:"找出低点击商品并给出标题、库存和运营优化建议。"},{title:"投放异常",prompt:"检查高消耗低转化投放计划,输出异常原因和调整建议。"}];function wt(){var ye;const e=Xe(),[r]=k.useForm(),[n,a]=l.useState({tenantId:e.tenantId||"1",shopId:e.shopId||"1",userId:e.userId||"1",roles:e.roles||"ADMIN,OPERATOR"}),[i,c]=l.useState("准备接收自然语言运营任务。"),[m,d]=l.useState("默认业务数据"),[f,u]=l.useState(!1),[w,x]=l.useState(!1),[C,S]=l.useState(null),[p,D]=l.useState(null),[T,J]=l.useState([]),[L,M]=l.useState(null),[b,h]=l.useState(null),[R,q]=l.useState([]),[ae,Y]=l.useState(null),_=l.useRef(null),O=(p==null?void 0:p.taskId)||((ye=C==null?void 0:C.task)==null?void 0:ye.taskId)||"",fe=(p==null?void 0:p.reportId)||(b==null?void 0:b.reportId)||"",se=l.useMemo(()=>Ke(b==null?void 0:b.evidence),[b]),ie=l.useMemo(()=>zt(T),[T]),H=l.useMemo(()=>Pt(ie,se.dataSources),[ie,se.dataSources]),Ee=(L==null?void 0:L.spans)||[],F=l.useCallback(async()=>{try{const s=await V("/api/admin/agent/tasks?pageNum=1&pageSize=5",n);q(s.list||[])}catch(s){console.warn(s)}},[n]),le=l.useCallback(async()=>{try{const s=await V("/api/admin/evaluation/agent-natural-language-batch",n);Y(s)}catch(s){console.warn(s),Y(null)}},[n]),ge=l.useCallback(async s=>{const o=await V(`/api/agent/tasks/${encodeURIComponent(s)}/steps`,n);return J(o||[]),o||[]},[n]),je=l.useCallback(async s=>{const o=await V(`/api/reports/${encodeURIComponent(s)}`,n);return h(o),o},[n]),be=l.useCallback(async s=>{const o=await V(`/api/admin/agent/tasks/${encodeURIComponent(s)}/detail`,n);return M(o),o},[n]),W=l.useCallback(async s=>{const o=await V(`/api/agent/tasks/${encodeURIComponent(s)}`,n);return D(o),await ge(s),await be(s),o.reportId&&await je(o.reportId),te(o.status)&&(x(!1),await F()),o},[n,be,F,je,ge]),B=l.useCallback(()=>{_.current&&(window.clearInterval(_.current),_.current=null),x(!1)},[]),Ae=l.useCallback(s=>{B(),x(!0),_.current=window.setInterval(async()=>{try{const o=await W(s);te(o.status)&&B()}catch(o){B(),c(`结果追踪中断:${ue(o)}`)}},2e3)},[W,B]);l.useEffect(()=>(r.setFieldsValue({userInput:Se[0].prompt,startDate:z,endDate:z}),F(),le(),B),[r,le,F,B]);async function De(s){if(!ee(s.startDate)||!ee(s.endDate)||s.startDate>s.endDate){ce.warning(`请选择数据覆盖日期 ${G} 至 ${X}`);return}u(!0),c("Agent 正在理解诉求并创建任务。");try{const o=await Ze("/api/agent/tasks/natural-language",{userInput:s.userInput,dateRange:{start:s.startDate,end:s.endDate}},n);S(o),D(o.task),M(null),h(null),c(`已路由到 ${o.taskType}:${o.routedReason||"规则路由完成"}`);const _e=await W(o.task.taskId);te(_e.status)||Ae(o.task.taskId),await F()}catch(o){c(`任务创建失败:${ue(o)}`),ce.error(ue(o))}finally{u(!1)}}function ze(){a(vt),r.setFieldsValue({startDate:z,endDate:z,userInput:$t}),d("Olist 真实数据演示"),c("已切换到 Olist 演示日期 2018-08-07。默认 Connector 会读取 Olist 订单、评价和商品候选数据。")}function Pe(s){const o={};s.startDate&&!ee(s.startDate)&&(o.startDate=z),s.endDate&&!ee(s.endDate)&&(o.endDate=z),Object.keys(o).length>0&&(r.setFieldsValue(o),ce.warning(`请选择数据覆盖日期 ${G} 至 ${X}`))}function Me(s){D(s),S(null),M(null),h(null),s.taskId&&W(s.taskId)}return t.jsxs(me,{className:"app-shell",children:[t.jsx(Qe,{active:"workbench"}),t.jsxs(me,{children:[t.jsxs(It,{className:"topbar",children:[t.jsxs("div",{children:[t.jsx(St,{level:3,children:"Agent 工作台"}),t.jsx($,{type:"secondary",children:"用自然语言发起日常运营任务,追踪工具编排、量化结果、报告与审计链路。"})]}),t.jsx(Nt,{context:n})]}),t.jsx(Ct,{className:"content",children:t.jsxs(U,{gutter:[16,16],children:[t.jsx(y,{xs:24,xl:10,children:t.jsxs(I,{direction:"vertical",size:16,className:"full",children:[t.jsx(N,{title:"一句话发起任务",extra:t.jsx(v,{color:"blue",children:m}),children:t.jsxs(k,{form:r,layout:"vertical",onFinish:De,onValuesChange:Pe,children:[t.jsx(k.Item,{name:"userInput",label:"自然语言任务",rules:[{required:!0,message:"请输入运营任务"}],children:t.jsx(oe.TextArea,{rows:6,placeholder:"例如:生成今天店铺运营日报"})}),t.jsxs(U,{gutter:10,children:[t.jsx(y,{span:12,children:t.jsx(k.Item,{name:"startDate",label:"开始日期",rules:[{required:!0}],children:t.jsx(oe,{type:"date",min:G,max:X})})}),t.jsx(y,{span:12,children:t.jsx(k.Item,{name:"endDate",label:"结束日期",rules:[{required:!0}],children:t.jsx(oe,{type:"date",min:G,max:X})})})]}),t.jsxs(Je,{justify:"space-between",gap:8,wrap:"wrap",children:[t.jsx(E,{id:"useOlistDemo",icon:t.jsx(st,{}),onClick:ze,children:"Olist 演示数据"}),t.jsxs(I,{children:[t.jsx(E,{icon:t.jsx(we,{}),disabled:!O,loading:w,onClick:()=>O&&W(O),children:"刷新结果"}),t.jsx(E,{type:"primary",htmlType:"submit",icon:t.jsx(Ie,{}),loading:f,children:"启动 Agent"})]})]})]})}),t.jsx(N,{title:"快捷任务",children:t.jsx(U,{gutter:[8,8],children:Se.map(s=>t.jsx(y,{span:12,children:t.jsxs(E,{block:!0,className:"quick-button",onClick:()=>r.setFieldsValue({userInput:s.prompt}),children:[t.jsx("strong",{children:s.title}),t.jsx("span",{children:s.prompt})]})},s.title))})}),t.jsx(N,{title:"最近任务",children:t.jsx(K,{dataSource:R,locale:{emptyText:"暂无最近任务"},renderItem:s=>t.jsxs(K.Item,{className:"clickable",onClick:()=>Me(s),children:[t.jsx(K.Item.Meta,{title:s.taskNo||s.taskId,description:s.resultSummary||s.userInput||s.taskType}),t.jsx(he,{status:s.status})]})})}),t.jsx(Ot,{evaluation:ae,onReload:le})]})}),t.jsx(y,{xs:24,xl:14,children:t.jsxs(I,{direction:"vertical",size:16,className:"full",children:[t.jsx(Oe,{type:"info",showIcon:!0,message:i}),t.jsx(Tt,{understanding:C,task:p,report:b,evidence:se}),t.jsx(N,{title:"Agent 执行步骤",extra:t.jsx(he,{status:p==null?void 0:p.status}),children:t.jsx(it,{direction:"vertical",size:"small",current:_t(T),items:(T.length?T:Vt()).map(s=>({title:s.stepName||"等待执行",description:s.toolCode||"Agent 创建任务后会展示工具调用过程",status:Bt(s.status)}))})}),t.jsx(Rt,{spans:Ee}),t.jsxs(N,{title:"量化结果",extra:t.jsx(jt,{}),children:[t.jsxs(U,{gutter:[12,12],children:[t.jsx(y,{xs:12,md:6,children:t.jsx(A,{title:"GMV",value:xe(H.gmv)})}),t.jsx(y,{xs:12,md:6,children:t.jsx(A,{title:"退款率",value:Ye(H.refundRate)})}),t.jsx(y,{xs:12,md:6,children:t.jsx(A,{title:"风险评价",value:P(H.negativeCount)})}),t.jsx(y,{xs:12,md:6,children:t.jsx(A,{title:"商品候选",value:P(H.candidateCount)})})]}),t.jsx(bt,{metrics:H}),t.jsx(Et,{outputs:ie})]}),t.jsx(N,{title:"最终报告与建议",extra:t.jsxs(I,{children:[t.jsx(E,{href:O?`/admin/tasks.html?taskId=${O}`:"/admin/tasks.html",icon:t.jsx(Ie,{}),children:"任务"}),t.jsx(E,{href:fe?`/admin/reports.html?reportId=${fe}`:"/admin/reports.html",icon:t.jsx(lt,{}),children:"报告"}),t.jsx(E,{href:O?`/admin/audit.html?source=TASK&taskId=${O}`:"/admin/audit.html",icon:t.jsx(ot,{}),children:"审计"})]}),children:t.jsx(Re,{className:"markdown-preview",children:(b==null?void 0:b.markdown)||(p==null?void 0:p.resultSummary)||"任务完成后会展示 Markdown 报告摘要和运营建议。"})})]})})]})})]})]})}function Ot({evaluation:e,onReload:r}){var i,c;const n=e==null?void 0:e.summary,a=!!(e!=null&&e.available&&n);return t.jsx(N,{title:"Agent 批量评测",extra:t.jsx(E,{size:"small",icon:t.jsx(we,{}),onClick:r,children:"刷新"}),children:a?t.jsxs(I,{direction:"vertical",size:12,className:"full",children:[t.jsxs(U,{gutter:[8,8],children:[t.jsx(y,{span:12,children:t.jsx(A,{title:"Agent 任务",value:(n==null?void 0:n.caseCount)||0})}),t.jsx(y,{span:12,children:t.jsx(A,{title:"工具调用",value:(n==null?void 0:n.toolInvocationCount)||0})}),t.jsx(y,{span:12,children:t.jsx(A,{title:"任务成功率",value:de(n==null?void 0:n.successRate)})}),t.jsx(y,{span:12,children:t.jsx(A,{title:"意图准确率",value:de(n==null?void 0:n.intentAccuracy)})})]}),t.jsxs(g,{size:"small",column:1,bordered:!0,children:[t.jsxs(g.Item,{label:"数据日期",children:[((i=n==null?void 0:n.dateRange)==null?void 0:i.start)||"-"," 至 ",((c=n==null?void 0:n.dateRange)==null?void 0:c.end)||"-"]}),t.jsxs(g.Item,{label:"平均耗时",children:[P(n==null?void 0:n.avgWallClockDurationMs)," ms"]}),t.jsxs(g.Item,{label:"P95 耗时",children:[P(n==null?void 0:n.p95WallClockDurationMs)," ms"]}),t.jsx(g.Item,{label:"生成时间",children:(n==null?void 0:n.generatedAt)||"-"})]}),t.jsx(re,{size:"small",pagination:!1,dataSource:(n==null?void 0:n.scenarioBreakdown)||[],rowKey:m=>m.scenario||"scenario",columns:[{title:"场景",dataIndex:"scenario"},{title:"任务",dataIndex:"caseCount",width:72},{title:"成功率",dataIndex:"successRate",width:92,render:de},{title:"平均工具",dataIndex:"avgToolInvocationCount",width:92}]})]}):t.jsx(Oe,{type:"warning",showIcon:!0,message:"还没有可展示的批量评测结果",description:"运行 scripts/run-agent-natural-language-batch.ps1 后,前端会读取最新汇总。"})})}function Nt({context:e}){return t.jsxs(I,{wrap:!0,className:"context-summary",children:[t.jsx($,{type:"secondary",children:"当前上下文"}),t.jsxs(v,{children:["租户 ",e.tenantId||"1"]}),t.jsxs(v,{color:"blue",children:["店铺 ",e.shopId||"1"]}),t.jsxs(v,{children:["用户 ",e.userId||"1"]}),t.jsx(v,{color:"geekblue",children:e.roles||"ADMIN,OPERATOR"})]})}function Tt({understanding:e,task:r,report:n,evidence:a}){var c,m;const i=Mt(a.dataSources);return t.jsx(N,{title:"Agent 理解结果",children:t.jsxs(I,{direction:"vertical",size:14,className:"full",children:[t.jsxs(g,{size:"small",column:{xs:1,md:2},bordered:!0,children:[t.jsx(g.Item,{label:"意图",children:(e==null?void 0:e.intentLabel)||Lt(a.intent)||(e==null?void 0:e.intent)||"-"}),t.jsx(g.Item,{label:"置信度",children:e?`${(e.confidence*100).toFixed(0)}%`:"-"}),t.jsx(g.Item,{label:"任务",children:(r==null?void 0:r.taskNo)||(r==null?void 0:r.taskId)||"-"}),t.jsx(g.Item,{label:"报告",children:(n==null?void 0:n.title)||(n==null?void 0:n.reportId)||"-"}),t.jsx(g.Item,{label:"关注点",span:2,children:t.jsx(ne,{values:e==null?void 0:e.focusAreas,fallback:"默认经营复盘"})}),t.jsx(g.Item,{label:"数据来源",span:2,children:i}),t.jsx(g.Item,{label:"建议动作",span:2,children:t.jsx(ne,{values:e==null?void 0:e.recommendedActions,fallback:"等待 Agent 输出"})})]}),t.jsxs("div",{children:[t.jsx($,{strong:!0,children:"规划依据"}),t.jsx(Re,{type:"secondary",style:{margin:"4px 0 8px"},children:((c=e==null?void 0:e.plan)==null?void 0:c.rationale)||"等待 Agent 规划"}),t.jsx(K,{size:"small",header:t.jsx($,{strong:!0,children:"执行计划"}),dataSource:((m=e==null?void 0:e.plan)==null?void 0:m.steps)||[],locale:{emptyText:"等待 Agent 规划"},renderItem:d=>t.jsx(K.Item,{children:t.jsxs(I,{direction:"vertical",size:0,children:[t.jsxs($,{strong:!0,children:[d.stepNo,". ",d.stepName]}),t.jsx($,{type:"secondary",children:d.reason||d.toolCode})]})},`${d.stepNo}-${d.toolCode}`)})]})]})})}function Rt({spans:e}){const r=e.filter(u=>["agent.planner","agent.executor","agent.verifier","agent.repair","agent.verifier.retry"].includes(String(u.spanName||""))),n=r.find(u=>u.spanName==="agent.repair"),a=r.find(u=>u.spanName==="agent.verifier"),i=r.find(u=>u.spanName==="agent.verifier.retry"),c=pe(a==null?void 0:a.outputSummary),m=pe(n==null?void 0:n.outputSummary),d=ve(c.missingEvidence),f=ve(c.repairToolCodes);return t.jsx(N,{title:"校验与修复链路",extra:n?t.jsx(v,{color:"orange",children:"已自动补证据"}):i?t.jsx(v,{color:"green",children:"二次校验通过"}):t.jsx(v,{color:"blue",children:"Verifier"}),children:t.jsxs(I,{direction:"vertical",size:12,className:"full",children:[r.length===0?t.jsx($,{type:"secondary",children:"任务完成后会展示 Planner、Executor、Verifier 与自动修复 trace。"}):t.jsx(Te,{items:r.map(u=>({color:At(u.status),children:t.jsxs(I,{direction:"vertical",size:2,children:[t.jsxs(I,{wrap:!0,children:[t.jsx($,{strong:!0,children:Dt(u.spanName)}),t.jsx(he,{status:u.status}),u.latencyMs!==void 0&&t.jsxs($,{type:"secondary",children:[u.latencyMs," ms"]})]}),t.jsx($,{type:"secondary",children:u.errorMessage||u.inputSummary||u.outputSummary||"-"})]})}))}),(d.length>0||f.length>0)&&t.jsxs(g,{size:"small",column:{xs:1,md:2},bordered:!0,children:[t.jsx(g.Item,{label:"缺失证据",children:t.jsx(ne,{values:d,fallback:"无"})}),t.jsx(g.Item,{label:"补跑工具",children:t.jsx(ne,{values:f,fallback:"无"})}),t.jsx(g.Item,{label:"修复计划",span:2,children:m.rationale?String(m.rationale):"Verifier 触发单轮补跑并重新生成报告"})]})]})})}function Et({outputs:e}){const r=e["comment.query_negative"]||{},n=e["product.query_candidates"]||{},a=e["ad.query_performance"]||{},i=Array.isArray(r.riskComments)?r.riskComments.slice(0,3):[],c=Array.isArray(n.products)?n.products.slice(0,5):[],m=Array.isArray(a.campaigns)?a.campaigns.slice(0,5):[];return t.jsxs(I,{direction:"vertical",size:14,className:"full result-tables",children:[i.length>0&&t.jsx(re,{size:"small",pagination:!1,title:()=>"差评风险样本",dataSource:i,rowKey:(d,f)=>`comment-${f}`,columns:[{title:"商品",dataIndex:"productName"},{title:"星级",dataIndex:"star",width:80},{title:"内容",dataIndex:"content"}]}),c.length>0&&t.jsx(re,{size:"small",pagination:!1,title:()=>"商品优化候选",dataSource:c,rowKey:(d,f)=>`product-${f}`,columns:[{title:"商品",dataIndex:"productName"},{title:"评分",dataIndex:"score",width:80},{title:"库存",dataIndex:"stock",width:80},{title:"原因",dataIndex:"reason"}]}),m.length>0&&t.jsx(re,{size:"small",pagination:!1,title:()=>"投放计划表现",dataSource:m,rowKey:(d,f)=>`campaign-${f}`,columns:[{title:"计划",dataIndex:"campaignName"},{title:"消耗",dataIndex:"spend",render:xe},{title:"ROI",dataIndex:"roi"}]})]})}function ne({values:e,fallback:r}){const n=e&&e.length?e:[r];return t.jsx(I,{wrap:!0,children:n.map(a=>t.jsx(v,{children:a},a))})}function he({status:e}){const r=String(e||"-").toUpperCase(),n=r==="SUCCESS"?"success":r==="FAILED"||r==="DEGRADED"?"error":r==="-"?"default":"processing";return t.jsx(v,{color:n,children:r})}function At(e){const r=String(e||"").toUpperCase();return r==="SUCCESS"?"green":r==="FAILED"?"red":r==="APPROVAL_REQUIRED"?"orange":"blue"}function Dt(e){return e==="agent.planner"?"Planner 生成计划":e==="agent.executor"?"Executor 执行工具":e==="agent.verifier"?"Verifier 首次校验":e==="agent.repair"?"Repair 自动补证据":e==="agent.verifier.retry"?"Verifier 二次校验":e||"Trace Span"}function ve(e){return Array.isArray(e)?e.map(r=>String(r)).filter(Boolean):[]}function zt(e){return e.reduce((r,n)=>(n.toolCode&&(r[n.toolCode]=pe(n.output)),r),{})}function Pt(e,r){var m,d,f,u;const n=e["order.query_summary"]||((m=r==null?void 0:r.orderSummary)==null?void 0:m.metrics)||{},a=e["comment.query_negative"]||((d=r==null?void 0:r.negativeComments)==null?void 0:d.metrics)||{},i=e["product.query_candidates"]||((f=r==null?void 0:r.productCandidates)==null?void 0:f.metrics)||{},c=e["ad.query_performance"]||((u=r==null?void 0:r.adPerformance)==null?void 0:u.metrics)||{};return{gmv:n.gmv,refundRate:n.refundRate,negativeCount:a.negativeCount,candidateCount:i.candidateCount,roi:c.roi}}function Mt(e){var i,c,m,d;if(!e)return"暂无数据来源快照";const r=e.orderSummary||{},n=e.negativeComments||{},a=e.productCandidates||{};return[`${r.connectorCode||"order.unknown"}:GMV ${xe((i=r.metrics)==null?void 0:i.gmv)},订单 ${P((c=r.metrics)==null?void 0:c.orderCount)}`,`${n.connectorCode||"comment.unknown"}:风险评价 ${P((m=n.metrics)==null?void 0:m.negativeCount)}`,`${a.connectorCode||"product.unknown"}:商品候选 ${P((d=a.metrics)==null?void 0:d.candidateCount)}`].join(";")}function _t(e){const r=e.findIndex(n=>!te(n.status));return r>=0?r:Math.max(e.length-1,0)}function Bt(e){const r=String(e||"").toUpperCase();return r==="SUCCESS"?"finish":r==="FAILED"||r==="DEGRADED"?"error":r==="RUNNING"?"process":"wait"}function Vt(){return[{stepName:"自然语言路由",toolCode:"intent.route"},{stepName:"工具编排执行",toolCode:"mcp.tool.invoke"},{stepName:"报告生成",toolCode:"report.generate"}]}function Lt(e){return e==="comment_risk"?"店铺差评风险专项分析":e==="product_optimization"?"店铺低点击商品优化专项":e==="ad_anomaly"?"店铺投放异常专项检查":e==="daily_review"?"店铺每日经营复盘":""}function de(e){return e==null||Number.isNaN(Number(e))?"-":`${Number(e).toFixed(1)}%`}function ee(e){return!!(e&&e>=G&&e<=X)}function ue(e){return e instanceof Error?e.message:String(e)}et.createRoot(document.getElementById("root")).render(t.jsx(tt.StrictMode,{children:t.jsx(rt,{locale:nt,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:t.jsx(wt,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/assets/workbench-EHQw9Qy4.js b/shopops-admin/src/main/resources/static/admin/assets/workbench-EHQw9Qy4.js deleted file mode 100644 index 8af9e29..0000000 --- a/shopops-admin/src/main/resources/static/admin/assets/workbench-EHQw9Qy4.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,I as pe,_ as he,j as e,L as P,T as fe,b as je,w as Ie,c as M,E as z,A as ge,S as C,d as I,f as $,g as h,h as y,F as ye,B as g,l as Ce,q as K,e as ve,y as H,v as be,o as A,p as ke,s as we,G as Re,D as f,R as Se,a as Te,C as Ae,z as Ne}from"./styles-DzUSPC-6.js";import{i as De}from"./index-ClPwX7rX.js";import{F as T,a as B}from"./Table-BPnpTtJN.js";import{R as Me}from"./ThunderboltOutlined-PNUVdg_J.js";import{R as Z}from"./PlayCircleOutlined-BPgeLWF7.js";import{L as G}from"./index-Bqcl2s-J.js";import{S as $e}from"./index-DDCHfcf5.js";import{S as E}from"./index-CMASMmum.js";import{R as Ee}from"./FileTextOutlined-BfDjXTAB.js";import{R as Oe}from"./ApiOutlined-BWwueYmU.js";var ze={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm-600-80h56c4.4 0 8-3.6 8-8V560c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V384c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v320c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V462c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v242c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V304c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v400c0 4.4 3.6 8 8 8z"}}]},name:"bar-chart",theme:"outlined"},_e=function(s,n){return o.createElement(pe,he({},s,{ref:n,icon:ze}))},Fe=o.forwardRef(_e);function Le({metrics:t}){const s=o.useRef(null);return o.useEffect(()=>{if(!s.current)return;const n=De(s.current),i={tooltip:{trigger:"axis"},grid:{left:36,right:16,top:28,bottom:28},xAxis:{type:"category",data:["GMV","退款率","风险评价","商品候选","广告ROI"],axisTick:{show:!1}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#edf1f7"}}},series:[{type:"bar",data:[O(t.gmv),Ve(t.refundRate),O(t.negativeCount),O(t.candidateCount),O(t.roi)],itemStyle:{color:c=>["#1677ff","#faad14","#f5222d","#13c2c2","#52c41a"][c.dataIndex]},barMaxWidth:34}]};n.setOption(i);const l=()=>n.resize();return window.addEventListener("resize",l),()=>{window.removeEventListener("resize",l),n.dispose()}},[t]),e.jsx("div",{className:"metrics-chart",ref:s})}function O(t){const s=Number(t);return Number.isFinite(s)?s:0}function Ve(t){const s=Number(t);return Number.isFinite(s)?Number((s*100).toFixed(2)):0}const{Header:qe,Content:Be}=P,{Text:Ge,Title:Ue,Paragraph:Pe}=fe,ee="2018-08-07",Ke="基于 Olist 真实订单和评价数据,生成 2018-08-07 店铺运营日报,重点分析 GMV、退款风险、差评原因和商品优化建议。",te=[{title:"经营日报",prompt:"生成今天店铺运营日报,给出 GMV、退款、差评和商品建议。"},{title:"差评专项",prompt:"分析最近差评原因,找出高风险评价和需要优先处理的问题。"},{title:"商品优化",prompt:"找出低点击商品并给出标题、库存和运营优化建议。"},{title:"投放异常",prompt:"检查高消耗低转化投放计划,输出异常原因和调整建议。"}];function He(){var X;const t=je(),[s]=T.useForm(),[n,i]=o.useState({tenantId:t.tenantId||"1",shopId:t.shopId||"1",userId:t.userId||"1",roles:t.roles||"ADMIN,OPERATOR"}),[l,c]=o.useState("准备接收自然语言运营任务。"),[m,x]=o.useState("默认业务数据"),[p,b]=o.useState(!1),[re,_]=o.useState(!1),[N,W]=o.useState(null),[d,F]=o.useState(null),[k,oe]=o.useState([]),[u,L]=o.useState(null),[ie,ce]=o.useState([]),D=o.useRef(null),j=(d==null?void 0:d.taskId)||((X=N==null?void 0:N.task)==null?void 0:X.taskId)||"",Y=(d==null?void 0:d.reportId)||(u==null?void 0:u.reportId)||"",V=o.useMemo(()=>Ie(u==null?void 0:u.evidence),[u]),q=o.useMemo(()=>Je(k),[k]),w=o.useMemo(()=>Qe(q,V.dataSources),[q,V.dataSources]),R=o.useCallback(async()=>{try{const a=await M("/api/admin/agent/tasks?pageNum=1&pageSize=5",n);ce(a.list||[])}catch(a){console.warn(a)}},[n]),J=o.useCallback(async a=>{const r=await M(`/api/agent/tasks/${encodeURIComponent(a)}/steps`,n);return oe(r||[]),r||[]},[n]),Q=o.useCallback(async a=>{const r=await M(`/api/reports/${encodeURIComponent(a)}`,n);return L(r),r},[n]),S=o.useCallback(async a=>{const r=await M(`/api/agent/tasks/${encodeURIComponent(a)}`,n);return F(r),await J(a),r.reportId&&await Q(r.reportId),z(r.status)&&(_(!1),await R()),r},[n,R,Q,J]),v=o.useCallback(()=>{D.current&&(window.clearInterval(D.current),D.current=null),_(!1)},[]),le=o.useCallback(a=>{v(),_(!0),D.current=window.setInterval(async()=>{try{const r=await S(a);z(r.status)&&v()}catch(r){v(),c(`结果追踪中断:${U(r)}`)}},2e3)},[S,v]);o.useEffect(()=>(s.setFieldsValue({userInput:te[0].prompt,startDate:ae(),endDate:ae()}),R(),v),[s,R,v]);async function de(a){b(!0),c("Agent 正在理解诉求并创建任务。");try{const r=await ke("/api/agent/tasks/natural-language",{userInput:a.userInput,dateRange:{start:a.startDate,end:a.endDate}},n);W(r),F(r.task),L(null),c(`已路由到 ${r.taskType}:${r.routedReason||"规则路由完成"}`);const xe=await S(r.task.taskId);z(xe.status)||le(r.task.taskId),await R()}catch(r){c(`任务创建失败:${U(r)}`),we.error(U(r))}finally{b(!1)}}function ue(){s.setFieldsValue({startDate:ee,endDate:ee,userInput:Ke}),x("Olist 真实数据演示"),c("已切换到 Olist 演示日期 2018-08-07。默认 Connector 会读取 Olist 订单、评价和商品候选数据。")}function me(a){F(a),W(null),L(null),a.taskId&&S(a.taskId)}return e.jsxs(P,{className:"app-shell",children:[e.jsx(ge,{active:"workbench"}),e.jsxs(P,{children:[e.jsxs(qe,{className:"topbar",children:[e.jsxs("div",{children:[e.jsx(Ue,{level:3,children:"Agent 工作台"}),e.jsx(Ge,{type:"secondary",children:"用自然语言发起日常运营任务,追踪工具编排、量化结果、报告与审计链路。"})]}),e.jsxs(C,{wrap:!0,children:[e.jsx(I,{addonBefore:"租户",value:n.tenantId,onChange:a=>i({...n,tenantId:a.target.value})}),e.jsx(I,{addonBefore:"店铺",value:n.shopId,onChange:a=>i({...n,shopId:a.target.value})}),e.jsx(I,{addonBefore:"用户",value:n.userId,onChange:a=>i({...n,userId:a.target.value})}),e.jsx(I,{addonBefore:"角色",value:n.roles,onChange:a=>i({...n,roles:a.target.value})})]})]}),e.jsx(Be,{className:"content",children:e.jsxs($,{gutter:[16,16],children:[e.jsx(h,{xs:24,xl:10,children:e.jsxs(C,{direction:"vertical",size:16,className:"full",children:[e.jsx(y,{title:"一句话发起任务",extra:e.jsx(K,{color:"blue",children:m}),children:e.jsxs(T,{form:s,layout:"vertical",onFinish:de,children:[e.jsx(T.Item,{name:"userInput",label:"自然语言任务",rules:[{required:!0,message:"请输入运营任务"}],children:e.jsx(I.TextArea,{rows:6,placeholder:"例如:生成今天店铺运营日报"})}),e.jsxs($,{gutter:10,children:[e.jsx(h,{span:12,children:e.jsx(T.Item,{name:"startDate",label:"开始日期",rules:[{required:!0}],children:e.jsx(I,{type:"date"})})}),e.jsx(h,{span:12,children:e.jsx(T.Item,{name:"endDate",label:"结束日期",rules:[{required:!0}],children:e.jsx(I,{type:"date"})})})]}),e.jsxs(ye,{justify:"space-between",gap:8,wrap:"wrap",children:[e.jsx(g,{id:"useOlistDemo",icon:e.jsx(Me,{}),onClick:ue,children:"Olist 演示数据"}),e.jsxs(C,{children:[e.jsx(g,{icon:e.jsx(Ce,{}),disabled:!j,loading:re,onClick:()=>j&&S(j),children:"刷新结果"}),e.jsx(g,{type:"primary",htmlType:"submit",icon:e.jsx(Z,{}),loading:p,children:"启动 Agent"})]})]})]})}),e.jsx(y,{title:"快捷任务",children:e.jsx($,{gutter:[8,8],children:te.map(a=>e.jsx(h,{span:12,children:e.jsxs(g,{block:!0,className:"quick-button",onClick:()=>s.setFieldsValue({userInput:a.prompt}),children:[e.jsx("strong",{children:a.title}),e.jsx("span",{children:a.prompt})]})},a.title))})}),e.jsx(y,{title:"最近任务",children:e.jsx(G,{dataSource:ie,locale:{emptyText:"暂无最近任务"},renderItem:a=>e.jsxs(G.Item,{className:"clickable",onClick:()=>me(a),children:[e.jsx(G.Item.Meta,{title:a.taskNo||a.taskId,description:a.resultSummary||a.userInput||a.taskType}),e.jsx(ne,{status:a.status})]})})})]})}),e.jsx(h,{xs:24,xl:14,children:e.jsxs(C,{direction:"vertical",size:16,className:"full",children:[e.jsx(ve,{type:"info",showIcon:!0,message:l}),e.jsx(We,{understanding:N,task:d,report:u,evidence:V}),e.jsx(y,{title:"Agent 执行步骤",extra:e.jsx(ne,{status:d==null?void 0:d.status}),children:e.jsx($e,{direction:"vertical",size:"small",current:Ze(k),items:(k.length?k:tt()).map(a=>({title:a.stepName||"等待执行",description:a.toolCode||"Agent 创建任务后会展示工具调用过程",status:et(a.status)}))})}),e.jsxs(y,{title:"量化结果",extra:e.jsx(Fe,{}),children:[e.jsxs($,{gutter:[12,12],children:[e.jsx(h,{xs:12,md:6,children:e.jsx(E,{title:"GMV",value:H(w.gmv)})}),e.jsx(h,{xs:12,md:6,children:e.jsx(E,{title:"退款率",value:be(w.refundRate)})}),e.jsx(h,{xs:12,md:6,children:e.jsx(E,{title:"风险评价",value:A(w.negativeCount)})}),e.jsx(h,{xs:12,md:6,children:e.jsx(E,{title:"商品候选",value:A(w.candidateCount)})})]}),e.jsx(Le,{metrics:w}),e.jsx(Ye,{outputs:q})]}),e.jsx(y,{title:"最终报告与建议",extra:e.jsxs(C,{children:[e.jsx(g,{href:j?`/admin/tasks.html?taskId=${j}`:"/admin/tasks.html",icon:e.jsx(Z,{}),children:"任务"}),e.jsx(g,{href:Y?`/admin/reports.html?reportId=${Y}`:"/admin/reports.html",icon:e.jsx(Ee,{}),children:"报告"}),e.jsx(g,{href:j?`/admin/audit.html?source=TASK&taskId=${j}`:"/admin/audit.html",icon:e.jsx(Oe,{}),children:"审计"})]}),children:e.jsx(Pe,{className:"markdown-preview",children:(u==null?void 0:u.markdown)||(d==null?void 0:d.resultSummary)||"任务完成后会展示 Markdown 报告摘要和运营建议。"})})]})})]})})]})]})}function We({understanding:t,task:s,report:n,evidence:i}){const l=Xe(i.dataSources);return e.jsx(y,{title:"Agent 理解结果",children:e.jsxs(f,{size:"small",column:{xs:1,md:2},bordered:!0,children:[e.jsx(f.Item,{label:"意图",children:(t==null?void 0:t.intentLabel)||st(i.intent)||(t==null?void 0:t.intent)||"-"}),e.jsx(f.Item,{label:"置信度",children:t?`${(t.confidence*100).toFixed(0)}%`:"-"}),e.jsx(f.Item,{label:"任务",children:(s==null?void 0:s.taskNo)||(s==null?void 0:s.taskId)||"-"}),e.jsx(f.Item,{label:"报告",children:(n==null?void 0:n.title)||(n==null?void 0:n.reportId)||"-"}),e.jsx(f.Item,{label:"关注点",span:2,children:e.jsx(se,{values:t==null?void 0:t.focusAreas,fallback:"默认经营复盘"})}),e.jsx(f.Item,{label:"数据来源",span:2,children:l}),e.jsx(f.Item,{label:"建议动作",span:2,children:e.jsx(se,{values:t==null?void 0:t.recommendedActions,fallback:"等待 Agent 输出"})})]})})}function Ye({outputs:t}){const s=t["comment.query_negative"]||{},n=t["product.query_candidates"]||{},i=t["ad.query_performance"]||{},l=Array.isArray(s.riskComments)?s.riskComments.slice(0,3):[],c=Array.isArray(n.products)?n.products.slice(0,5):[],m=Array.isArray(i.campaigns)?i.campaigns.slice(0,5):[];return e.jsxs(C,{direction:"vertical",size:14,className:"full result-tables",children:[l.length>0&&e.jsx(B,{size:"small",pagination:!1,title:()=>"差评风险样本",dataSource:l,rowKey:(x,p)=>`comment-${p}`,columns:[{title:"商品",dataIndex:"productName"},{title:"星级",dataIndex:"star",width:80},{title:"内容",dataIndex:"content"}]}),c.length>0&&e.jsx(B,{size:"small",pagination:!1,title:()=>"商品优化候选",dataSource:c,rowKey:(x,p)=>`product-${p}`,columns:[{title:"商品",dataIndex:"productName"},{title:"评分",dataIndex:"score",width:80},{title:"库存",dataIndex:"stock",width:80},{title:"原因",dataIndex:"reason"}]}),m.length>0&&e.jsx(B,{size:"small",pagination:!1,title:()=>"投放计划表现",dataSource:m,rowKey:(x,p)=>`campaign-${p}`,columns:[{title:"计划",dataIndex:"campaignName"},{title:"消耗",dataIndex:"spend",render:H},{title:"ROI",dataIndex:"roi"}]})]})}function se({values:t,fallback:s}){const n=t&&t.length?t:[s];return e.jsx(C,{wrap:!0,children:n.map(i=>e.jsx(K,{children:i},i))})}function ne({status:t}){const s=String(t||"-").toUpperCase(),n=s==="SUCCESS"?"success":s==="FAILED"||s==="DEGRADED"?"error":s==="-"?"default":"processing";return e.jsx(K,{color:n,children:s})}function Je(t){return t.reduce((s,n)=>(n.toolCode&&(s[n.toolCode]=Re(n.output)),s),{})}function Qe(t,s){var m,x,p,b;const n=t["order.query_summary"]||((m=s==null?void 0:s.orderSummary)==null?void 0:m.metrics)||{},i=t["comment.query_negative"]||((x=s==null?void 0:s.negativeComments)==null?void 0:x.metrics)||{},l=t["product.query_candidates"]||((p=s==null?void 0:s.productCandidates)==null?void 0:p.metrics)||{},c=t["ad.query_performance"]||((b=s==null?void 0:s.adPerformance)==null?void 0:b.metrics)||{};return{gmv:n.gmv,refundRate:n.refundRate,negativeCount:i.negativeCount,candidateCount:l.candidateCount,roi:c.roi}}function Xe(t){var l,c,m,x;if(!t)return"暂无数据来源快照";const s=t.orderSummary||{},n=t.negativeComments||{},i=t.productCandidates||{};return[`${s.connectorCode||"order.unknown"}:GMV ${H((l=s.metrics)==null?void 0:l.gmv)},订单 ${A((c=s.metrics)==null?void 0:c.orderCount)}`,`${n.connectorCode||"comment.unknown"}:风险评价 ${A((m=n.metrics)==null?void 0:m.negativeCount)}`,`${i.connectorCode||"product.unknown"}:商品候选 ${A((x=i.metrics)==null?void 0:x.candidateCount)}`].join(";")}function Ze(t){const s=t.findIndex(n=>!z(n.status));return s>=0?s:Math.max(t.length-1,0)}function et(t){const s=String(t||"").toUpperCase();return s==="SUCCESS"?"finish":s==="FAILED"||s==="DEGRADED"?"error":s==="RUNNING"?"process":"wait"}function tt(){return[{stepName:"自然语言路由",toolCode:"intent.route"},{stepName:"工具编排执行",toolCode:"mcp.tool.invoke"},{stepName:"报告生成",toolCode:"report.generate"}]}function st(t){return t==="comment_risk"?"店铺差评风险专项分析":t==="product_optimization"?"店铺低点击商品优化专项":t==="ad_anomaly"?"店铺投放异常专项检查":t==="daily_review"?"店铺每日经营复盘":""}function ae(){return new Date().toISOString().slice(0,10)}function U(t){return t instanceof Error?t.message:String(t)}Se.createRoot(document.getElementById("root")).render(e.jsx(Te.StrictMode,{children:e.jsx(Ae,{locale:Ne,theme:{token:{colorPrimary:"#1677ff",borderRadius:6,fontFamily:'Inter, "Segoe UI", "Microsoft YaHei", Arial, sans-serif'}},children:e.jsx(He,{})})})); diff --git a/shopops-admin/src/main/resources/static/admin/audit.html b/shopops-admin/src/main/resources/static/admin/audit.html index 12e601c..ce82963 100644 --- a/shopops-admin/src/main/resources/static/admin/audit.html +++ b/shopops-admin/src/main/resources/static/admin/audit.html @@ -8,16 +8,16 @@ content="React, TypeScript, Axios, ECharts, Ant Design, Audit center" /> ShopOps 审计中心 - - + + - - - - - - - + + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/auth.html b/shopops-admin/src/main/resources/static/admin/auth.html index 112b38a..7e29728 100644 --- a/shopops-admin/src/main/resources/static/admin/auth.html +++ b/shopops-admin/src/main/resources/static/admin/auth.html @@ -5,11 +5,11 @@ ShopOps 认证中心 - - - - - + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/connectors.html b/shopops-admin/src/main/resources/static/admin/connectors.html index 4d53f63..59bf3df 100644 --- a/shopops-admin/src/main/resources/static/admin/connectors.html +++ b/shopops-admin/src/main/resources/static/admin/connectors.html @@ -5,14 +5,14 @@ ShopOps 数据接入中心 - - - - - - - - + + + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/dashboard.html b/shopops-admin/src/main/resources/static/admin/dashboard.html index 199a667..73c93e9 100644 --- a/shopops-admin/src/main/resources/static/admin/dashboard.html +++ b/shopops-admin/src/main/resources/static/admin/dashboard.html @@ -8,17 +8,17 @@ content="React, TypeScript, Axios, ECharts, Ant Design, Dashboard overview" /> ShopOps 管理总览 - - + + - - - - - - - - + + + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/prompts.html b/shopops-admin/src/main/resources/static/admin/prompts.html index d398861..539213d 100644 --- a/shopops-admin/src/main/resources/static/admin/prompts.html +++ b/shopops-admin/src/main/resources/static/admin/prompts.html @@ -5,16 +5,16 @@ ShopOps 提示词与模型网关 - - - - - - - - - - + + + + + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/reports.html b/shopops-admin/src/main/resources/static/admin/reports.html index f9c6ffe..bd4b748 100644 --- a/shopops-admin/src/main/resources/static/admin/reports.html +++ b/shopops-admin/src/main/resources/static/admin/reports.html @@ -8,15 +8,15 @@ content="React, TypeScript, Axios, ECharts, Ant Design, Agent reports" /> ShopOps 报告中心 - - + + - - - - - - + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/tasks.html b/shopops-admin/src/main/resources/static/admin/tasks.html index 5a68be1..41cd7c8 100644 --- a/shopops-admin/src/main/resources/static/admin/tasks.html +++ b/shopops-admin/src/main/resources/static/admin/tasks.html @@ -8,17 +8,17 @@ content="React, TypeScript, Axios, ECharts, Ant Design, Agent task queue" /> ShopOps 任务队列 - - + + - - - - - - - - + + + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/tools.html b/shopops-admin/src/main/resources/static/admin/tools.html index d34cb24..ea0ddbd 100644 --- a/shopops-admin/src/main/resources/static/admin/tools.html +++ b/shopops-admin/src/main/resources/static/admin/tools.html @@ -8,16 +8,16 @@ content="React, TypeScript, Axios, ECharts, Ant Design, MCP tool logs" /> ShopOps 工具日志 - - + + - - - - - - - + + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/users.html b/shopops-admin/src/main/resources/static/admin/users.html index da83561..8778c23 100644 --- a/shopops-admin/src/main/resources/static/admin/users.html +++ b/shopops-admin/src/main/resources/static/admin/users.html @@ -5,12 +5,12 @@ ShopOps 组织中心 - - - - - - + + + + + +
diff --git a/shopops-admin/src/main/resources/static/admin/workbench.html b/shopops-admin/src/main/resources/static/admin/workbench.html index 4ba8109..0243294 100644 --- a/shopops-admin/src/main/resources/static/admin/workbench.html +++ b/shopops-admin/src/main/resources/static/admin/workbench.html @@ -8,18 +8,18 @@ content="React, TypeScript, Axios, ECharts, Ant Design, Olist demo, natural language Agent workbench" /> ShopOps Agent 工作台 - - + + - - - - - - - - - + + + + + + + + +
diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AdminWorkbenchStaticPageIntegrationTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AdminWorkbenchStaticPageIntegrationTest.java index 26cc294..3ac08b9 100644 --- a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AdminWorkbenchStaticPageIntegrationTest.java +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AdminWorkbenchStaticPageIntegrationTest.java @@ -53,6 +53,7 @@ void shouldServeReactAdminWorkbenchStaticPage() { .contains("/api/agent/tasks/natural-language") .contains("/api/agent/tasks/") .contains("/api/admin/agent/tasks?pageNum=1&pageSize=5") + .contains("/api/admin/evaluation/agent-natural-language-batch") .contains("/api/reports/") .contains("/admin/tasks.html?taskId=") .contains("shopops.auth.token") @@ -68,7 +69,10 @@ void shouldServeReactAdminWorkbenchStaticPage() { .contains("natural-language") .contains("orderSummary") .contains("negativeComments") - .contains("productCandidates"); + .contains("productCandidates") + .contains("/api/admin/agent/tasks/") + .contains("agent.repair") + .contains("agent.verifier.retry"); } @Test diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AgentNaturalLanguageTaskIntegrationTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AgentNaturalLanguageTaskIntegrationTest.java index 6c3c829..5d52ada 100644 --- a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AgentNaturalLanguageTaskIntegrationTest.java +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/AgentNaturalLanguageTaskIntegrationTest.java @@ -60,6 +60,13 @@ void shouldClassifySpecializedNaturalLanguageIntent() { .containsEntry("taskType", "daily_review"); assertThat(result.get("intentLabel")).isNotNull(); assertThat((List) result.get("recommendedActions")).isNotEmpty(); + assertThat(castMap(result.get("taskSpec"))) + .containsEntry("intent", "comment_risk") + .containsEntry("outputFormat", "structured_markdown_report"); + Map plan = castMap(result.get("plan")); + assertThat(plan.get("rationale").toString()).contains("差评"); + assertThat((List>) plan.get("steps")) + .allMatch(step -> step.get("reason") != null); Map taskResult = castMap(result.get("task")); Integer taskId = ((Number) taskResult.get("taskId")).intValue(); @@ -77,6 +84,14 @@ void shouldClassifySpecializedNaturalLanguageIntent() { assertThat(report.get("summary").toString()).contains("差评风险专项"); assertThat(castMap(report.get("evidence"))) .containsEntry("intent", "comment_risk"); + + Map detail = dataOf(get("/api/admin/agent/tasks/" + taskId + "/detail")); + List> spans = (List>) detail.get("spans"); + assertThat(spans) + .anyMatch(span -> "agent.planner".equals(span.get("spanName")) + && span.get("outputSummary").toString().contains("\"rationale\"")) + .anyMatch(span -> "agent.verifier".equals(span.get("spanName")) + && span.get("outputSummary").toString().contains("\"score\":1.0")); } @Test @@ -117,6 +132,22 @@ void shouldGenerateOlistDailyReviewFromDefaultDemoConnectors() { assertThat(productMetrics).containsEntry("candidateCount", 10); } + @Test + @SuppressWarnings("unchecked") + void shouldGenerateDifferentOlistDailyReviewsForDifferentCoveredDates() { + Map firstDayMetrics = olistOrderMetrics("2018-08-01"); + Map lastDayMetrics = olistOrderMetrics("2018-08-07"); + + assertThat(firstDayMetrics) + .containsEntry("gmv", 48850.81) + .containsEntry("orderCount", 311); + assertThat(lastDayMetrics) + .containsEntry("gmv", 62057.77) + .containsEntry("orderCount", 370); + assertThat(firstDayMetrics.get("gmv")).isNotEqualTo(lastDayMetrics.get("gmv")); + assertThat(firstDayMetrics.get("orderCount")).isNotEqualTo(lastDayMetrics.get("orderCount")); + } + @Test void shouldRoutePortfolioDemoPrompts() { assertDemoPromptIntent("帮我生成今天店铺运营日报,汇总订单、评价、商品、投放和平台指标。", "daily_review"); @@ -138,4 +169,26 @@ private void assertDemoPromptIntent(String userInput, String expectedIntent) { .containsEntry("intent", expectedIntent) .containsEntry("taskType", "daily_review"); } + + @SuppressWarnings("unchecked") + private Map olistOrderMetrics(String businessDate) { + Map result = dataOf(post( + "/api/agent/tasks/natural-language", + Map.of( + "userInput", "Generate an Olist daily operations report for " + businessDate + ".", + "dateRange", Map.of("start", businessDate, "end", businessDate) + ) + )); + + Map taskResult = castMap(result.get("task")); + Integer taskId = ((Number) taskResult.get("taskId")).intValue(); + Map task = dataOf(get("/api/agent/tasks/" + taskId)); + Integer reportId = ((Number) task.get("reportId")).intValue(); + Map report = dataOf(get("/api/reports/" + reportId)); + Map evidence = castMap(report.get("evidence")); + Map dataSources = castMap(evidence.get("dataSources")); + Map orderSource = castMap(dataSources.get("orderSummary")); + assertThat(orderSource).containsEntry("connectorCode", "file.order-summary"); + return castMap(orderSource.get("metrics")); + } } diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/BasicVerifierServiceTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/BasicVerifierServiceTest.java new file mode 100644 index 0000000..26c90fe --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/BasicVerifierServiceTest.java @@ -0,0 +1,85 @@ +package com.sirithree.shopops.admin.agent.service.impl; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.sirithree.shopops.admin.agent.domain.AgentExecutionResult; +import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentTaskCreateParam; +import com.sirithree.shopops.admin.agent.domain.AgentTaskSpec; +import com.sirithree.shopops.admin.agent.domain.AgentVerificationResult; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeResult; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class BasicVerifierServiceTest { + private final BasicVerifierService verifier = new BasicVerifierService(); + + @Test + void shouldPassWhenAllRequiredEvidenceIsAvailable() { + AgentVerificationResult result = verifier.verify(context(true), executionResult(true)); + + assertThat(result.isPassed()).isTrue(); + assertThat(result.getScore()).isEqualTo(1.0); + assertThat(result.getChecks()).allMatch(check -> "PASS".equals(check.getStatus())); + assertThat(result.isRepairable()).isFalse(); + assertThat(result.getRepairToolCodes()).isEmpty(); + } + + @Test + void shouldWarnWhenOptionalDegradedEvidenceIsMissing() { + AgentVerificationResult result = verifier.verify(context(true), executionResult(false)); + + assertThat(result.isPassed()).isTrue(); + assertThat(result.getScore()).isLessThan(1.0); + assertThat(result.isRepairable()).isTrue(); + assertThat(result.getMissingEvidence()).containsExactly("product_candidates"); + assertThat(result.getRepairToolCodes()).containsExactly("product.query_candidates"); + assertThat(result.getChecks()) + .anyMatch(check -> "evidence_product_candidates".equals(check.getCode()) && "WARN".equals(check.getStatus())); + } + + @Test + void shouldFailWhenRequiredEvidenceCannotDegrade() { + AgentVerificationResult result = verifier.verify(context(false), executionResult(false)); + + assertThat(result.isPassed()).isFalse(); + assertThat(result.isRepairable()).isTrue(); + assertThat(result.getRepairToolCodes()).containsExactly("product.query_candidates"); + assertThat(result.getChecks()) + .anyMatch(check -> "evidence_product_candidates".equals(check.getCode()) && "FAIL".equals(check.getStatus())); + } + + private AgentTaskContext context(boolean allowDegradedEvidence) { + AgentTaskSpec spec = new AgentTaskSpec(); + spec.setIntent("product_optimization"); + spec.setRequiredEvidence(List.of("order_summary", "product_candidates", "negative_comments")); + spec.setConstraints(Map.of("allowDegradedEvidence", allowDegradedEvidence)); + + AgentTaskCreateParam param = new AgentTaskCreateParam(); + param.setTaskType("daily_review"); + param.setIntent("product_optimization"); + param.setTaskSpec(spec); + + AgentTaskContext context = new AgentTaskContext(); + context.setCreateParam(param); + return context; + } + + private AgentExecutionResult executionResult(boolean includeProducts) { + Map steps = new LinkedHashMap<>(); + steps.put("order.query_summary", ToolInvokeResult.success(Map.of("orderCount", 10), null)); + if (includeProducts) { + steps.put("product.query_candidates", ToolInvokeResult.success(Map.of("candidateCount", 2), null)); + } + steps.put("comment.query_negative", ToolInvokeResult.success(Map.of("negativeCount", 1), null)); + steps.put("report.generate_daily_review", ToolInvokeResult.success(Map.of("status", "generated"), null)); + + AgentExecutionResult result = new AgentExecutionResult(); + result.setSuccess(true); + result.setReportId(90001L); + result.setStepResults(steps); + return result; + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/DefaultAgentEngineServiceTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/DefaultAgentEngineServiceTest.java new file mode 100644 index 0000000..cbf865a --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/DefaultAgentEngineServiceTest.java @@ -0,0 +1,131 @@ +package com.sirithree.shopops.admin.agent.service.impl; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sirithree.shopops.admin.agent.domain.AgentExecutionResult; +import com.sirithree.shopops.admin.agent.domain.AgentPlan; +import com.sirithree.shopops.admin.agent.domain.AgentPlanStep; +import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentTaskCreateParam; +import com.sirithree.shopops.admin.agent.domain.AgentVerificationResult; +import com.sirithree.shopops.admin.agent.service.AgentExecutorService; +import com.sirithree.shopops.admin.agent.service.PlanValidator; +import com.sirithree.shopops.admin.agent.service.PlannerService; +import com.sirithree.shopops.admin.agent.service.VerifierService; +import com.sirithree.shopops.admin.audit.domain.TraceSpanCreateCommand; +import com.sirithree.shopops.admin.audit.service.TraceService; +import com.sirithree.shopops.admin.common.JacksonJsonSupport; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeResult; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +class DefaultAgentEngineServiceTest { + private final PlannerService plannerService = mock(PlannerService.class); + private final PlanValidator planValidator = mock(PlanValidator.class); + private final AgentExecutorService executorService = mock(AgentExecutorService.class); + private final VerifierService verifierService = mock(VerifierService.class); + private final TraceService traceService = mock(TraceService.class); + private final DefaultAgentEngineService engine = new DefaultAgentEngineService( + plannerService, + planValidator, + executorService, + verifierService, + traceService, + new JacksonJsonSupport(new ObjectMapper()) + ); + + @Test + void shouldRepairMissingEvidenceOnceAndVerifyAgain() { + AgentTaskContext context = context(); + AgentPlan initialPlan = plan( + new AgentPlanStep(1, "Query orders", "order.query_summary"), + new AgentPlanStep(2, "Generate report", "report.generate_daily_review") + ); + AgentExecutionResult initialResult = result(101L, Map.of( + "order.query_summary", ToolInvokeResult.success(Map.of("orderCount", 10), null), + "report.generate_daily_review", ToolInvokeResult.success(Map.of("status", "generated"), null) + )); + AgentExecutionResult repairedResult = result(102L, Map.of( + "order.query_summary", ToolInvokeResult.success(Map.of("orderCount", 10), null), + "product.query_candidates", ToolInvokeResult.success(Map.of("candidateCount", 3), null), + "report.generate_daily_review", ToolInvokeResult.success(Map.of("status", "regenerated"), null) + )); + + when(plannerService.createPlan(context)).thenReturn(initialPlan); + doNothing().when(planValidator).validate(context, initialPlan); + when(executorService.execute(context, initialPlan)).thenReturn(initialResult); + when(executorService.execute(eq(context), any(AgentPlan.class), eq(initialResult))).thenReturn(repairedResult); + when(verifierService.verify(context, initialResult)).thenReturn(repairableVerification()); + when(verifierService.verify(context, repairedResult)).thenReturn(passedVerification()); + when(traceService.startSpan(any(TraceSpanCreateCommand.class))).thenReturn("span-1", "span-2", "span-3", "span-4", "span-5"); + + AgentExecutionResult finalResult = engine.executeTask(context); + + assertThat(finalResult.getReportId()).isEqualTo(102L); + assertThat(finalResult.getVerification().isPassed()).isTrue(); + + ArgumentCaptor repairPlanCaptor = ArgumentCaptor.forClass(AgentPlan.class); + verify(executorService).execute(eq(context), repairPlanCaptor.capture(), eq(initialResult)); + assertThat(repairPlanCaptor.getValue().getSteps()) + .extracting(AgentPlanStep::getToolCode) + .containsExactly("product.query_candidates", "report.generate_daily_review"); + } + + private AgentTaskContext context() { + AgentTaskCreateParam param = new AgentTaskCreateParam(); + param.setTaskType("daily_review"); + param.setUserInput("Find low click products and generate a report"); + + AgentTaskContext context = new AgentTaskContext(); + context.setTenantId(1L); + context.setShopId(1L); + context.setUserId(1L); + context.setTaskId(10001L); + context.setTraceId("tr_test"); + context.setCreateParam(param); + return context; + } + + private AgentPlan plan(AgentPlanStep... steps) { + AgentPlan plan = new AgentPlan(); + plan.setTaskType("daily_review"); + plan.setSteps(List.of(steps)); + return plan; + } + + private AgentExecutionResult result(Long reportId, Map stepResults) { + AgentExecutionResult result = new AgentExecutionResult(); + result.setSuccess(true); + result.setDegraded(false); + result.setReportId(reportId); + result.setStepResults(new LinkedHashMap<>(stepResults)); + return result; + } + + private AgentVerificationResult repairableVerification() { + AgentVerificationResult verification = new AgentVerificationResult(); + verification.setPassed(false); + verification.setScore(0.75); + verification.setRepairable(true); + verification.setMissingEvidence(List.of("product_candidates")); + verification.setRepairToolCodes(List.of("product.query_candidates")); + return verification; + } + + private AgentVerificationResult passedVerification() { + AgentVerificationResult verification = new AgentVerificationResult(); + verification.setPassed(true); + verification.setScore(1.0); + return verification; + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/DefaultPlanValidatorTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/DefaultPlanValidatorTest.java new file mode 100644 index 0000000..70eaca2 --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/DefaultPlanValidatorTest.java @@ -0,0 +1,74 @@ +package com.sirithree.shopops.admin.agent.service.impl; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.sirithree.shopops.admin.agent.domain.AgentPlan; +import com.sirithree.shopops.admin.agent.domain.AgentPlanStep; +import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.tool.domain.McpToolDto; +import com.sirithree.shopops.admin.tool.service.McpToolService; +import java.util.List; +import org.junit.jupiter.api.Test; + +class DefaultPlanValidatorTest { + private final McpToolService toolService = mock(McpToolService.class); + private final DefaultPlanValidator validator = new DefaultPlanValidator(toolService); + + @Test + void shouldAcceptSequentialPlanEndingWithReport() { + when(toolService.getTool(anyLong(), anyString())).thenReturn(tool()); + + assertThatCode(() -> validator.validate(context(), plan( + new AgentPlanStep(1, "查询订单", "order.query_summary"), + new AgentPlanStep(2, "生成报告", "report.generate_daily_review") + ))).doesNotThrowAnyException(); + } + + @Test + void shouldRejectDuplicateOrOutOfOrderTools() { + when(toolService.getTool(anyLong(), anyString())).thenReturn(tool()); + + assertThatThrownBy(() -> validator.validate(context(), plan( + new AgentPlanStep(1, "查询订单", "order.query_summary"), + new AgentPlanStep(2, "重复查询", "order.query_summary"), + new AgentPlanStep(3, "生成报告", "report.generate_daily_review") + ))).hasMessageContaining("重复工具"); + + assertThatThrownBy(() -> validator.validate(context(), plan( + new AgentPlanStep(2, "查询订单", "order.query_summary"), + new AgentPlanStep(3, "生成报告", "report.generate_daily_review") + ))).hasMessageContaining("连续递增"); + } + + @Test + void shouldRejectReportToolBeforeFinalStep() { + when(toolService.getTool(anyLong(), anyString())).thenReturn(tool()); + + assertThatThrownBy(() -> validator.validate(context(), plan( + new AgentPlanStep(1, "生成报告", "report.generate_daily_review"), + new AgentPlanStep(2, "查询订单", "order.query_summary") + ))).hasMessageContaining("最后一步"); + } + + private AgentTaskContext context() { + AgentTaskContext context = new AgentTaskContext(); + context.setTenantId(1L); + return context; + } + + private AgentPlan plan(AgentPlanStep... steps) { + AgentPlan plan = new AgentPlan(); + plan.setTaskType("daily_review"); + plan.setSteps(List.of(steps)); + return plan; + } + + private McpToolDto tool() { + return new McpToolDto("test", "test", "test", "test", "LOW"); + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/RuleBasedAgentTaskInterpreterTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/RuleBasedAgentTaskInterpreterTest.java new file mode 100644 index 0000000..12affc5 --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/RuleBasedAgentTaskInterpreterTest.java @@ -0,0 +1,40 @@ +package com.sirithree.shopops.admin.agent.service.impl; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.sirithree.shopops.admin.agent.domain.AgentTaskInterpretation; +import com.sirithree.shopops.admin.agent.domain.DateRangeParam; +import org.junit.jupiter.api.Test; + +class RuleBasedAgentTaskInterpreterTest { + private final RuleBasedAgentTaskInterpreter interpreter = new RuleBasedAgentTaskInterpreter(); + + @Test + void shouldBuildDifferentTaskSpecsForSupportedIntents() { + AgentTaskInterpretation daily = interpreter.interpret("生成今天店铺运营日报", dateRange()); + AgentTaskInterpretation comments = interpreter.interpret("分析最近差评原因", dateRange()); + AgentTaskInterpretation products = interpreter.interpret("找出低点击商品并给优化建议", dateRange()); + + assertThat(daily.getTaskSpec().getIntent()).isEqualTo("daily_review"); + assertThat(daily.getTaskSpec().getRequiredEvidence()) + .containsExactly("order_summary", "negative_comments", "product_candidates", "ad_performance", "external_metrics"); + + assertThat(comments.getTaskSpec().getIntent()).isEqualTo("comment_risk"); + assertThat(comments.getTaskSpec().getRequiredEvidence()) + .containsExactly("order_summary", "negative_comments", "product_candidates"); + + assertThat(products.getTaskSpec().getIntent()).isEqualTo("product_optimization"); + assertThat(products.getTaskSpec().getRequiredEvidence()) + .containsExactly("order_summary", "product_candidates", "negative_comments"); + assertThat(products.getTaskSpec().getConstraints()) + .containsEntry("readOnlyAnalysis", true) + .containsEntry("requireTraceableEvidence", true); + } + + private DateRangeParam dateRange() { + DateRangeParam dateRange = new DateRangeParam(); + dateRange.setStart("2026-07-28"); + dateRange.setEnd("2026-07-28"); + return dateRange; + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerServiceTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerServiceTest.java index a38f2ae..b9824db 100644 --- a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerServiceTest.java +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/RulePlannerServiceTest.java @@ -6,6 +6,7 @@ import com.sirithree.shopops.admin.agent.domain.AgentPlan; import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; import com.sirithree.shopops.admin.agent.domain.AgentTaskCreateParam; +import com.sirithree.shopops.admin.agent.domain.AgentTaskSpec; import com.sirithree.shopops.admin.agent.domain.DateRangeParam; import com.sirithree.shopops.admin.model.config.ModelGatewayPlannerProperties; import com.sirithree.shopops.admin.model.domain.ModelCallLogDto; @@ -86,6 +87,27 @@ void shouldFallbackToRulePlanWhenModelPlanIsUnsafe() { "ad.query_performance", "report.query_external_metrics", "report.generate_daily_review"); } + @Test + void shouldPreviewDifferentExplainablePlansFromTaskSpec() { + RulePlannerService planner = new RulePlannerService(new ModelGatewayPlannerProperties(), new FakeModelGatewayService(""), new ObjectMapper()); + + AgentTaskSpec commentSpec = new AgentTaskSpec(); + commentSpec.setIntent("comment_risk"); + AgentPlan commentPlan = planner.previewPlan(commentSpec); + + AgentTaskSpec productSpec = new AgentTaskSpec(); + productSpec.setIntent("product_optimization"); + AgentPlan productPlan = planner.previewPlan(productSpec); + + assertThat(commentPlan.getRationale()).contains("差评"); + assertThat(commentPlan.getSteps()).extracting(step -> step.getToolCode()) + .containsExactly("order.query_summary", "comment.query_negative", "product.query_candidates", "report.generate_daily_review"); + assertThat(productPlan.getRationale()).contains("商品"); + assertThat(productPlan.getSteps()).extracting(step -> step.getToolCode()) + .containsExactly("order.query_summary", "product.query_candidates", "comment.query_negative", "report.generate_daily_review"); + assertThat(productPlan.getSteps()).allMatch(step -> step.getReason() != null && !step.getReason().isBlank()); + } + private AgentTaskContext context() { DateRangeParam dateRange = new DateRangeParam(); dateRange.setStart("2026-07-18"); diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/SequentialAgentExecutorServiceTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/SequentialAgentExecutorServiceTest.java new file mode 100644 index 0000000..672e732 --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/agent/service/impl/SequentialAgentExecutorServiceTest.java @@ -0,0 +1,110 @@ +package com.sirithree.shopops.admin.agent.service.impl; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.sirithree.shopops.admin.agent.domain.AgentExecutionResult; +import com.sirithree.shopops.admin.agent.domain.AgentPlan; +import com.sirithree.shopops.admin.agent.domain.AgentPlanStep; +import com.sirithree.shopops.admin.agent.domain.AgentTaskContext; +import com.sirithree.shopops.admin.agent.domain.AgentTaskCreateParam; +import com.sirithree.shopops.admin.agent.domain.DateRangeParam; +import com.sirithree.shopops.admin.agent.service.StepExecutionRecorder; +import com.sirithree.shopops.admin.report.domain.OperationReportDto; +import com.sirithree.shopops.admin.report.service.OperationReportService; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeResult; +import com.sirithree.shopops.admin.tool.service.ToolGatewayService; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +class SequentialAgentExecutorServiceTest { + private final ToolGatewayService toolGatewayService = mock(ToolGatewayService.class); + private final OperationReportService operationReportService = mock(OperationReportService.class); + private final StepExecutionRecorder stepExecutionRecorder = mock(StepExecutionRecorder.class); + private final SequentialAgentExecutorService executor = new SequentialAgentExecutorService( + toolGatewayService, + operationReportService, + stepExecutionRecorder + ); + + @Test + @SuppressWarnings("unchecked") + void shouldCarryPreviousSuccessfulEvidenceIntoRepairReport() { + AgentTaskContext context = context(); + AgentExecutionResult base = baseResult(); + AgentPlan repairPlan = plan( + new AgentPlanStep(3, "Repair product evidence", "product.query_candidates"), + new AgentPlanStep(4, "Regenerate report", "report.generate_daily_review") + ); + OperationReportDto report = new OperationReportDto(); + report.setReportId(90200L); + + when(stepExecutionRecorder.ensureStep(eq(context), any(AgentPlanStep.class))).thenReturn(3L, 4L); + when(toolGatewayService.invoke(any(), eq("product.query_candidates"), any())) + .thenReturn(ToolInvokeResult.success(Map.of("candidateCount", 3), null)); + when(toolGatewayService.invoke(any(), eq("report.generate_daily_review"), any())) + .thenReturn(ToolInvokeResult.success(Map.of("status", "regenerated"), null)); + when(operationReportService.createDailyReviewReport(eq(1L), eq(1L), eq(10001L), eq(1L), eq("tr_test"), any())) + .thenReturn(report); + + AgentExecutionResult result = executor.execute(context, repairPlan, base); + + assertThat(result.getReportId()).isEqualTo(90200L); + assertThat(result.getStepResults()).containsKeys("order.query_summary", "product.query_candidates", "report.generate_daily_review"); + + ArgumentCaptor reportInputCaptor = ArgumentCaptor.forClass(Object.class); + org.mockito.Mockito.verify(toolGatewayService) + .invoke(any(), eq("report.generate_daily_review"), reportInputCaptor.capture()); + Map reportInput = (Map) reportInputCaptor.getValue(); + assertThat(reportInput.get("orderSummary")).isEqualTo(Map.of("orderCount", 10)); + assertThat(reportInput.get("productCandidates")).isEqualTo(Map.of("candidateCount", 3)); + + ArgumentCaptor> reportDataCaptor = ArgumentCaptor.forClass(Map.class); + org.mockito.Mockito.verify(operationReportService) + .createDailyReviewReport(eq(1L), eq(1L), eq(10001L), eq(1L), eq("tr_test"), reportDataCaptor.capture()); + assertThat(reportDataCaptor.getValue()).containsEntry("status", "regenerated"); + } + + private AgentTaskContext context() { + AgentTaskCreateParam param = new AgentTaskCreateParam(); + param.setTaskType("daily_review"); + DateRangeParam dateRange = new DateRangeParam(); + dateRange.setStart("2026-07-22"); + dateRange.setEnd("2026-07-22"); + param.setDateRange(dateRange); + + AgentTaskContext context = new AgentTaskContext(); + context.setTenantId(1L); + context.setShopId(1L); + context.setUserId(1L); + context.setTaskId(10001L); + context.setTraceId("tr_test"); + context.setCreateParam(param); + return context; + } + + private AgentExecutionResult baseResult() { + Map steps = new LinkedHashMap<>(); + steps.put("order.query_summary", ToolInvokeResult.success(Map.of("orderCount", 10), null)); + steps.put("report.generate_daily_review", ToolInvokeResult.success(Map.of("status", "generated"), null)); + + AgentExecutionResult result = new AgentExecutionResult(); + result.setSuccess(true); + result.setReportId(90100L); + result.setStepResults(steps); + return result; + } + + private AgentPlan plan(AgentPlanStep... steps) { + AgentPlan plan = new AgentPlan(); + plan.setTaskType("daily_review"); + plan.setSteps(List.of(steps)); + return plan; + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepositoryTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepositoryTest.java index 5b9db42..c8e76f1 100644 --- a/shopops-admin/src/test/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepositoryTest.java +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/audit/service/impl/AdminAuditTimelineJdbcRepositoryTest.java @@ -49,7 +49,9 @@ void shouldPushTimelineFiltersAndPaginationIntoUnionSql() { assertThat(sql) .contains("UNION ALL") .contains("FROM auth_audit_event") + .contains("event_type LIKE 'ORG!_%' ESCAPE '!'") .contains("FROM agent_task_event") + .contains("WHEN JSON_VALID(event_data_json)") .contains("FROM tool_call_log") .contains("FROM approval_request") .contains("AND source = :source") diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/business/service/impl/JdbcBusinessFileConnectorPreferenceTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/business/service/impl/JdbcBusinessFileConnectorPreferenceTest.java new file mode 100644 index 0000000..fe8d730 --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/business/service/impl/JdbcBusinessFileConnectorPreferenceTest.java @@ -0,0 +1,77 @@ +package com.sirithree.shopops.admin.business.service.impl; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import com.sirithree.shopops.admin.business.support.BusinessFileSummaryReader; +import com.sirithree.shopops.admin.persistence.mapper.BusinessCommentMapper; +import com.sirithree.shopops.admin.persistence.mapper.BusinessOrderMapper; +import com.sirithree.shopops.admin.persistence.mapper.BusinessProductMapper; +import java.time.LocalDate; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.junit.jupiter.api.Test; + +class JdbcBusinessFileConnectorPreferenceTest { + private final LocalDate demoDate = LocalDate.parse("2018-08-07"); + + @Test + void jdbcOrderMetricsShouldPreferConfiguredFileSummary() { + BusinessOrderMapper mapper = mock(BusinessOrderMapper.class); + BusinessFileSummaryReader reader = mock(BusinessFileSummaryReader.class); + Map fileSummary = Map.of( + "connectorCode", "file.order-summary", + "gmv", 62057.77, + "orderCount", 370 + ); + when(reader.orderSummary(1L, 1L, demoDate, demoDate)).thenReturn(Optional.of(fileSummary)); + + Map result = new JdbcOrderMetricsService(mapper, reader) + .querySummary(1L, 1L, demoDate, demoDate); + + assertThat(result).containsEntry("connectorCode", "file.order-summary") + .containsEntry("orderCount", 370); + verifyNoInteractions(mapper); + } + + @Test + void jdbcCommentRiskShouldPreferConfiguredFileSummary() { + BusinessCommentMapper mapper = mock(BusinessCommentMapper.class); + BusinessFileSummaryReader reader = mock(BusinessFileSummaryReader.class); + Map fileSummary = Map.of( + "connectorCode", "file.negative-comments", + "negativeCount", 51, + "riskComments", List.of(Map.of("commentId", "review-1")) + ); + when(reader.negativeComments(1L, 1L, demoDate, demoDate, 3)).thenReturn(Optional.of(fileSummary)); + + Map result = new JdbcCommentRiskService(mapper, reader) + .queryNegativeComments(1L, 1L, demoDate, demoDate, 3); + + assertThat(result).containsEntry("connectorCode", "file.negative-comments") + .containsEntry("negativeCount", 51); + verifyNoInteractions(mapper); + } + + @Test + void jdbcProductOptimizationShouldPreferConfiguredFileSummary() { + BusinessProductMapper mapper = mock(BusinessProductMapper.class); + BusinessFileSummaryReader reader = mock(BusinessFileSummaryReader.class); + Map fileSummary = Map.of( + "connectorCode", "file.product-candidates", + "candidateCount", 10, + "products", List.of(Map.of("productName", "Furniture Bedroom / 4f18ca98")) + ); + when(reader.productCandidates(1L, 1L, demoDate, demoDate, 10)).thenReturn(Optional.of(fileSummary)); + + Map result = new JdbcProductOptimizationService(mapper, reader) + .queryCandidates(1L, 1L, demoDate, demoDate, 10); + + assertThat(result).containsEntry("connectorCode", "file.product-candidates") + .containsEntry("candidateCount", 10); + verifyNoInteractions(mapper); + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorStatusIntegrationTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorStatusIntegrationTest.java index a8d9fb7..24a42a7 100644 --- a/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorStatusIntegrationTest.java +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorStatusIntegrationTest.java @@ -27,7 +27,7 @@ class ConnectorStatusIntegrationTest { @Test @SuppressWarnings("unchecked") - void shouldListFileConnectorStatus() { + void shouldListConfiguredDemoFileConnectorStatus() { HttpHeaders headers = new HttpHeaders(); headers.set("X-Tenant-Id", "1"); headers.set("X-Shop-Id", "1"); @@ -45,27 +45,21 @@ void shouldListFileConnectorStatus() { assertThat(response.getBody()).isNotNull(); assertThat(response.getBody().get("code")).isEqualTo(200); List> data = (List>) response.getBody().get("data"); + assertThat(data) .hasSize(5) .extracting(item -> item.get("connectorCode")) .containsExactly("file.order-summary", "file.negative-comments", "file.product-candidates", "file.ad-performance", "file.external-reports"); - assertThat(data.subList(0, 3)) + assertThat(data) .allSatisfy(item -> { assertThat(item.get("status")).isEqualTo("UP"); assertThat(item.get("configured")).isEqualTo(true); assertThat(item.get("available")).isEqualTo(true); - assertThat(item.get("message")).isEqualTo("文件可用"); - assertThat(item.get("configuredPath")).asString().contains("docs", "demo-data", "olist"); - assertThat(item.get("lastCheckedAt")).isNotNull(); - }); - assertThat(data.subList(3, 5)) - .allSatisfy(item -> { - assertThat(item.get("status")).isEqualTo("NOT_CONFIGURED"); - assertThat(item.get("configured")).isEqualTo(false); - assertThat(item.get("available")).isEqualTo(false); - assertThat(item.get("message")).isEqualTo("未配置,将使用内存默认数据"); + assertThat(item.get("configuredPath")).asString().contains("docs", "demo-data"); assertThat(item.get("lastCheckedAt")).isNotNull(); }); + assertThat(data.subList(0, 3)) + .allSatisfy(item -> assertThat(item.get("configuredPath")).asString().contains("olist")); } } diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorSyncJobIntegrationTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorSyncJobIntegrationTest.java index f7d433c..aa4f19a 100644 --- a/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorSyncJobIntegrationTest.java +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/connector/ConnectorSyncJobIntegrationTest.java @@ -17,7 +17,10 @@ @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, - properties = "shopops.persistence=memory" + properties = { + "shopops.persistence=memory", + "shopops.connector.external-reports.file=" + } ) class ConnectorSyncJobIntegrationTest { private static final String UNCONFIGURED_CONNECTOR_CODE = "file.external-reports"; diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/evaluation/AgentEvaluationControllerIntegrationTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/evaluation/AgentEvaluationControllerIntegrationTest.java new file mode 100644 index 0000000..28e4301 --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/evaluation/AgentEvaluationControllerIntegrationTest.java @@ -0,0 +1,29 @@ +package com.sirithree.shopops.admin.agent; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + properties = "shopops.persistence=memory" +) +class AgentEvaluationControllerIntegrationTest extends AbstractAgentTaskFlowIntegrationTest { + @Test + void shouldReadStoredNaturalLanguageBatchSummary() { + Map result = dataOf(get("/api/admin/evaluation/agent-natural-language-batch")); + + assertThat(result) + .containsEntry("available", true) + .containsKey("summaryPath") + .containsKey("summary"); + + Map summary = castMap(result.get("summary")); + assertThat(summary) + .containsEntry("evaluationName", "shopops-agent-natural-language-batch-v1") + .containsEntry("caseCount", 280) + .containsEntry("toolInvocationCount", 1260); + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/McpToolCatalogIntegrationTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/McpToolCatalogIntegrationTest.java new file mode 100644 index 0000000..1c5dff0 --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/McpToolCatalogIntegrationTest.java @@ -0,0 +1,195 @@ +package com.sirithree.shopops.admin.tool; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipFile; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.test.annotation.DirtiesContext; + +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + properties = "shopops.persistence=memory" +) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +class McpToolCatalogIntegrationTest { + @LocalServerPort + private int port; + + @Autowired + private TestRestTemplate restTemplate; + + @Test + @SuppressWarnings("unchecked") + void shouldExposeEighteenPortfolioMcpTools() { + List> tools = (List>) dataOf(get("/api/tools", adminHeaders())); + + assertThat(tools).hasSize(18); + assertThat(tools) + .extracting(tool -> tool.get("toolCode")) + .containsExactly( + "order.query_summary", + "order.query_detail", + "order.query_refund_risk", + "order.refund_execute", + "comment.query_negative", + "comment.analyze_sentiment", + "comment.create_reply_draft", + "product.query_candidates", + "product.query_low_click", + "product.optimize_title", + "product.update_title", + "ad.query_performance", + "ad.query_low_roi", + "ad.suggest_budget", + "report.query_external_metrics", + "report.generate_daily_review", + "report.export_excel", + "feishu.sync_report" + ); + + assertHighRiskApprovalTool(tools, "order.refund_execute"); + assertHighRiskApprovalTool(tools, "product.update_title"); + assertHighRiskApprovalTool(tools, "ad.suggest_budget"); + } + + @Test + @SuppressWarnings("unchecked") + void shouldInvokeNewAnalysisAndCollaborationTools() throws Exception { + Map productResult = dataOf(post( + "/api/tools/product.optimize_title/invoke", + Map.of("shopId", 1, "productId", "PRD-LOW-001"), + adminHeaders() + )); + assertThat(productResult) + .containsEntry("success", true) + .containsEntry("status", "SUCCESS"); + Map productData = (Map) productResult.get("data"); + assertThat((List>) productData.get("titleSuggestions")).isNotEmpty(); + + Map excelResult = dataOf(post( + "/api/tools/report.export_excel/invoke", + Map.of("shopId", 1, "reportId", 90001), + adminHeaders() + )); + assertThat(excelResult) + .containsEntry("success", true) + .containsEntry("status", "SUCCESS"); + assertThat((Map) excelResult.get("data")) + .containsEntry("status", "EXPORTED") + .containsEntry("mode", "local-xlsx") + .containsEntry("sheetCount", 4); + Map excelData = (Map) excelResult.get("data"); + assertThat(String.valueOf(excelData.get("fileName"))).endsWith(".xlsx"); + Path exportedFile = Path.of(String.valueOf(excelData.get("filePath"))); + assertThat(exportedFile).exists().isRegularFile(); + assertThat(((Number) excelData.get("fileSizeBytes")).longValue()).isEqualTo(Files.size(exportedFile)); + assertThat(((Number) excelData.get("durationMs")).longValue()).isGreaterThanOrEqualTo(0L); + try (ZipFile zip = new ZipFile(exportedFile.toFile())) { + assertThat(zip.getEntry("xl/workbook.xml")).isNotNull(); + assertThat(zip.getEntry("xl/worksheets/sheet1.xml")).isNotNull(); + assertThat(zip.getEntry("xl/worksheets/sheet2.xml")).isNotNull(); + assertThat(zip.getEntry("xl/worksheets/sheet3.xml")).isNotNull(); + assertThat(zip.getEntry("xl/worksheets/sheet4.xml")).isNotNull(); + } + + Map feishuResult = dataOf(post( + "/api/tools/feishu.sync_report/invoke", + Map.of("shopId", 1, "reportId", 90001), + adminHeaders() + )); + assertThat(feishuResult) + .containsEntry("success", true) + .containsEntry("status", "SUCCESS"); + assertThat((Map) feishuResult.get("data")) + .containsEntry("status", "SYNCED") + .containsEntry("mode", "demo-connector"); + } + + @Test + void shouldRequireApprovalForProductAndAdRiskTools() { + Map productResult = dataOf(post( + "/api/tools/product.update_title/invoke", + Map.of("shopId", 1, "productId", "PRD-LOW-001", "newTitle", "Risk controlled title update"), + adminHeaders() + )); + assertThat(productResult) + .containsEntry("success", false) + .containsEntry("status", "APPROVAL_REQUIRED") + .containsEntry("errorCode", "APPROVAL_REQUIRED"); + + Map adResult = dataOf(post( + "/api/tools/ad.suggest_budget/invoke", + Map.of("shopId", 1, "campaignId", "AD-LOW-001", "changePercent", -20), + adminHeaders() + )); + assertThat(adResult) + .containsEntry("success", false) + .containsEntry("status", "APPROVAL_REQUIRED") + .containsEntry("errorCode", "APPROVAL_REQUIRED"); + } + + private void assertHighRiskApprovalTool(List> tools, String toolCode) { + Map tool = tools.stream() + .filter(item -> toolCode.equals(item.get("toolCode"))) + .findFirst() + .orElseThrow(); + assertThat(tool) + .containsEntry("riskLevel", "high") + .containsEntry("needApproval", true); + } + + private Map get(String path, HttpHeaders headers) { + ResponseEntity response = restTemplate.exchange( + url(path), + HttpMethod.GET, + new HttpEntity<>(headers), + Map.class + ); + assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); + return response.getBody(); + } + + private Map post(String path, Map body, HttpHeaders headers) { + ResponseEntity response = restTemplate.exchange( + url(path), + HttpMethod.POST, + new HttpEntity<>(body, headers), + Map.class + ); + assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); + return response.getBody(); + } + + @SuppressWarnings("unchecked") + private T dataOf(Map response) { + assertThat(response).isNotNull(); + assertThat(response.get("code")).isEqualTo(200); + return (T) response.get("data"); + } + + private HttpHeaders adminHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.set("X-Tenant-Id", "1"); + headers.set("X-Shop-Id", "1"); + headers.set("X-User-Id", "1"); + headers.set("X-User-Name", "admin"); + headers.set("X-User-Roles", "ADMIN"); + return headers; + } + + private String url(String path) { + return "http://localhost:" + port + path; + } +} diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutorTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutorTest.java index 5fb545d..795eb2b 100644 --- a/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutorTest.java +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/executor/DailyReviewReportExecutorTest.java @@ -115,14 +115,72 @@ void shouldGenerateSpecializedCommentRiskReportByIntent() { assertThat(data.get("summary").toString()).contains("差评风险专项"); assertThat(data.get("markdown").toString()) .contains("# 店铺差评风险专项分析") - .contains("专项任务:聚焦差评原因") + .contains("## 1. 差评风险结论") + .contains("## 2. 典型差评样本") + .contains("## 4. 处理建议") .contains("order.query_summary, comment.query_negative, product.query_candidates"); + assertThat(data.get("markdown").toString()) + .doesNotContain("## 2. 广告投放") + .doesNotContain("## 3. 平台报表"); assertThat(evidence) .containsEntry("intent", "comment_risk"); assertThat((List) evidence.get("toolCodes")) .containsExactly("order.query_summary", "comment.query_negative", "product.query_candidates"); } + @Test + @SuppressWarnings("unchecked") + void shouldGenerateProductOptimizationReportByIntent() { + ToolInvokeContext context = new ToolInvokeContext(); + context.setTraceId("tr_product_optimization"); + Map input = new LinkedHashMap<>(baseInput()); + input.put("intent", "product_optimization"); + input.put("executedToolCodes", List.of("order.query_summary", "product.query_candidates", + "comment.query_negative")); + + ToolInvokeResult result = executor.execute(context, input); + + assertThat(result.getSuccess()).isTrue(); + Map data = (Map) result.getData(); + assertThat(data) + .containsEntry("title", "店铺低点击商品优化专项"); + assertThat(data.get("summary").toString()).contains("商品优化专项"); + assertThat(data.get("markdown").toString()) + .contains("# 店铺低点击商品优化专项") + .contains("## 1. 商品优化结论") + .contains("## 2. 商品候选清单") + .contains("## 4. 优化动作") + .contains("运动毛巾") + .doesNotContain("## 2. 广告投放"); + } + + @Test + @SuppressWarnings("unchecked") + void shouldGenerateAdAnomalyReportByIntent() { + ToolInvokeContext context = new ToolInvokeContext(); + context.setTraceId("tr_ad_anomaly"); + Map input = new LinkedHashMap<>(baseInput()); + input.put("intent", "ad_anomaly"); + input.put("executedToolCodes", List.of("order.query_summary", "ad.query_performance", + "report.query_external_metrics")); + + ToolInvokeResult result = executor.execute(context, input); + + assertThat(result.getSuccess()).isTrue(); + Map data = (Map) result.getData(); + assertThat(data) + .containsEntry("title", "店铺投放异常专项检查"); + assertThat(data.get("summary").toString()).contains("投放异常专项"); + assertThat(data.get("markdown").toString()) + .contains("# 店铺投放异常专项检查") + .contains("## 1. 投放异常结论") + .contains("## 2. 高消耗计划") + .contains("## 4. 预算调整建议") + .contains("夏季补水主推") + .doesNotContain("## 5. 风险评价样本") + .doesNotContain("## 6. 商品优化清单"); + } + @Test @SuppressWarnings("unchecked") void shouldGenerateReportThroughModelGatewayWhenEnabled() { diff --git a/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/executor/FeishuSyncReportExecutorTest.java b/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/executor/FeishuSyncReportExecutorTest.java new file mode 100644 index 0000000..cbf0289 --- /dev/null +++ b/shopops-admin/src/test/java/com/sirithree/shopops/admin/tool/executor/FeishuSyncReportExecutorTest.java @@ -0,0 +1,92 @@ +package com.sirithree.shopops.admin.tool.executor; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.sirithree.shopops.admin.tool.config.FeishuSyncProperties; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeContext; +import com.sirithree.shopops.admin.tool.domain.ToolInvokeResult; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpServer; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.jupiter.api.Test; + +class FeishuSyncReportExecutorTest { + @Test + @SuppressWarnings("unchecked") + void shouldPostReportMessageToConfiguredWebhook() throws Exception { + AtomicReference requestBody = new AtomicReference<>(); + HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 0), 0); + server.createContext("/webhook/test-token", exchange -> handleWebhook(exchange, requestBody)); + server.start(); + try { + FeishuSyncProperties properties = new FeishuSyncProperties(); + properties.setEnabled(true); + properties.setWebhookUrl("http://localhost:" + server.getAddress().getPort() + "/webhook/test-token"); + properties.setTimeoutMs(1000); + + FeishuSyncReportExecutor executor = new FeishuSyncReportExecutor(properties); + ToolInvokeResult result = executor.execute(context(), Map.of( + "shopId", 7, + "reportId", 90001, + "documentUrl", "https://example.com/reports/90001" + )); + + assertThat(result.getSuccess()).isTrue(); + Map data = (Map) result.getData(); + assertThat(data) + .containsEntry("status", "SYNCED") + .containsEntry("mode", "feishu-webhook") + .containsEntry("webhookStatusCode", 200) + .containsEntry("documentId", "FEISHU-WEBHOOK-90001") + .containsEntry("documentUrl", "https://example.com/reports/90001"); + assertThat(String.valueOf(data.get("webhookUrlMasked"))).endsWith("/webhook/***"); + assertThat(((Number) data.get("durationMs")).longValue()).isGreaterThanOrEqualTo(0L); + assertThat(requestBody.get()) + .contains("\"msg_type\":\"text\"") + .contains("tenantId=3") + .contains("shopId=7") + .contains("reportId=90001") + .contains("traceId=trace-feishu-test"); + } finally { + server.stop(0); + } + } + + @Test + @SuppressWarnings("unchecked") + void shouldKeepDemoConnectorWhenWebhookIsNotConfigured() { + FeishuSyncProperties properties = new FeishuSyncProperties(); + FeishuSyncReportExecutor executor = new FeishuSyncReportExecutor(properties); + + ToolInvokeResult result = executor.execute(context(), Map.of("shopId", 7, "reportId", 90001)); + + assertThat(result.getSuccess()).isTrue(); + assertThat((Map) result.getData()) + .containsEntry("status", "SYNCED") + .containsEntry("mode", "demo-connector") + .containsEntry("documentId", "FEISHU-DEMO-DOC-001"); + } + + private void handleWebhook(HttpExchange exchange, AtomicReference requestBody) throws IOException { + requestBody.set(new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8)); + byte[] response = "{\"code\":0}".getBytes(StandardCharsets.UTF_8); + exchange.getResponseHeaders().add("Content-Type", "application/json"); + exchange.sendResponseHeaders(200, response.length); + exchange.getResponseBody().write(response); + exchange.close(); + } + + private ToolInvokeContext context() { + ToolInvokeContext context = new ToolInvokeContext(); + context.setTenantId(3L); + context.setShopId(7L); + context.setUserId(11L); + context.setTaskId(101L); + context.setTraceId("trace-feishu-test"); + return context; + } +}