# Dataset Card — Synthetic Forge PM Work Orders

> **FICTIONAL / SYNTHETIC DEPLOYMENT MODEL.** This dataset is 100% machine-generated.
> No real customer, property, tenant, vendor, or work-order data was used. Names,
> units, costs, timestamps, and descriptions are invented.

## Summary

- **Records:** 100,000 work orders (configurable via `WO_SIM_N`).
- **Generator:** `../src/enterprise-synth.mjs` (deterministic, seeded).
- **Seed:** `20260625` → fully reproducible; a corpus fingerprint is recorded in
  `dataset-manifest.json` and in `../verification-report.json`.
- **Full corpus:** written to `../data/enterprise-work-orders.jsonl` at run time
  (git-ignored, ~60 MB). A 1,000-row sample is committed as `sample-1000.jsonl`.

## Portfolio modeled (fictional)

42,000 units across 19 invented properties in four states:
Florida (16,000), Texas (12,000), Georgia (8,000), North Carolina (6,000).
States map to the ecosystem's routing regions: FL→SOUTH, GA→EAST, TX→WEST, NC→NORTH.

## Schema (one JSON object per line)

| Field | Description |
| --- | --- |
| `workOrderId` | Unique id, e.g. `FPM-WO-1000123` |
| `property`, `propertyCode`, `unit`, `city`, `state`, `region` | Location |
| `tradeCategory` | Ground-truth trade (HVAC/PLUMBING/ELECTRICAL/ROOFING/LANDSCAPING/SECURITY/GENERAL_MAINTENANCE) |
| `priority` | Ground-truth priority band (P1–P4) |
| `tenantDescription` | Free-text intake string the agents classify |
| `submittedAt` | ISO timestamp within a fictional 12-month window |
| `estimatedCost` | Synthetic cost estimate (USD) |
| `slaRequirementHours` | Customer-required SLA by priority (P1=4, P2=24, P3=72, P4=120) |
| `vendorCandidates` | 2–3 ranked synthetic vendor options for the trade+region |
| `pattern` | The generated "kind" (clean/emergency/ambiguous/highCost/duplicate/missingLoc/missingField) |
| `duplicateOf` | Source work order id for duplicates (else null) |
| `missingFields` | Fields intentionally omitted (location/description) |
| `isEmergency` | True for P1 emergency cases |
| `expectedClassification` | Answer key — trade |
| `expectedRoutingRegion` | Answer key — region |
| `expectedValidation` | Answer key — VALID / NEEDS_REVIEW / REJECT |
| `expectedDisposition` | Answer key — AUTO_DISPATCH / HUMAN_EXCEPTION / REJECTED |

## Generation method (how realism + difficulty are injected)

- **Clean / emergency** orders use single-trade templates with a non-priority trade
  keyword plus an explicit priority phrase, so both trade and priority are
  determinable from the text.
- **Ambiguous** orders mix two equal-weight trade keywords → a genuine confidence
  tie → a human exception.
- **Duplicate** orders clone an earlier clean order's text + unit with a later
  timestamp inside the duplicate window → caught by the durable fingerprint query.
- **highCost** orders carry an estimate above the auto-approval cap → human review.
- **missingLoc / missingField** omit a blocking field → rejected by the validator.

## Intended use

Benchmarking the Work Order Agent Ecosystem's classification, routing, validation,
and safety behaviour at enterprise scale against a known answer key. **Not** suitable
for any inference about real tenants, properties, or vendors — none exist.

## Known limitations

Synthetic text is cleaner and more templated than real tenant submissions, so
absolute accuracy on real intake will differ. See `../proof/LIMITATIONS.md`.
