# SLA register, fictional Acme Analytics values. One entry per handoff.
# Targets come from the team's own baseline or a promise already made to buyers, never from a
# published benchmark. Baseline = median business minutes over every due request in the class
# (at least the last 8 full weeks), unanswered ones counted at their business age, not-yet-due left
# out. Under 30 due requests the baseline is too small: proposal: true marks a starting target.
# Business minutes come from the calendar each entry names (workflow-config.json, calendars block).

calendars:
  sdr_us:
    timezone: America/New_York
    hours: {mon: ["09:00", "17:00"], tue: ["09:00", "17:00"], wed: ["09:00", "17:00"], thu: ["09:00", "17:00"], fri: ["09:00", "17:00"]}
    holidays: ["2026-09-07", "2026-11-26", "2026-12-25"]
    owner: sales_ops
  cs_us:
    timezone: America/Chicago
    hours: {mon: ["08:00", "16:00"], tue: ["08:00", "16:00"], wed: ["08:00", "16:00"], thu: ["08:00", "16:00"], fri: ["08:00", "16:00"]}
    holidays: ["2026-09-07", "2026-11-26", "2026-12-25"]
    owner: cs_lead

slas:
  - id: hand_raise_first_response
    handoff: marketing to sales
    unit: request
    request_class: hand_raise
    start_event: demo request received by the form tool (no meeting booked at submission)
    start_field: received_at
    stop_event: first relevant human attempt (not an auto-reply, task, status change or booking)
    stop_field: first_response_at
    calendar: sdr_us
    target_business_minutes: 15
    compliance_target: 0.9
    buyer_promise: reply within 15 minutes in business hours (demo page)
    baseline_median_business_minutes: 32.5   # Q3 2026 audit; the answered-only median was 19.5
    baseline_due_requests: 10                # 2 of them overdue, counted at their age
    proposal: false                          # set by the buyer promise, tighter than the baseline
    breach_actions:
      - {at: "unassigned after 5 business minutes", action: alert the fallback owner, role: sdr_team_lead}
      - {at: "15 business minutes", action: notify owner and backup, role: assigned SDR and backup SDR}
      - {at: "30 business minutes", action: backup takes the request, role: backup SDR}
      - {at: "60 business minutes", action: notify team lead, role: sdr_team_lead}
    sender_owner: marketing_ops
    receiver_owner: sdr_team_lead
    report: R03 SLA compliance and R04 buyer clock split
    review_cadence: monthly

  - id: booked_at_submit_confirmation
    handoff: marketing to sales
    unit: request
    request_class: booked_at_submit
    start_event: demo request received with a meeting the buyer booked at submission
    start_field: received_at
    stop_event: a personal confirmation or preparation question before the meeting, or the meeting held; never the scheduler's confirmation
    stop_field: first_response_at
    calendar: sdr_us
    target_business_minutes: 480
    also_due: before the meeting starts; meetings sooner than the target are listed separately
    compliance_target: 0.9
    baseline_median_business_minutes: null   # booked requests were not separated before the redesign
    baseline_due_requests: 0
    proposal: true
    breach_actions:
      - {at: "480 business minutes or 2 hours before the meeting, whichever is earlier", action: notify the meeting owner and SDR team lead, role: sdr_team_lead}
    sender_owner: marketing_ops
    receiver_owner: sdr_team_lead
    report: R03, reported apart from hand_raise
    review_cadence: monthly

  - id: mql_disposition
    handoff: marketing to sales
    unit: request (one lead record per score-path MQL or re-qualification; an MQL set by a demo request is decided on its hand_raise lead)
    request_class: mql
    start_event: WORKFLOW:mql-scoring creates the mql lead (a score-path MQL, or a re-qualification after the recycle date)
    start_field: received_at
    stop_event: the SDR first sets sdr_decision to accepted or rejected (with a reason)
    stop_field: disposition_at
    calendar: sdr_us
    target_business_minutes: 480
    compliance_target: 0.9
    baseline_median_business_minutes: 360    # Q3 2026 audit
    baseline_due_requests: 5                 # 1 overdue at its age; under 30, so the proposal stays
    proposal: true
    breach_actions:
      - {at: "480 business minutes", action: notify owner and SDR team lead, role: sdr_team_lead}
      - {at: "960 business minutes", action: reassign to the backup SDR with received_at kept, role: sdr_team_lead}
    sender_owner: marketing_ops
    receiver_owner: sdr_team_lead
    report: R03 and R06 rejection reasons
    review_cadence: monthly

  - id: sdr_to_ae_acceptance
    handoff: SDR to AE
    unit: request
    request_class: sdr_to_ae
    start_event: discovery meeting held (meeting outcome recorded)
    start_field: meeting_held_at
    stop_event: AE creates the opportunity with the buying contact associated, or rejects with a reason
    stop_field: ae_decision_at
    calendar: sdr_us
    target_business_minutes: 480
    compliance_target: 0.9
    baseline_median_business_minutes: null
    baseline_due_requests: 0
    proposal: true
    breach_actions:
      - {at: "480 business minutes", action: notify AE and sales manager, role: sales_manager}
    sender_owner: sdr_team_lead
    receiver_owner: sales_manager
    report: R03
    review_cadence: monthly

  - id: closed_won_to_cs_acceptance
    handoff: sales to customer success
    unit: deal
    request_class: closed_won_to_cs
    start_event: deal reaches closedwon
    start_field: closed_won_at
    stop_event: customer success accepts the packet or returns it with missing items
    stop_field: cs_decision_at
    calendar: cs_us
    target_business_minutes: 960
    compliance_target: 0.9
    baseline_median_business_minutes: null
    baseline_due_requests: 0
    proposal: true
    gate: every gate field in handoff-packet-checklist.md is filled; the exception view lists the rest daily
    breach_actions:
      - {at: "960 business minutes", action: notify CS lead and the AE, role: cs_lead}
    sender_owner: sales_manager
    receiver_owner: cs_lead
    report: R09
    review_cadence: monthly

  - id: cs_kickoff_scheduled
    handoff: customer success onboarding
    unit: account
    request_class: cs_kickoff
    start_event: customer success accepts the packet
    start_field: cs_decision_at
    stop_event: kickoff meeting scheduled with the customer
    stop_field: kickoff_scheduled_at
    calendar: cs_us
    target_business_minutes: 2400
    compliance_target: 0.9
    baseline_median_business_minutes: null
    baseline_due_requests: 0
    proposal: true
    breach_actions:
      - {at: "2400 business minutes", action: notify CS lead, role: cs_lead}
    sender_owner: cs_lead
    receiver_owner: cs_a
    report: R09
    review_cadence: monthly

  - id: renewal_cycle_owned
    handoff: renewal
    unit: renewal cycle
    request_class: renewal
    scope: negotiated or annual contracts; self-serve monthly and card-billed plans go to the billing exception owner instead
    deadline_rule: the earlier of decision_date minus 120 days and notice_deadline minus 30 days
    met_when: the cycle has an owner, a next action and a due date on or before the deadline
    calendar: cs_us
    target_business_minutes: null   # deadline-based; measured by R10 renewal coverage, not the sla script
    compliance_target: 1.0
    baseline_median_business_minutes: null
    baseline_due_requests: 0
    proposal: true
    breach_actions:
      - {at: "deadline passed without an owner", action: assign to the CS lead and add to the weekly review, role: cs_lead}
    sender_owner: cs_lead
    receiver_owner: renewal owner named on the cycle
    report: R10
    review_cadence: weekly

  - id: self_serve_billing_exceptions
    handoff: renewal (self-serve)
    unit: billing exception (failed payment, scheduled cancellation, downgrade)
    request_class: billing_exception
    scope: self-serve monthly and card-billed plans
    start_event: the billing system records the exception
    start_field: exception_at
    stop_event: the exception owner records an action (retry outcome, save offer, accepted cancellation)
    stop_field: exception_actioned_at
    calendar: cs_us
    target_business_minutes: 480
    compliance_target: 0.9
    baseline_median_business_minutes: null
    baseline_due_requests: 0
    proposal: true
    breach_actions:
      - {at: "480 business minutes", action: notify the CS lead, role: cs_lead}
    sender_owner: finance
    receiver_owner: billing exception owner (named role, one queue)
    report: R10, counted apart from owned cycles
    review_cadence: weekly
