---
name: openqa-cn-catalog
description: "Constructs catalog products (standard or limited), catalog orders, and account-credit enrollment, including product-then-credit scenes. Internal catalog slot of the parent pack; do not invoke independently."
license: "Apache-2.0"
metadata:
  decimalai-skill-id: "9908ca47-f212-446d-b42a-1fe202459314"
  decimalai-version-id: "efeef04f-d653-4b32-a333-6fc663aa804c"
  decimalai-version: "1"
  decimalai-body-sha256: "437e8fca2a4ff1dafc699d5f94248a6b50c6f3ba45ce75018989db63d489b0d8"
  decimalai-name: "openqa-cn/catalog"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "testing"
  decimalai-source: "https://app.decimal.ai/s/openqa-cn-catalog@1/SKILL.md"
---
# Catalog data-build slot

Vendor-neutral catalog-domain slot. Drop-in under pack `slots/` (already discovered; no extra `slot_roots` / marketplace path).  
`slot.yaml` is the scene config. More specific entities (limited / credit) are listed before generic product.  
Executors talk to `DATA_BUILD_API_BASE` (default local mock on port 8765). The case pipeline binds these executors from `slot.yaml` without an LLM when the match is unique.

## Single-step routing

| User intent | Executor |
|---|---|
| Standard catalog product | `scripts/executors/create_product.ts` |
| Limited catalog product | `scripts/executors/create_limited_product.ts` |
| Catalog order | `scripts/executors/create_order.ts` |
| Account credit on a product / user | `scripts/executors/setup_account_credit.ts` |

Do not invent `productId` / `userId` when the user already supplied them. Optional fields use executor defaults.

```bash
node scripts/executors/create_product.ts --json '{"name":"Northwind Standard","city":"demo-city"}'
```

## Scene orchestration

**credit-ready-product**

1. Create catalog product (or reuse `productId`)
2. Enroll the product and user in account credit
3. Return `productId`, enrollment result, `creditBalance`

**bookable-order**

1. Ensure a product exists
2. Create an order for `userId` + `productId`
3. Return `productId`, `orderId`, `status`

Pass upstream `data` fields into the next executor. Do not skip a later scene step.

## Guardrails

- Start `node ../mock_server.ts` if no enterprise gateway is configured
- Do not invent `productId` / `userId` / `orderId`
- Defaults: `city=demo-city`, `validHours=4`, `fulfillOn=today+2days`, `quantity=1`, `credits=1000`
- See [references/tools-guide.md](references/tools-guide.md) and [../SLOT_SPEC.md](../SLOT_SPEC.md)
