{
  "business": {
    "name": "Willow & Main Salon Suites",
    "note": "Entirely fictional. Every provider, client, and service is invented. Configured identically in every reviewed tool BEFORE its trial begins; the policy sheet is the configuration spec."
  },
  "policies": {
    "hours": "Tue-Fri 9:00-18:00, Sat 9:00-16:00; closed Sun-Mon",
    "online_booking_requires_card_on_file": true,
    "deposit": {
      "rule": "20% of service price, collected at booking, for services priced $100 or more",
      "applies_to": [
        "S06",
        "S07",
        "S11"
      ]
    },
    "cancellation_window_hours": 24,
    "cancel_outside_window": "free; any deposit refunded to original payment method (account credit acceptable if stated)",
    "late_cancel_inside_window": "25% of booked service price, charged to card on file; deposit applies toward the fee",
    "no_show": "50% of booked service price, charged to card on file; deposit applies toward the fee",
    "reschedule": "free if 24h+ ahead; inside the window it is a late cancellation (25% fee) plus a new booking",
    "gift_cards": "apply AFTER any discount; never redeemable for cash; remainder stays on the card",
    "new_guest_discount_pct": 15,
    "membership": {
      "id": "M01",
      "name": "Blowout Club",
      "price_per_month": 79,
      "includes": "2 Blowouts (S04) per month; unused roll over one month; 10% off add-ons"
    }
  },
  "providers": [
    {
      "id": "P1",
      "name": "Maya Brooks",
      "role": "Stylist",
      "type": "employee"
    },
    {
      "id": "P2",
      "name": "Jordan Ellis",
      "role": "Stylist",
      "type": "employee"
    },
    {
      "id": "P3",
      "name": "Sofia Marchetti",
      "role": "Stylist",
      "type": "employee"
    },
    {
      "id": "P4",
      "name": "Dana Okoye",
      "role": "Barber-stylist",
      "type": "booth renter"
    },
    {
      "id": "P5",
      "name": "Priya Anand",
      "role": "Esthetician",
      "type": "employee"
    }
  ],
  "trial_week": "Relative: D1=Tue through D5=Sat of whichever week the trial runs. Appointments are entered manually per testdata/trial-runbook.md.",
  "traps": [
    {
      "id": "T1-double-booking",
      "appts": [
        "W29"
      ],
      "setup": "Alexis Nguyen books Women's Cut & Style online, Sat 10:00–11:00 with Maya Brooks (booked on D3). On Sat, the desk attempts a walk-in entry for Rob Feldman, Men's Cut, 10:30–11:00, same provider.",
      "expected": "The tool hard-blocks the overlap or raises an explicit conflict warning the desk must override. Silent double-booking scores 0.",
      "scoring_item": 5
    },
    {
      "id": "T2-noshow-fee",
      "appts": [
        "W16"
      ],
      "setup": "Marcus Webb books Balayage ($220) online with $44 deposit and card on file, then no-shows. Desk marks no-show 15 minutes in.",
      "expected": "Per policy: fee = 50% of $220 = $110.00; the $44.00 deposit applies; the tool computes and attempts the remaining $66.00 charge to the card on file (testing stops at the payment rail — what matters is what the tool computes and attempts). Logging the no-show without enforcing the configured fee scores 0–1.",
      "scoring_item": 6
    },
    {
      "id": "T3-canceled-deposit",
      "appts": [
        "W23"
      ],
      "setup": "Elena Petrov books Full Color ($140) for Fri 15:00 with a $28.00 deposit (booked D1), then cancels on D2 morning — ≈54h ahead, outside the 24h window.",
      "expected": "Deposit refunds to the original payment method, or becomes an account credit the tool clearly states. The trap: the deposit silently vanishing into salon revenue or requiring support intervention.",
      "scoring_item": 7
    },
    {
      "id": "T4-giftcard-discount",
      "appts": [
        "W10"
      ],
      "setup": "Tessa Okada (new guest) books Classic Facial ($90); 15% new-guest discount applies; she pays with gift card GC-1001 ($50.00).",
      "expected": "Discount first, gift card second: $90.00 − 15% = $76.50; − $50.00 = $26.50 due; GC-1001 balance $0.00. Wrong order, wrong balance, or a full-price charge scores 0.",
      "scoring_item": 9
    },
    {
      "id": "T5-late-reschedule",
      "appts": [
        "W22",
        "W30"
      ],
      "setup": "Bianca Rossi has Root Touch-Up ($95) Fri 09:00; at 06:00 the same morning (3h ahead, inside the 24h window) she asks to move to Sat 11:00.",
      "expected": "Per policy a late reschedule is a late cancellation: 25% fee ($23.75) to card on file, plus the new Sat booking. Score what the tool can be CONFIGURED to do — a silent free move when the policy says otherwise scores 0; a clear flag the desk can act on scores 1; automatic enforcement scores 2.",
      "scoring_item": 8
    },
    {
      "id": "T6-duplicate-merge",
      "appts": [
        "W31"
      ],
      "setup": "clients.csv deliberately contains Katherine Doyle ((555) 262-4418, katherine.doyle@example.com) AND Katie Doyle (555-262-4418, kdoyle@example.com) — the same person, phone formatted differently. Katie books Sat 13:00 Brow Shaping online.",
      "expected": "The tool detects (or at least permits finding) the duplicate and offers a merge that preserves both profiles’ history. No merge tool, or a merge that drops history, scores 0–1.",
      "scoring_item": 10
    }
  ]
}
