{
  "id": "sales-agents",
  "title": "The sales desk",
  "status": "staged",
  "statusNote": "These three agents are staged, not running unattended. Each one is defined here with its required facts, its checks, and its escalation rules in place, and each produces its document when a person runs it. None of them runs on a schedule, watches an inbox, or sends anything.",
  "runDate": "2026-10-12",
  "runDateLabel": "October 12, 2026",
  "priceListEffective": "October 1, 2026",
  "catalogue": [
    { "sku": "MER-BENCH", "item": "Meridian Bench", "price": 4850, "unit": "each", "kind": "equipment" },
    { "sku": "MER-PRO", "item": "Meridian Pro", "price": 7900, "unit": "each", "kind": "equipment" },
    { "sku": "MER-FIELD", "item": "Meridian Field Kit", "price": 1240, "unit": "each", "kind": "equipment" },
    { "sku": "ATL-CARE", "item": "Atlas Care", "price": 89, "unit": "per unit per month", "kind": "service" },
    { "sku": "ATL-PLUS", "item": "Atlas Care Plus", "price": 149, "unit": "per unit per month", "kind": "service" },
    { "sku": "SVC-CAL", "item": "Calibration", "price": 180, "unit": "per unit", "kind": "service" },
    { "sku": "SVC-TRN", "item": "On-site training", "price": 650, "unit": "per day", "kind": "service" }
  ],
  "agents": [
    {
      "id": "proposal",
      "name": "Proposal agent",
      "produces": "One partnership proposal, six Letter pages, from the approved proposal template.",
      "purpose": "Turns an agreed shape of deal into a document a partner can sign. It does not decide the deal. It writes the deal that the account manager, the deal desk, and finance have already agreed, and it refuses to write a figure nobody gave it.",
      "document": { "file": "proposal.html", "label": "Partnership proposal, Northlight Group", "pages": 6 },
      "sections": [
        "Cover: parties, date, validity window, document reference, contents",
        "The situation, in the partner's own words, with three quoted lines",
        "What we propose: three options priced line by line from the catalogue",
        "What is included, and explicitly what is not",
        "Schedule and commercial terms",
        "Acceptance: option selection, totals repeated, signature blocks"
      ],
      "required": [
        {
          "key": "partner_legal_name",
          "label": "Partner legal name",
          "type": "text",
          "prefill": "Northlight Group Holdings, LLC",
          "example": "Northlight Group Holdings, LLC",
          "heldBy": "The signed master agreement, or the partner's accounts payable contact.",
          "why": "The name on the cover has to be the name that can sign. A trading name is not a legal entity.",
          "unlocks": "Writes the cover, the party block in the terms, and the acceptance page."
        },
        {
          "key": "site_count",
          "label": "Sites in scope",
          "type": "number",
          "prefill": "6",
          "example": "6",
          "heldBy": "The account manager, confirmed against the partner's own site list.",
          "why": "Every quantity in the option table is derived from it, including calibration counts and training days.",
          "unlocks": "Sets unit counts, calibration counts, and training days across all three options."
        },
        {
          "key": "current_annual_spend",
          "label": "Trailing twelve month spend",
          "type": "money",
          "prefill": "",
          "example": "15992",
          "heldBy": "Finance operations. It comes off the billing report, not off the CRM opportunity.",
          "why": "An option sized without knowing what the partner spends today is a guess dressed as a recommendation.",
          "unlocks": "Sizes the three options and writes the comparison against what the partner spends now."
        },
        {
          "key": "pricing_tier_approval",
          "label": "Approved pricing tier and approver",
          "type": "text",
          "prefill": "",
          "example": "Tier 2, approved by Dana Whitfield, record DD-2026-0418",
          "heldBy": "Deal desk. It is a record with an id, not a verbal agreement in a hallway.",
          "why": "The discount the agent is allowed to write is a fact somebody already decided and signed for.",
          "unlocks": "Writes the commercial terms, the price hold clause, and the approval reference in the footer."
        },
        {
          "key": "target_start_date",
          "label": "Target start date",
          "type": "date",
          "prefill": "2026-12-01",
          "example": "2026-12-01",
          "heldBy": "The partner's operations lead, agreed with Apex operations scheduling.",
          "why": "The whole schedule page counts forward from it, and so does the validity window.",
          "unlocks": "Writes the schedule page and dates every milestone on it."
        },
        {
          "key": "signer_role",
          "label": "Who signs, name or title",
          "type": "text",
          "prefill": "Regional Operations Lead, Northlight Group",
          "example": "Regional Operations Lead, Northlight Group",
          "heldBy": "The partner. The account manager confirms it before the proposal is sent.",
          "why": "A signature block addressed to the wrong role is a two week delay and a reprint.",
          "unlocks": "Writes both signature blocks on the acceptance page."
        }
      ],
      "optional": [
        {
          "key": "negotiated_unit_price",
          "label": "Negotiated unit price for the Meridian Bench",
          "type": "money",
          "prefill": "",
          "effect": "Replaces the list price on that model everywhere it appears. Only a price that exists in the price list is accepted.",
          "validate": "catalogue-price",
          "validateItem": "Meridian Bench"
        },
        { "key": "incumbent_vendor", "label": "Incumbent supplier", "type": "text", "prefill": "", "effect": "Adds a switching section to the situation page and a transition line to the schedule." },
        { "key": "priority_turnaround", "label": "Priority turnaround required", "type": "toggle", "prefill": "no", "effect": "Adds the two business day band to what is included and prices it in each option." },
        { "key": "co_branding", "label": "Co-brand the cover", "type": "toggle", "prefill": "yes", "effect": "Puts the partner wordmark on the cover beside the Apex mark." },
        { "key": "training_days_override", "label": "Training days, if agreed", "type": "number", "prefill": "", "effect": "Overrides the training days the agent would otherwise propose in each option." }
      ],
      "checks": [
        "Every option total is recomputed as the sum of its own lines. No total is carried over from a draft.",
        "Every unit price is matched against the Apex price list effective October 1, 2026. A price that is not on the list is refused, not rounded to the nearest one.",
        "The partner legal name is character for character identical on the cover and on the acceptance page.",
        "No date in the document falls before the run date, and the schedule milestones run in order.",
        "The recommended option is named on the situation page and carried through to the acceptance page unchanged.",
        "Recurring and three year figures are rebuilt from the year one lines they claim to summarise.",
        "The document is exactly six pages and no page overflows its printable area."
      ],
      "escalations": [
        { "trigger": "Any required fact is missing.", "goesTo": "The person named against that fact.", "action": "Stop before writing a word. Name the missing facts and who normally holds each one." },
        { "trigger": "A unit price that is not in the price list.", "goesTo": "Deal desk.", "action": "Refuse the price and say why. Ask for the approval record id, or use the list price." },
        { "trigger": "A discount deeper than the approved tier.", "goesTo": "Deal desk.", "action": "Stop. The approved tier is a fact somebody signed for, not a preference to be widened." },
        { "trigger": "A term longer than 24 months.", "goesTo": "Dana Whitfield, COO.", "action": "Stop. Terms past 24 months are not a sales decision." },
        { "trigger": "Trailing spend that disagrees with the billing report by more than 5 percent.", "goesTo": "Finance operations.", "action": "Stop and report both numbers side by side. Do not pick the friendlier one." }
      ]
    },
    {
      "id": "account-brief",
      "name": "Account brief agent",
      "produces": "One account brief, a single Letter page, read in the ten minutes before a meeting.",
      "purpose": "Puts everything a rep needs before walking into a room on one page, drawn from records rather than memory. The failure it is built to prevent is a rep who does not know there are two open tickets on the account.",
      "document": { "file": "account-brief.html", "label": "Account brief, Northlight Group", "pages": 1 },
      "sections": [
        "Who the account is: record id, sites, region, plan mix, run rate, contract end",
        "Relationship history in four dated lines",
        "What they buy, and what they have looked at and not bought",
        "Three open items, each with a named owner and a date",
        "Two risks, stated plainly",
        "One recommended next step"
      ],
      "required": [
        {
          "key": "account_record_id",
          "label": "CRM account record id",
          "type": "text",
          "prefill": "NG-4021",
          "example": "NG-4021",
          "heldBy": "The CRM. The rep knows the account by name, rarely by record id.",
          "why": "Everything else on the brief is fetched against it. The wrong record produces a confident brief about a different partner.",
          "unlocks": "Pulls the identity block, the order history, and the activity trail."
        },
        {
          "key": "meeting_date_attendees",
          "label": "Meeting date and who is in the room",
          "type": "text",
          "prefill": "October 15, 2026, regional operations lead and two site managers",
          "example": "October 15, 2026, regional operations lead and two site managers",
          "heldBy": "The calendar invite, checked against who actually accepted it.",
          "why": "A brief written for a site manager is a different brief from one written for a regional lead.",
          "unlocks": "Sets what goes at the top and what gets cut for space."
        },
        {
          "key": "open_support_tickets",
          "label": "Open support tickets with their open dates",
          "type": "text",
          "prefill": "",
          "example": "8814 opened September 22, 2026; 8829 opened September 30, 2026",
          "heldBy": "The support system. This is the fact reps most often get wrong from memory.",
          "why": "Walking into a review without knowing what is broken is the single most expensive thing on this list.",
          "unlocks": "Writes the open items block and one of the two risks."
        },
        {
          "key": "contract_end_date",
          "label": "Contract end date",
          "type": "date",
          "prefill": "",
          "example": "2027-03-31",
          "heldBy": "The contract record. Not the CRM opportunity, which is frequently stale.",
          "why": "How many days are left decides whether this meeting is a check in or a renewal.",
          "unlocks": "Writes the identity block, the renewal risk, and the recommended next step."
        },
        {
          "key": "orders_last_twelve_months",
          "label": "Order history, last twelve months",
          "type": "text",
          "prefill": "2 Meridian Bench June 3, 2026; Atlas Care on 4 units; 4 calibrations; 2 training days",
          "example": "2 Meridian Bench June 3, 2026; Atlas Care on 4 units; 4 calibrations; 2 training days",
          "heldBy": "Order management.",
          "why": "What they buy and what they do not buy has to come from orders, not from what the rep remembers pitching.",
          "unlocks": "Writes the buys and does not buy columns and the run rate."
        }
      ],
      "optional": [
        { "key": "competitor_named", "label": "Competitor named recently", "type": "text", "prefill": "", "effect": "Adds a line to the risks block and changes the recommended next step." },
        { "key": "survey_score", "label": "Last satisfaction score", "type": "text", "prefill": "", "effect": "Adds the score and its date under the identity block." },
        { "key": "regional_notes", "label": "Regional lead notes", "type": "text", "prefill": "", "effect": "Adds one line of context under the history, attributed and dated." }
      ],
      "checks": [
        "The four history lines are in date order and none is dated after the run date.",
        "Every open item has a named owner and a due date. An item with neither is not written onto the brief, it is escalated.",
        "Exactly one recommended next step. A brief with two next steps has none.",
        "What they buy and what they do not buy are both drawn from order history, never from the activity notes.",
        "The whole brief fits one Letter page with body text at 10.5px or larger. Nothing continues overleaf.",
        "The contract end date matches the contract record, and the days remaining are recomputed against the run date."
      ],
      "escalations": [
        { "trigger": "Contract end date within 90 days.", "goesTo": "The account manager, before the meeting.", "action": "Move the renewal to the top of the brief and print how many days are left." },
        { "trigger": "An open item with no owner.", "goesTo": "Morgan Reyes, operations lead.", "action": "Stop. An unowned item on a brief becomes nobody's job the moment the meeting ends." },
        { "trigger": "A risk that involves credit, payment, or a billing dispute.", "goesTo": "Finance.", "action": "Route it to finance and leave it off the brief. A credit decision does not belong in a rep's talking points." },
        { "trigger": "More than six open items on the account.", "goesTo": "The account manager.", "action": "Stop. Six open items is not a brief, it is a project, and it needs a different document." }
      ]
    },
    {
      "id": "onboarding-plan",
      "name": "Onboarding plan agent",
      "produces": "One 60 day onboarding plan, two Letter pages, dated from the day the contract was signed.",
      "purpose": "Turns a signed contract into a dated plan with a named owner on both sides of every step. It will not publish a date that nobody has agreed to, which is why the installation window is a required fact rather than an assumption.",
      "document": { "file": "onboarding-plan.html", "label": "First 60 days, Northlight Group", "pages": 2 },
      "sections": [
        "The account facts the plan is built from, and the day zero anchor",
        "Four phases across 60 days, each with dated steps and an owner on each side",
        "The artifact each step produces",
        "Three decision points with a date, a decider, and the artifact the decision is made against",
        "What done means for each phase, in one testable sentence",
        "The escalation ladder when a date slips"
      ],
      "required": [
        {
          "key": "contract_signed_date",
          "label": "Contract signed date",
          "type": "date",
          "prefill": "",
          "example": "2026-12-01",
          "heldBy": "The countersigned copy in the contract record. Not the date the opportunity was marked closed.",
          "why": "Day zero. Every date in the plan is counted from it, so getting it from the CRM instead of the contract shifts sixty days of commitments.",
          "unlocks": "Anchors all four phases and every dated step in them."
        },
        {
          "key": "plan_purchased",
          "label": "Service plan purchased",
          "type": "text",
          "prefill": "Atlas Care Plus",
          "example": "Atlas Care Plus",
          "heldBy": "The order line.",
          "why": "The plan decides what the coverage steps are and what the partner is entitled to call about.",
          "unlocks": "Writes the coverage steps and the handover section."
        },
        {
          "key": "units_and_models",
          "label": "Units and models, with serials where they exist",
          "type": "text",
          "prefill": "4 Meridian Bench, 2 Meridian Pro",
          "example": "4 Meridian Bench, 2 Meridian Pro",
          "heldBy": "The order line, matched to the shipping manifest.",
          "why": "The install and calibration steps are per unit, and the plan has to cover every model on the list.",
          "unlocks": "Writes the install schedule, the calibration steps, and the coverage check."
        },
        {
          "key": "site_readiness_owner",
          "label": "Named site readiness owner at the partner",
          "type": "text",
          "prefill": "",
          "example": "Regional operations lead, Northlight Group",
          "heldBy": "The partner. The account manager gets the name in writing before the plan is published.",
          "why": "Half the steps in the plan have a partner side owner. Without a name they are all assigned to nobody.",
          "unlocks": "Fills the partner column on every step and both partner side decision points."
        },
        {
          "key": "installation_window",
          "label": "Agreed installation window",
          "type": "text",
          "prefill": "",
          "example": "January 5 to January 9, 2027",
          "heldBy": "Apex operations scheduling, agreed with the partner site. It is a booking, not an intention.",
          "why": "The agent will not publish an installation date that nobody has agreed to, because the rest of the calendar hangs off it.",
          "unlocks": "Dates phase three and everything downstream of it, including go-live."
        }
      ],
      "optional": [
        { "key": "training_days_purchased", "label": "Training days purchased", "type": "number", "prefill": "3", "effect": "Adds the training steps and dates them inside phase three." },
        { "key": "equipment_to_migrate", "label": "Existing equipment to migrate", "type": "text", "prefill": "", "effect": "Adds a decommissioning step to phase two with its own artifact." },
        { "key": "additional_sites", "label": "Sites beyond the first", "type": "number", "prefill": "5", "effect": "Repeats the site readiness and install steps per site and lengthens phase two." },
        { "key": "after_hours_access", "label": "After hours site access needed", "type": "toggle", "prefill": "no", "effect": "Flags the install steps as out of band and adds the access approval to phase one." }
      ],
      "checks": [
        "Every dated step falls after the contract signed date and on or before day 60.",
        "Every step has one owner at Apex and one owner at the partner. A step with only one side named is not scheduled.",
        "Each phase states what done means in a single sentence somebody could test.",
        "Each of the three decision points carries a date, a named decider, and the artifact the decision is made against.",
        "Every artifact the plan refers to is produced by a step earlier in the plan.",
        "The plan is exactly two Letter pages.",
        "The service plan named covers every model in the unit list."
      ],
      "escalations": [
        { "trigger": "The installation window is not confirmed by day 10.", "goesTo": "Morgan Reyes, operations lead.", "action": "Stop the calendar and re-plan from the confirmed date. Do not publish dates nobody agreed to." },
        { "trigger": "A model in the unit list that the purchased plan does not cover.", "goesTo": "Jordan Vale, account manager.", "action": "Stop. Coverage is a contract fact, and the plan cannot promise a visit that is not paid for." },
        { "trigger": "The named partner contact does not respond to two scheduled attempts.", "goesTo": "The account manager.", "action": "Pause the plan at the current phase and say so in writing, on the day it happens." },
        { "trigger": "A decision point passes with no recorded decision.", "goesTo": "Dana Whitfield, COO.", "action": "Escalate on the day it passes, not at the end of the phase when the next three steps have already slipped." }
      ]
    }
  ],
  "sample": {
    "agentId": "proposal",
    "siteCount": 6,
    "note": "The finished proposal below is the six site run. The gate above recomputes the same option arithmetic live from the catalogue, so a different site count gives different totals from the ones printed in the sample."
  }
}
