SCENARIOS / SC-020 / SERVICE DESK
SC-020 Customer Support / Ticketing

Service Desk

SaaS support tickets through triage and a capacity-capped agent pool to resolution.

Async Tick FSM
NEW TRIAGE ASSIGN WORK RESOLVE CLOSED REOPEN PENDING CUST AGENTS NA APAC IDLE
Service Desk schematic
SC-020 / SCHEMATICCustomer Support / Ticketing
Clock tick
Update Asynchronous
Lifecycle 6 states + pending/reopen
Agent cap 5 open tickets
Regions NA / EMEA / APAC
Plans Basic / Pro / Enterprise
OVERVIEW

A SaaS support desk from filing to close. Accounts provision users who file tickets about the vendor's products; each ticket goes New → Triage → Assigned → In Progress → Resolved → Closed, with a Pending-Customer side loop and a Resolved → In Progress reopen. An agent is assigned by region as a first-match message the agent defers when at its open-ticket cap, so a triage backlog forms while the agent holds the slot from acceptance until the ticket finally closes.

A faithful model of support capacity. Agents are deliberately thin against the seeded account base, so a triage backlog forms under load while resolutions, reopens, and per-product resolution mix accumulate per agent. Built to study backlog and flow, where tickets wait, agent productivity and rework rate, and SLA exposure by product and priority.

TRAITS
Async
Independent, event-driven timelines
Tick
Discrete fixed-step time
FSM
Entities are finite-state machines
SCHEMA

Linked tables with guaranteed referential integrity.

TABLECOLUMNSDESCRIPTION
ticket ID, region, plan, priority, channel, product, sla_hours, reopen_count, user_id, account_id, agent_id, current_state One row per ticket: inherited region/plan, sampled priority/channel, the product and its SLA, reopen count, and references to the user, account, and assigned agent.
supportagent ID, region, open_tickets, tickets_accepted, tickets_resolved, reopens, resolved_by_product[*], current_state One row per agent: region, current open-ticket load (capped), accepted/resolved/reopen tallies, and the per-product resolution family.
account ID, region, plan, users_created, tickets_filed, tickets_resolved, current_state One row per customer company: firmographics and the running tally of provisioned users and filed/resolved tickets.
user ID, region, plan, tickets_opened, account_id, current_state One row per user: inherited region/plan, tickets opened, and a reference to its account.
LIVE API

Generated REST endpoints. Also exposed as MCP tools.

POST /scenarios/service-desk/experiments Seed a new support desk
POST /scenarios/service-desk/experiments/{eid}/run Advance N turns, or request an event
GET /scenarios/service-desk/experiments/{eid}/entities/ticket Query tickets by state, region or product
GET /scenarios/service-desk/experiments/{eid}/events Append-only event log
GET /scenarios/service-desk/experiments/{eid}/dataset Download the exported dataset
SEMANTIC LAYER

OSI-compatible definition, emitted with the dataset.

# service-desk.osi.yaml — emitted automatically
semantic_model:
  name: "service-desk"
  source: "duckdb://service-desk.db"
  entities:
    - name: ticket
      primary_key: id
  dimensions:
    - name: state
      type: categorical
    - name: t
      type: time
  measures:
    - name: row_count
      agg: count
    - name: active
      agg: sum
      filter: "state = 'ACTIVE'"