{
  "version": 1,
  "name": "RenX purchasing and pricing guide catalog",
  "url": "https://renx.openmercury.com/purchasing-guides/",
  "language": "en",
  "terms": "Setup ranges assume the stated scope and baseline. Other features, quality, speed, runtime budgets and interfaces can change the estimate. Running costs are per stated unit, separate from setup. Targets are not measured benchmarks. Use the linked guide to configure requirements; agree final scope and price with a provider.",
  "guides": [
    {
      "id": "agent-session-monitoring",
      "title": "MCP & AI Agent Session Monitoring",
      "description": "Replay agent tool calls, find failed steps and track latency without exposing secrets in your logs.",
      "url": "https://renx.openmercury.com/purchasing-guides/agent-session-monitoring/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Use exported traces for the first scope. Event ordering and latency are calculated from records, not invented by AI. The cost unit is a completed session summary, not each tool call.",
            "setup": {
              "min": 1152,
              "max": 3480
            }
          },
          {
            "key": "connected",
            "name": "Instrument a live application",
            "description": "Add an approved telemetry adapter to an application with bounded queues, drop counters and a redacted replay viewer. Logging failures must not block the application.",
            "setup": {
              "min": 1368,
              "max": 4200
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0402,
          "max": 0.0462,
          "unit": "session",
          "composition": [
            {
              "key": "toolCallsPerUnit",
              "count": 20,
              "noun": "tool calls"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 5000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Expected events captured",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Complete, correctly ordered events divided by independently recorded expected events, with drops reported rather than hidden."
          },
          {
            "name": "Correct issue groups",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly grouped labeled failure sessions divided by all labeled failure sessions, including unknown causes."
          },
          {
            "name": "Seeded secrets removed",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Seeded secret fields absent from stored and exported traces divided by all seeded secret fields; any exposure fails the pilot."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 30,
          "concurrentJobs": 1,
          "unit": "session"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "ai-3d-asset-generation",
      "title": "3D Asset Generation",
      "description": "Buy a reusable tool that turns prompts or reference images into textured mesh drafts you can preview and export.",
      "url": "https://renx.openmercury.com/purchasing-guides/ai-3d-asset-generation/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-08",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Generate and review asset drafts",
            "description": "Build generation, preview and checked export for simple static props.",
            "setup": {
              "min": 1728,
              "max": 4680
            }
          },
          {
            "key": "connected",
            "name": "Connect your asset library",
            "description": "Add approved asset-library import, versioned exports and a non-destructive editor adapter.",
            "setup": {
              "min": 2304,
              "max": 6360
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0562,
          "max": 0.3062,
          "unit": "asset request",
          "composition": [
            {
              "key": "candidatesPerUnit",
              "count": 2,
              "noun": "mesh candidates"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Usable mesh exports",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Candidate exports that pass parser and target-import checks divided by all attempted generation requests, including failed requests."
          },
          {
            "name": "Asset checklist satisfied",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Reference checklist items satisfied in independently inspected assets divided by all required checklist items."
          },
          {
            "name": "Artist rubric agreement",
            "target": 80,
            "unit": "%",
            "direction": "gte",
            "definition": "Artist-approved shape and material rubric decisions divided by all independently reviewed rubric decisions."
          },
          {
            "name": "Rights and approval controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed reference-rights, export-approval and source-preservation cases divided by all tested control cases; any unauthorized publication fails acceptance."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 1,
          "unit": "asset request"
        },
        "controls": "Proposed targets apply to an independently labeled test set on the agreed workload, not every possible future input. Review each pilot result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "ai-message-policy-checks",
      "title": "AI Message Policy Checks",
      "description": "Check AI-written messages against your approved policies before they reach customers.",
      "url": "https://renx.openmercury.com/purchasing-guides/ai-message-policy-checks/",
      "category": {
        "id": "legal-compliance",
        "name": "Legal & Compliance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/legal-compliance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Start with an English text channel and a buyer-maintained rule set. Include deterministic restricted-term checks, contextual checks and independent rewrite validation. This is not automatic legal certification.",
            "setup": {
              "min": 1296,
              "max": 3840
            }
          },
          {
            "key": "connected",
            "name": "Check before sending",
            "description": "Add a gate to an approved sending application. Release only a policy-approved message version; policy or text changes require a new check.",
            "setup": {
              "min": 1584,
              "max": 4680
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0246,
          "max": 0.0276,
          "unit": "message",
          "composition": [
            {
              "key": "wordsPerUnit",
              "count": 500,
              "noun": "message and context words"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 10000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Policy violations caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Detected violations divided by all reviewer-labeled violations, measured per policy and across the full test set."
          },
          {
            "name": "Compliant messages blocked",
            "target": 5,
            "unit": "%",
            "direction": "lte",
            "definition": "Incorrect blocks or unnecessary holds divided by all compliant test messages. Report this separately from violation recall."
          },
          {
            "name": "Correct rule references",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Verdicts citing the applicable policy version and rule divided by all non-pass verdicts."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 10,
          "concurrentJobs": 1,
          "unit": "message"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "ai-output-evaluation",
      "title": "AI Output Evaluation & Regression Tests",
      "description": "A purchasing guide to buying a workflow that checks your AI's answers against your rules and shows what improves or breaks after a change.",
      "url": "https://renx.openmercury.com/purchasing-guides/ai-output-evaluation/",
      "category": {
        "id": "ai-models",
        "name": "AI Models & Specialisation",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ai-models/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Evaluate saved answers",
            "description": "Read saved prompts, answers and reference evidence. Apply your calibrated rules and export a case-level report with version comparisons.",
            "setup": {
              "min": 864,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Connect my test pipeline",
            "description": "Adds an adapter for saved outputs from your test pipeline, version tags and repeatable reports. Your team keeps control of release decisions.",
            "setup": {
              "min": 1296,
              "max": 3840
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.048,
          "max": 0.078,
          "unit": "test case",
          "composition": [
            {
              "key": "answersPerUnit",
              "count": 1,
              "noun": "saved answer"
            },
            {
              "key": "rubricsPerUnit",
              "count": 5,
              "noun": "scoring rules"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Calibrated scoring with visible errors and version comparisons.",
        "metrics": [
          {
            "name": "Agreement with expert labels",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare decisions with a separately labelled holdout, not with the judge's own explanations. Balance rule and outcome groups so an easy majority cannot hide errors."
          },
          {
            "name": "Known failures detected",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Count detected known failures divided by all independently labelled failures. Report per failure type; judge errors count as missed decisions, not successful detection."
          },
          {
            "name": "Acceptable answers passed",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Count correctly passed acceptable cases divided by all acceptable cases. Flagging everything cannot satisfy this measure."
          },
          {
            "name": "Complete result records",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Require case ID, source answer, dataset and rubric version, judge version, outcome and reason or explicit error. Never silently omit failed cases."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "test case"
        },
        "controls": "Your team approves the test rules and release decision. A passing score does not establish safety or compliance outside the tested cases."
      }
    },
    {
      "id": "assembly-work-instruction-drafting",
      "title": "Assembly Work Instruction Drafting",
      "description": "A purchasing guide to buying a workflow that turns your approved parts list, build notes and images into assembly instructions for an engineer to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/assembly-work-instruction-drafting/",
      "category": {
        "id": "manufacturing-robotics",
        "name": "Manufacturing & Robotics",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/manufacturing-robotics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Draft from an approved build pack",
            "description": "Create editable assembly steps with parts, tools, supplied illustrations and required checks. Link each instruction to its source and flag missing or conflicting details.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          },
          {
            "key": "connected",
            "name": "Keep drafts aligned with approved revisions",
            "description": "Adds a read-only connection to approved build files, version checks and affected-step comparisons. A source change creates a new review draft, never an automatic production release.",
            "setup": {
              "min": 2304,
              "max": 6480
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2648,
          "max": 0.6648,
          "unit": "instruction pack",
          "composition": [
            {
              "key": "stepsPerUnit",
              "count": 20,
              "noun": "assembly steps"
            },
            {
              "key": "partsPerUnit",
              "count": 50,
              "noun": "parts-list lines"
            },
            {
              "key": "pagesPerUnit",
              "count": 10,
              "noun": "source pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Draft the required steps and retain exact details and source versions.",
        "metrics": [
          {
            "name": "Required steps included",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly included steps divided by all engineer-labelled required steps. Missing, deferred and incorrectly ordered steps remain failures; critical omissions block release regardless of the average."
          },
          {
            "name": "Technical details correct",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct emitted part IDs, quantities, tools, process values and units divided by all emitted technical details. Check against the approved source, not model plausibility; unsupported specifications fail release."
          },
          {
            "name": "Current source references",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every drafted step links to the correct source version and any supplied image it uses. Preserve variant and revision identifiers; a link to an outdated drawing does not pass."
          },
          {
            "name": "Changed requirements flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly identified affected steps divided by all engineer-labelled affected steps in held-out revision pairs. Includes deleted parts and changed checks; report false change flags separately."
          },
          {
            "name": "Change flags correct",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported affected-step flags divided by all emitted change flags. Unchanged-step pairs are included so marking every step as changed cannot pass."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "maxPages": 10,
          "concurrentJobs": 2,
          "unit": "instruction pack"
        },
        "controls": "Critical omissions, wrong revision context or invented process values block release. Keep approved sequencing and units; engineering review is required even when the numerical targets pass."
      }
    },
    {
      "id": "audit-sample-testing",
      "title": "Audit Sample Testing & Workpapers",
      "description": "A guide to buying an AI workflow that tests audit samples against client evidence and drafts referenced workpapers for your auditors.",
      "url": "https://renx.openmercury.com/purchasing-guides/audit-sample-testing/",
      "category": {
        "id": "professional-business",
        "name": "Professional & Business Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/professional-business/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "workpaper",
        "scopes": [
          {
            "key": "workpaper",
            "name": "Test uploaded evidence",
            "description": "Match uploaded evidence to each selected sample, read the tested attributes, compare them with the recorded amount, date and period, mark agreed items and exceptions, and draft the testing sheet in your template.",
            "setup": {
              "min": 1224,
              "max": 3720
            }
          },
          {
            "key": "connected",
            "name": "Add evidence requests and filing",
            "description": "Adds itemised evidence requests per sample for the client, reads evidence as it arrives in your audit platform or document portal and files the drafted testing sheet against the engagement after a senior approves it.",
            "setup": {
              "min": 1872,
              "max": 5640
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0916,
          "max": 0.1716,
          "unit": "sample",
          "composition": [
            {
              "key": "documentsPerUnit",
              "count": 3,
              "noun": "supporting documents"
            },
            {
              "key": "pagesPerUnit",
              "count": 10,
              "noun": "pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct matching and attribute reading on clear evidence, with unreadable or ambiguous items left for an auditor.",
        "metrics": [
          {
            "name": "Evidence matched to the right sample",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Supporting documents linked to the correct sample item, divided by all labelled sample-document links in the test set. A document linked to the wrong sample counts as a failure even if its values look right."
          },
          {
            "name": "Test attributes read correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Attribute values such as amount, date, counterparty, description and period that match the labelled value on the document, divided by all labelled attribute values. An attribute marked unreadable for a person to check is not counted as wrong."
          },
          {
            "name": "Labelled exceptions flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled exceptions, such as a different amount, a date outside the period, a missing approval or no matching document, that are flagged, divided by all labelled exceptions."
          },
          {
            "name": "Results with document and page",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every attribute result must cite the document and page it came from, so the reviewer can open the evidence in one step."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 8,
          "unit": "sample"
        },
        "controls": "Drafted results are prepared work for an auditor to review, not audit evidence on their own. Your engagement team still reviews each sample, decides on exceptions and signs off."
      }
    },
    {
      "id": "bank-ledger-reconciliation",
      "title": "Bank & Ledger Reconciliation",
      "description": "A purchasing guide to buying a workflow that matches bank transactions to your ledger and prepares an exception list for your accounting team.",
      "url": "https://renx.openmercury.com/purchasing-guides/bank-ledger-reconciliation/",
      "category": {
        "id": "accounting-finance",
        "name": "Finance & Accounting",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/accounting-finance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Reconcile uploaded files",
            "description": "Map agreed exports, match exact and grouped payments, and return matched, unmatched and ambiguous groups with evidence.",
            "setup": {
              "min": 864,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Import from my accounting system",
            "description": "Adds a read-only ledger API and approved bank-export folder, repeat-run tracking and duplicate-safe input handling.",
            "setup": {
              "min": 1440,
              "max": 4320
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 2.192,
          "max": 6.192,
          "unit": "batch",
          "composition": [
            {
              "key": "bankRowsPerUnit",
              "count": 1000,
              "noun": "bank transactions"
            },
            {
              "key": "ledgerRowsPerUnit",
              "count": 1000,
              "noun": "ledger entries"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 10
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Reliable matches with ambiguous groups held for review.",
        "metrics": [
          {
            "name": "Correct suggested matches",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "A group passes only when all linked records belong together and amounts, currencies and fees satisfy approved rules."
          },
          {
            "name": "Known matches found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly found eligible groups divided by accountant-labelled true groups; abstentions stay in the denominator."
          },
          {
            "name": "Exceptions caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged unmatched, duplicate or contradictory groups divided by all labelled exceptions."
          },
          {
            "name": "Complete source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Results must retain original bank and ledger record IDs, rule version and reproducible amount calculations."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "batch"
        },
        "controls": "Use exact decimal arithmetic for money. An AI explanation is not evidence that a payment matches; confirm it against source records and approved rules."
      }
    },
    {
      "id": "candidate-submittals",
      "title": "Candidate Submittal Preparation",
      "description": "A purchasing guide to buying a workflow that turns a candidate's CV and your screening notes into a client-ready submittal in your template, with each job requirement linked to evidence for your recruiter to approve.",
      "url": "https://renx.openmercury.com/purchasing-guides/candidate-submittals/",
      "category": {
        "id": "professional-business",
        "name": "Professional & Business Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/professional-business/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your template and sample submittals.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Prepare from uploaded files",
            "description": "Read the CV and notes, rebuild them in your template with the client's anonymisation rule, and list each job requirement as evidenced, not evidenced or needing a recruiter check.",
            "setup": {
              "min": 864,
              "max": 2760
            }
          },
          {
            "key": "connected",
            "name": "Connect to my recruitment system",
            "description": "Adds a recruitment system connection that reads the candidate, job and notes, and saves the approved submittal to the candidate record with a duplicate-safe retry.",
            "setup": {
              "min": 1440,
              "max": 4320
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2426,
          "max": 0.6426,
          "unit": "submittal",
          "composition": [
            {
              "key": "cvPagesPerUnit",
              "count": 6,
              "noun": "CV pages"
            },
            {
              "key": "noteWordsPerUnit",
              "count": 3000,
              "noun": "words of screening notes"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate submittals with unclear requirements left for the recruiter.",
        "metrics": [
          {
            "name": "Facts carried over unchanged",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Employers, titles, dates, qualifications and certifications in the submittal must match the source CV or notes exactly; a changed date fails."
          },
          {
            "name": "Claims backed by evidence",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Claims a recruiter confirms against the linked CV line or note, divided by all requirement claims marked as evidenced."
          },
          {
            "name": "Hidden details kept hidden",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "A submittal fails if any contact detail, name or other field the client rule hides appears anywhere in it."
          },
          {
            "name": "Gaps flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Requirements with no evidence that are marked for the recruiter, divided by all labelled unevidenced requirements."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "submittal"
        },
        "controls": "The submittal describes evidence; it does not judge the candidate. Leave age, health, family and other protected characteristics out of summaries, and keep hiring decisions with people. Check local rules on automated hiring tools before use."
      }
    },
    {
      "id": "case-law-research-memos",
      "title": "Case Law Research Memos",
      "description": "A purchasing guide to buying a workflow that turns your authorised case-law sources into cited research memos for lawyer review.",
      "url": "https://renx.openmercury.com/purchasing-guides/case-law-research-memos/",
      "category": {
        "id": "legal-compliance",
        "name": "Legal & Compliance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/legal-compliance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Research a supplied case-law pack",
            "description": "Read the supplied authorities, compare reasoning and show contrary cases and missing evidence. Export an editable memo and source table.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          },
          {
            "key": "connected",
            "name": "Read an approved case-law folder",
            "description": "Add a read-only connection to your approved folder and record source versions. This is not a live legal database or commercial citator connection.",
            "setup": {
              "min": 2304,
              "max": 6480
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.396,
          "max": 3.396,
          "unit": "research memo",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 100,
              "noun": "text pages"
            },
            {
              "key": "authoritiesPerUnit",
              "count": 12,
              "noun": "source authorities"
            },
            {
              "key": "issuesPerUnit",
              "count": 3,
              "noun": "research issues"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 20
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Source-linked analysis with contrary cases and research gaps visible.",
        "metrics": [
          {
            "name": "Source-supported claims",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "A lawyer checks each substantive claim against its passage and full opinion context. Overstating a holding or relying on a dissent as the majority is an error."
          },
          {
            "name": "Required issues covered",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Score the full lawyer-labelled issue set and contrary authorities available in the pack. An empty memo or omitted counterargument cannot pass by avoiding false claims."
          },
          {
            "name": "Correct legal context",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Check the court, date, jurisdiction, procedural posture and precedential role. Unknown or stale treatment must be labelled, not guessed."
          },
          {
            "name": "Valid pinpoint citations",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Open each source and confirm the passage and version. A link to a case title is not enough; fabricated authorities fail the pilot."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "maxPages": 100,
          "concurrentJobs": 1,
          "unit": "research memo"
        },
        "controls": "A valid citation is not proof of a correct legal conclusion. Show missing coverage and unverified current treatment. Lawyers check every memo before relying on it."
      }
    },
    {
      "id": "certificate-of-analysis-checks",
      "title": "Certificate of Analysis Checks",
      "description": "A purchasing guide to buying a workflow that checks each supplier certificate of analysis against your raw-material specification and lists what passes, what is out of spec and what needs a person.",
      "url": "https://renx.openmercury.com/purchasing-guides/certificate-of-analysis-checks/",
      "category": {
        "id": "food-agriculture",
        "name": "Food & Agriculture",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/food-agriculture/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost only; QA review and maintenance are separate. Confirmed in your pilot.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Check certificates from files",
            "description": "Upload certificates and receive a result-by-result report with a review queue. No quality-system writes.",
            "setup": {
              "min": 864,
              "max": 2520
            }
          },
          {
            "key": "connected",
            "name": "Connect my quality system",
            "description": "Adds an agreed mailbox or storage intake, receiving and specification lookups by lot, and approved inspection records in one quality or ERP system.",
            "setup": {
              "min": 1584,
              "max": 4440
            }
          }
        ],
        "baseline": {
          "standard": "Specification checks",
          "deployment": "Your cloud",
          "modelAccess": "Approved OCR and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.068,
          "max": 0.108,
          "unit": "certificate",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved OCR and model APIs",
            "monthlyVolume": 1000,
            "pages": 2
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Specification checks",
        "description": "Compare every result with your limits; flag missing tests, wrong lots and expired certificates.",
        "metrics": [
          {
            "name": "Results read correctly",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct parameter names, results and units divided by all labelled parameters; missed values count as errors. Report each parameter type separately."
          },
          {
            "name": "Out-of-spec and missing items caught",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled out-of-spec results, missing tests, wrong methods, lot mismatches and expired certificates that are flagged, divided by all such cases."
          },
          {
            "name": "Flags that hold up",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of flags that QA confirms on natural samples."
          },
          {
            "name": "Certificates assessed without edits",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Certificates with every result and check correct and no QA correction, divided by all inputs including rejected files. This does not release a lot."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "maxPages": 2,
          "concurrentJobs": 1,
          "unit": "certificate",
          "definition": "From certificate received to checked report, including queueing and retries. QA review and release decisions are separate."
        },
        "controls": "Keep the original certificate and the source of every result. Missing results are flagged, never invented. No lot is released or held without your QA decision."
      }
    },
    {
      "id": "chargeback-evidence-preparation",
      "title": "Chargeback Evidence Preparation",
      "description": "A purchasing guide to buying a workflow that collects order records, checks missing evidence and drafts a chargeback response for your approval.",
      "url": "https://renx.openmercury.com/purchasing-guides/chargeback-evidence-preparation/",
      "category": {
        "id": "ecommerce-internet",
        "name": "E-commerce & Internet",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ecommerce-internet/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Prepare from uploaded records",
            "description": "Match records to the dispute, build a dated evidence checklist and draft a concise response. Show missing and contradictory evidence instead of filling gaps.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Import disputes from my processor",
            "description": "Add a read-only processor connection, deadline updates and duplicate-safe case imports. Order, fulfilment and customer-support records stay as agreed uploads.",
            "setup": {
              "min": 1728,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2432,
          "max": 0.6432,
          "unit": "case",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 20,
              "noun": "text pages"
            },
            {
              "key": "attachmentsPerUnit",
              "count": 10,
              "noun": "source attachments"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Supported drafts with missing evidence clearly shown.",
        "metrics": [
          {
            "name": "Supported response claims",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Measure source-supported claims and coverage of required facts separately; both must meet the target. Use the correct transaction evidence. A short or empty response cannot game the score."
          },
          {
            "name": "Required evidence identified",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Against a reviewer-defined checklist, include each available required item or correctly mark it missing. Calling an available item missing is a failure."
          },
          {
            "name": "Correct case and deadline",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Match transaction identity, reason and exact deadline to the processor notice, including timezone and updates. Never infer a deadline from a generic rule."
          },
          {
            "name": "Valid evidence links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Keep correct source locations for review and embed required evidence in the final files. Validate current processor and card-network file limits; no inaccessible links as a substitute."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "maxPages": 20,
          "concurrentJobs": 2,
          "unit": "case"
        },
        "controls": "The processor notice controls the reason and deadline. A delivery scan or customer message is not proof of every claim. Keep contradictory records and let your team decide whether to contest."
      }
    },
    {
      "id": "claim-denial-appeals",
      "title": "Claim Denial Appeal Drafting",
      "description": "A purchasing guide to a workflow, deployed in your environment, that reads a denied claim, the remittance reason, the chart documents and the payer policy, sorts the denial and drafts an appeal letter for your billing staff to review and submit.",
      "url": "https://renx.openmercury.com/purchasing-guides/claim-denial-appeals/",
      "category": {
        "id": "healthcare-life-sciences",
        "name": "Healthcare & Life Sciences",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/healthcare-life-sciences/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Draft from uploaded denials",
            "description": "Read the uploaded denial, claim and chart documents, sort the denial by its stated reason, list missing documents and draft an appeal letter that cites chart pages and payer policy sections.",
            "setup": {
              "min": 1152,
              "max": 3480
            }
          },
          {
            "key": "connected",
            "name": "Read denials from my remittance files",
            "description": "Adds read-only intake of remittance files from an approved folder, read-only chart retrieval for the claim, a deadline-ordered queue, duplicate-safe reruns and visible failures. Staff still review and submit.",
            "setup": {
              "min": 1800,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.268,
          "max": 0.468,
          "unit": "appeal",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 30,
              "noun": "document pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Supported letters with unclear denials held for billing staff.",
        "metrics": [
          {
            "name": "Denials sorted correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Denials placed in the category a biller assigned, such as appeal, correct and resubmit, or obtain documents, divided by all denials."
          },
          {
            "name": "Letter statements supported",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Factual statements whose cited chart page or policy section contains the stated fact for the same patient and claim, divided by all factual statements."
          },
          {
            "name": "Missing documents found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly listed missing attachments divided by all attachments billers labelled as missing."
          },
          {
            "name": "Filing deadlines correct",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Deadlines calculated from the denial date and your confirmed payer rule, divided by all appeals; unknown rules are held, not guessed."
          }
        ],
        "speed": {
          "p95Seconds": 240,
          "concurrentJobs": 3,
          "unit": "appeal"
        },
        "controls": "A draft letter is not an argument the payer must accept. Staff check each cited page, a clinician signs clinical statements, and deadlines come from your confirmed payer rules rather than the model."
      }
    },
    {
      "id": "claim-intake-triage",
      "title": "First Notice of Loss Intake & Triage",
      "description": "A purchasing guide to a workflow that reads new loss reports, checks missing documents and policy details, and prepares the adjuster's intake summary.",
      "url": "https://renx.openmercury.com/purchasing-guides/claim-intake-triage/",
      "category": {
        "id": "insurance",
        "name": "Insurance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/insurance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "intake",
        "scopes": [
          {
            "key": "intake",
            "name": "Read, check and route new reports",
            "description": "Read the report, capture loss details, list missing items and check the policy dates and insured item. Suggest a queue and show approved-rule flags for a person.",
            "setup": {
              "min": 1440,
              "max": 4080
            }
          },
          {
            "key": "connected",
            "name": "Open claims in my claims system",
            "description": "After approval, create the new claim and queue assignment, check duplicate reports and send a missing-item request. Reminders follow your bounded, approved schedule.",
            "setup": {
              "min": 2232,
              "max": 6240
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved speech and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.128,
          "max": 0.2196,
          "unit": "loss report",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved speech and model APIs",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Reliable intake and routing, with uncertain policy matches and every indicator left to a person.",
        "metrics": [
          {
            "name": "Loss details captured",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Required loss details captured correctly, divided by all required details in the test reports. A detail stated with false certainty counts as wrong."
          },
          {
            "name": "Missing items listed",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Documents and photos correctly listed as missing, divided by all items your team recorded as missing for the type of loss."
          },
          {
            "name": "Policy checks correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Policy-date and insured-item checks matching independent labels, divided by all test reports. A hold is correct only when the labelled case is unresolved; holding everything cannot pass."
          },
          {
            "name": "Routed to the right queue",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Claims sent to the queue your routing rules call for, divided by all test reports."
          },
          {
            "name": "Fraud indicators surfaced",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Independently labelled approved-rule indicators surfaced with supporting evidence, divided by all labelled indicators. Report false flags separately; a flag never establishes fraud."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every permission and approval challenge must pass. Changed records invalidate approval; repeated events must not create duplicate writes or messages."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 8,
          "unit": "loss report"
        },
        "controls": "Flags are prompts for a person, not findings. A fraud indicator is never a decision about the claim or the claimant, and your adjusters still decide coverage, reserves and payment."
      }
    },
    {
      "id": "client-meeting-follow-up",
      "title": "Client Meeting Follow-up",
      "description": "A purchasing guide to buying a workflow that turns your client meeting transcripts into accurate notes, action items and follow-up drafts.",
      "url": "https://renx.openmercury.com/purchasing-guides/client-meeting-follow-up/",
      "category": {
        "id": "professional-business",
        "name": "Professional & Business Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/professional-business/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Engineering estimates, not provider quotes. Recording, transcription, human review, CRM subscriptions and maintenance are separate.",
        "recommendedScope": "draft",
        "scopes": [
          {
            "key": "draft",
            "name": "Notes and follow-up drafts",
            "description": "Turn your transcript into structured notes, an action list and a follow-up draft. Link claims to transcript passages and leave missing details unknown.",
            "setup": {
              "min": 864,
              "max": 2400
            }
          },
          {
            "key": "connected",
            "name": "Also update my CRM after approval",
            "description": "Adds client-record matching, a change preview and approved notes/tasks in the selected CRM. Keep an audit trail and prevent duplicate updates on retry.",
            "setup": {
              "min": 1440,
              "max": 4080
            }
          }
        ],
        "baseline": {
          "standard": "Reliable meeting drafts",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.068,
          "max": 0.088,
          "unit": "meeting",
          "composition": [
            {
              "key": "wordsPerUnit",
              "count": 6000,
              "noun": "transcript words"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Reliable meeting drafts",
        "description": "Capture commitments and show where each claim came from.",
        "metrics": [
          {
            "name": "Agreed actions captured",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly captured agreed actions divided by all agreed actions in the independently labelled transcript. Omitted actions and missing outputs count as misses."
          },
          {
            "name": "Action items genuinely agreed",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported commitments divided by all generated action items. A suggestion must not become a promise. Duplicate actions are not extra correct results."
          },
          {
            "name": "Facts supported by the transcript",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported atomic factual claims divided by all factual claims in notes and drafts. A citation must point to a passage that supports the claim; missing or irrelevant citations fail."
          },
          {
            "name": "Correct owners and dates",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct owner and deadline fields divided by both fields for every labelled action. Omitted actions fail; unknown is correct only when the source is unknown. Report stated and unknown fields separately."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 1,
          "unit": "meeting",
          "definition": "From accepted transcript to complete reviewable output, including queueing, model calls, retries and export. Recording, transcription and human approval are separate."
        },
        "controls": "Review every draft before sharing it. Suggestions, unresolved discussion and client commitments must not be confused."
      }
    },
    {
      "id": "client-transaction-coding",
      "title": "Client Bookkeeping Transaction Coding",
      "description": "A guide to buying an AI workflow that suggests bookkeeping codes for client transactions and drafts questions about unclear items.",
      "url": "https://renx.openmercury.com/purchasing-guides/client-transaction-coding/",
      "category": {
        "id": "professional-business",
        "name": "Professional & Business Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/professional-business/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Suggest codes for review",
            "description": "Read a client’s bank and card exports, suggest an account, class and vendor for each transaction with the reason, send uncertain items to a review list and draft the questions for the client.",
            "setup": {
              "min": 1008,
              "max": 3000
            }
          },
          {
            "key": "connected",
            "name": "Connect my ledger",
            "description": "Adds a ledger connection that reads each client’s uncategorised transactions and, after a bookkeeper approves them, posts the codes without creating duplicates and keeps a record of who approved what.",
            "setup": {
              "min": 1656,
              "max": 4920
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.314,
          "max": 0.614,
          "unit": "client month",
          "composition": [
            {
              "key": "transactionsPerUnit",
              "count": 400,
              "noun": "bank and card transactions"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 120
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct codes on familiar vendors and patterns, with new or unusual items left for a bookkeeper.",
        "metrics": [
          {
            "name": "Suggested codes accepted",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Transactions where the suggested account, class and vendor match the bookkeeper’s labelled coding, divided by all transactions the workflow coded without sending them to review."
          },
          {
            "name": "Coded without review",
            "target": 75,
            "unit": "%",
            "direction": "gte",
            "definition": "Transactions given a suggested code without being sent to the review list, divided by all transactions in the test client months. Reported together with suggested codes accepted, so a high share cannot hide wrong codes."
          },
          {
            "name": "Client questions found",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled transactions that need information from the client, such as an unexplained transfer or a payment with no matching vendor, that appear on the client question list, divided by all such labelled transactions."
          },
          {
            "name": "Codes with a reason",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every suggested code must state the rule, past coded entry or transaction description it relies on."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 4,
          "unit": "client month"
        },
        "controls": "Suggested codes are prepared work for a bookkeeper to approve. Your firm still owns the books, the reconciliation and the client relationship."
      }
    },
    {
      "id": "clinical-trial-prescreening",
      "title": "Clinical Trial Prescreening",
      "description": "Checks patient records against trial criteria, shows the source evidence and flags missing information for your research team.",
      "url": "https://renx.openmercury.com/purchasing-guides/clinical-trial-prescreening/",
      "category": {
        "id": "healthcare-life-sciences",
        "name": "Healthcare & Life Sciences",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/healthcare-life-sciences/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted adaptation using supplied sources, clinician-approved rules and independent labels; live clinical governance and new dataset creation need separate agreement.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload approved sources",
            "description": "Provide authorised records and current trial criteria. Review source-linked checks and missing information before discussing next steps.",
            "setup": {
              "min": 1584,
              "max": 4680
            }
          },
          {
            "key": "connected",
            "name": "Read approved clinical records",
            "description": "Read one authorised record source and supplied protocol pack. Keep patient and protocol versions, reopen changed findings and never write to clinical systems.",
            "setup": {
              "min": 2160,
              "max": 6240
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.07,
          "max": 1.87,
          "unit": "prescreening pack",
          "composition": [
            {
              "key": "patientsPerUnit",
              "count": 1,
              "noun": "patient record pack"
            },
            {
              "key": "trialsPerUnit",
              "count": 3,
              "noun": "candidate trials"
            },
            {
              "key": "criteriaPerUnit",
              "count": 90,
              "noun": "criteria across the trial pack"
            },
            {
              "key": "pagesPerUnit",
              "count": 45,
              "noun": "text-readable source pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100,
            "pages": 45
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Check agreed criteria, evidence, missing information and source versions.",
        "metrics": [
          {
            "name": "Criterion checks",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct supported, not supported, unknown or conflicting states divided by all agreed criterion checks. Preserve inclusion and exclusion polarity, compound logic, exceptions, dates and units. Failed or missing checks fail; never pass an incomplete criterion list."
          },
          {
            "name": "Important issues found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged issues divided by all clinician-labelled failed, uncertain or conflicting criteria. Report each issue type separately. Do not hide a trial or patient when a check fails; show the evidence for clinical review."
          },
          {
            "name": "Exact source evidence",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every check links to the exact patient record passage, its date and the controlling protocol criterion. A citation must support the stated relation, not merely mention the same disease. No invented facts or unsupported confidence scores."
          },
          {
            "name": "Missing facts kept unknown",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Missing dates, stale tests, unclear history and conflicting findings remain unresolved. Silence is not proof of absence. Do not infer performance status, a diagnosis or a biomarker from unverified material."
          },
          {
            "name": "Current source versions",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Record identifiers, dates, protocol amendments and site-status snapshot provenance stay attached. Material changes invalidate affected reviews. A recruiting listing is not proof of an available site slot."
          },
          {
            "name": "Clinical approval controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All challenge cases block unapproved eligibility or treatment decisions, patient exclusion, contact, referral, enrolment and clinical-system writes. Separate patients and sites, minimise retained data and keep credentials server-side."
          }
        ],
        "speed": {
          "p95Seconds": 240,
          "maxPages": 45,
          "concurrentJobs": 2,
          "unit": "prescreening pack"
        },
        "controls": "Agreed held-out test targets, not a probability that a patient qualifies. Qualified clinical staff review every worksheet; study teams confirm final eligibility."
      }
    },
    {
      "id": "clinical-visit-note-drafting",
      "title": "Clinical Visit Note Drafting",
      "description": "A purchasing guide to buying a workflow that turns a recorded consultation into a source-linked clinical note for your clinician to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/clinical-visit-note-drafting/",
      "category": {
        "id": "healthcare-life-sciences",
        "name": "Healthcare & Life Sciences",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/healthcare-life-sciences/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Record and review a visit",
            "description": "Capture an authorised consultation or upload audio, draft the agreed note sections and review statements beside their sources. Export an approved version for your existing charting process.",
            "setup": {
              "min": 1872,
              "max": 5280
            }
          },
          {
            "key": "connected",
            "name": "Send approved drafts to your clinical system",
            "description": "Add a connection to an authorised clinical API. Verify the selected patient and encounter, then send only the exact approved note as an unsigned draft. Record failures and prevent duplicate writes.",
            "setup": {
              "min": 2592,
              "max": 7440
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 2.1386,
          "max": 2.5386,
          "unit": "visit note",
          "composition": [
            {
              "key": "minutesPerUnit",
              "count": 20,
              "noun": "recorded minutes"
            },
            {
              "key": "pagesPerUnit",
              "count": 2,
              "noun": "pages of supplied visit context"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Source-linked notes with missing and uncertain details visible.",
        "metrics": [
          {
            "name": "Supported clinical statements",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Count all clinical claims, including examination findings and plans. A plausible statement absent from the recording or supplied context is unsupported."
          },
          {
            "name": "Important details captured",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Use clinician-labelled required facts, including stated follow-up and relevant negative findings. Missing drafts and unnecessary omissions count as failures; an empty note cannot pass."
          },
          {
            "name": "Correct clinical details",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check every labelled medication, dose, frequency, negation, speaker and time reference against the source. Turning patient-reported symptoms into a diagnosis is an error."
          },
          {
            "name": "Valid evidence links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Open the source passage in the correct encounter and version. Test overwritten recordings, revoked access and links that jump to unrelated speech."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "maxPages": 2,
          "concurrentJobs": 2,
          "unit": "visit note"
        },
        "controls": "Every draft needs clinician review. Missing speech is not a negative finding; an uncertain detail must stay uncertain. A high average score does not excuse a critical clinical error."
      }
    },
    {
      "id": "commercial-lease-abstraction",
      "title": "Commercial Lease Abstraction",
      "description": "A purchasing guide to buying a workflow that reads commercial leases and amendments and prepares an abstract in your template, with each value linked to its page for your lease team to check.",
      "url": "https://renx.openmercury.com/purchasing-guides/commercial-lease-abstraction/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "abstracts",
        "scopes": [
          {
            "key": "abstracts",
            "name": "Abstract uploaded leases",
            "description": "Read executed leases and amendments, fill your abstract template with page citations, apply amendments to the current value and list conflicts and missing items.",
            "setup": {
              "min": 1080,
              "max": 3480
            }
          },
          {
            "key": "connected",
            "name": "Load approved abstracts into my lease system",
            "description": "Adds field mapping to your lease administration system, an approval record before each write, duplicate protection and a receipt for each loaded abstract.",
            "setup": {
              "min": 1656,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.076,
          "max": 2.076,
          "unit": "lease",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 40,
            "pages": 80
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Reliable critical values, with unclear clauses held for review.",
        "metrics": [
          {
            "name": "Critical fields correct",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "A field passes only when its value matches the lease as amended, in the agreed format. Missing output counts as wrong."
          },
          {
            "name": "Critical dates found",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly found expiration, renewal, termination and rent-change dates divided by all dates labelled by your lease team."
          },
          {
            "name": "Conflicts and gaps flagged",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged conflicting clauses, missing exhibits or pages and unclear terms divided by all labelled issues."
          },
          {
            "name": "Values with a supporting page",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Each value links to the page and document version that supports it; an unsupported value fails."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "maxPages": 80,
          "concurrentJobs": 2,
          "unit": "lease"
        },
        "controls": "An abstract is a summary for operations, not a legal interpretation. Check critical dates and rent figures against the cited pages before relying on them."
      }
    },
    {
      "id": "commercial-submission-intake",
      "title": "Commercial Submission Intake & Underwriting Prep",
      "description": "A purchasing guide to a workflow that reads broker submissions, checks your underwriting guidelines and prepares a source-linked summary.",
      "url": "https://renx.openmercury.com/purchasing-guides/commercial-submission-intake/",
      "category": {
        "id": "insurance",
        "name": "Insurance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/insurance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "summary",
        "scopes": [
          {
            "key": "summary",
            "name": "Prepare and summarise",
            "description": "Read applications, schedules and loss runs. Check your appetite rules, list missing items, flag clearance conflicts against an imported log and draft the underwriter summary.",
            "setup": {
              "min": 1584,
              "max": 4440
            }
          },
          {
            "key": "connected",
            "name": "Connect to my submission system",
            "description": "Adds a live clearance lookup against open submissions and in-force policies, creates or updates the prepared submission record as a draft, and places it in the right underwriter queue by line and state.",
            "setup": {
              "min": 2376,
              "max": 6720
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.386,
          "max": 0.486,
          "unit": "submission",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 40,
              "noun": "pages across application, schedules, loss runs and email"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct key fields and loss totals, with unclear pages and uncertain guideline checks sent to a person.",
        "metrics": [
          {
            "name": "Key fields correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Key underwriting fields such as insured name, address, class, locations, insured values, vehicles, payroll or revenue, limits requested and effective date that match what your staff recorded, divided by all key fields in the test submissions."
          },
          {
            "name": "Loss totals match",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Policy-year claim counts and paid, reserved and incurred totals must match independently checked loss runs. Calculate with code; hold conflicting amounts rather than guess."
          },
          {
            "name": "Missing items found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Required items absent from a submission that are listed as missing, divided by all absent required items labelled by your staff."
          },
          {
            "name": "Guideline checks agree",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Guideline checks whose result agrees with your underwriters' reading, divided by all checks made on the test submissions. Checks marked for a person count as agreeing only when the underwriter also found the point unclear."
          },
          {
            "name": "Clearance conflicts found",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Known duplicate or conflicting submissions in the test set that are flagged, divided by all known conflicts."
          },
          {
            "name": "Values with a source",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each extracted fact and guideline finding must cite the exact supporting document version, page or row. Unsupported citations fail."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every permission and approval challenge must pass. Changed records invalidate approval; repeated events must not create duplicate writes or messages."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 4,
          "unit": "submission"
        },
        "controls": "Guideline findings are inputs for an underwriter, not a decision on the risk. Your underwriters still read the submission and decide whether to quote, refer or decline."
      }
    },
    {
      "id": "company-filings-risk-updates",
      "title": "Company Filings & Risk Updates",
      "description": "A purchasing guide to buying a workflow that checks company filings, compares reporting periods and prepares source-linked research notes for your analysts.",
      "url": "https://renx.openmercury.com/purchasing-guides/company-filings-risk-updates/",
      "category": {
        "id": "trading-risk",
        "name": "Trading & Risk Management",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/trading-risk/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Core machine cost excludes analyst review, maintenance, paid data licences and the calling agent. Confirm actual sources and runtime in the pilot.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Compare supplied filings",
            "description": "Provide current and prior filing sections for the same company. Receive a figures table, source-linked note and risk-change checklist. Missing or conflicting evidence stays visible.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          },
          {
            "key": "connected",
            "name": "Watch a company filing list",
            "description": "Adds a read-only SEC EDGAR watcher for your company list, document selection rules, version tracking and visible failed jobs. It watches annual and quarterly filings, not live market prices or news.",
            "setup": {
              "min": 2592,
              "max": 7200
            }
          }
        ],
        "baseline": {
          "standard": "Core research checks",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.22,
          "max": 0.28,
          "unit": "update",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000,
            "pages": 60
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Core research checks",
        "description": "Check required figures, citations and risk changes.",
        "metrics": [
          {
            "name": "Financial fields correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct complete value tuples or correct unavailable labels divided by all required field slots. Wrong periods, currency, scale, source versions and blank output fail. Report present-value accuracy separately."
          },
          {
            "name": "Claims supported by sources",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported factual claims with correct source locations and versions divided by all factual claims. A working link alone is insufficient. Pair with required-topic coverage so empty output cannot pass."
          },
          {
            "name": "Required topics covered",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct answers or explicit, verified lack of evidence divided by all required topic slots. Unsupported interpretations and omitted topics fail."
          },
          {
            "name": "Risk changes found",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly identified in-scope disclosure changes divided by all analyst-labelled changes. Missing output remains a miss; labels define materiality rather than letting the model decide it after the test."
          },
          {
            "name": "Risk-change flags correct",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Confirmed changes divided by all flagged changes. Merely reworded disclosures are not changes unless the agreed label definition says so."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "maxPages": 60,
          "concurrentJobs": 3,
          "unit": "update",
          "definition": "From complete accepted source packet to stored note, including parsing, retrieval, queueing and retries. Filing publication and polling delay are measured separately; this is not market reaction time."
        },
        "controls": "Analysts review every update. A supported statement can still be incomplete or irrelevant to an investment decision; no return or trading outcome is promised."
      }
    },
    {
      "id": "construction-submittal-review",
      "title": "Construction Submittal Review",
      "description": "A purchasing guide to a workflow that checks subcontractor product data against your specifications and drafts a review sheet for your engineer.",
      "url": "https://renx.openmercury.com/purchasing-guides/construction-submittal-review/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Review sheet and draft response",
            "description": "Match each submittal to its spec sections and drawing notes, check required products, standards, performance values, missing items and substitutions, and prepare a review sheet with a draft response comment.",
            "setup": {
              "min": 1296,
              "max": 4080
            }
          },
          {
            "key": "register",
            "name": "Add the register and project system",
            "description": "Adds a draft submittal register built from the spec book for your team to confirm, reads new submittals from your project management system and attaches the review sheet as a draft for the assigned reviewer.",
            "setup": {
              "min": 2088,
              "max": 6360
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.484,
          "max": 0.684,
          "unit": "submittal",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 40,
              "noun": "pages of product data or shop drawings"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Each requirement checked with references, uncertain items marked not shown for your reviewer.",
        "metrics": [
          {
            "name": "Requirements read correctly",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled requirements from the matching spec sections that are marked correctly as met, not met or not shown, divided by all labelled requirements on the test submittals."
          },
          {
            "name": "Deviations found",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled deviations, missing items and unrequested substitutions that are flagged, divided by all labelled ones. A flag on the wrong requirement does not count."
          },
          {
            "name": "Flags upheld",
            "target": 75,
            "unit": "%",
            "direction": "gte",
            "definition": "Not met, not shown and substitution flags that your reviewers judge valid, divided by all such flags on the test submittals."
          },
          {
            "name": "Findings with references",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every finding must cite the spec section and paragraph and the submittal page it relies on."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "No unapproved send, stamp, bid, status change or overwrite. A source change cancels a pending approval. Test malicious document instructions and repeated requests."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 3,
          "unit": "submittal"
        },
        "controls": "The review sheet prepares a decision; it is not the decision. Your reviewer reads the findings, edits the draft response and chooses the action under your contract."
      }
    },
    {
      "id": "construction-takeoff-estimate",
      "title": "Construction Takeoff & Draft Estimates",
      "description": "A purchasing guide to a workflow that counts and measures selected items on your drawings, then prepares quantities and a draft estimate for your estimator.",
      "url": "https://renx.openmercury.com/purchasing-guides/construction-takeoff-estimate/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample bids.",
        "recommendedScope": "takeoff",
        "scopes": [
          {
            "key": "takeoff",
            "name": "Takeoff and draft estimate",
            "description": "Read the drawings and specifications for your trade, count and measure each item, map quantities to your cost items and unit prices, and produce a takeoff sheet, marked-up sheets and a draft estimate with assumptions and exclusions.",
            "setup": {
              "min": 1656,
              "max": 4680
            }
          },
          {
            "key": "connected",
            "name": "Connected to my estimating software",
            "description": "Adds pickup of bid sets from your plan room or shared folder, writes the draft estimate into your estimating software for an estimator to approve, and lists quantity changes when an addendum or revised sheet arrives.",
            "setup": {
              "min": 2376,
              "max": 6840
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.8231424,
          "max": 3.8231424,
          "unit": "bid",
          "composition": [
            {
              "key": "sheetsPerUnit",
              "count": 60,
              "noun": "drawing sheets"
            },
            {
              "key": "specPagesPerUnit",
              "count": 40,
              "noun": "specification pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 30
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "A draft close enough to check rather than redo, with unclear items left as questions.",
        "metrics": [
          {
            "name": "Counts correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Counted lines whose quantity equals the hand takeoff, divided by all counted lines in the test bids."
          },
          {
            "name": "Measurements within tolerance",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Measured lengths, areas and volumes within the tolerance agreed per cost item, divided by all measured lines. Sheets with a wrong or missing scale count as failures unless flagged."
          },
          {
            "name": "Lines on the right cost item",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Takeoff lines mapped to the cost item and unit an estimator would use, divided by all priced lines."
          },
          {
            "name": "Scope items found",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Items in the hand takeoff that appear in the draft, divided by all items in the hand takeoff. Items raised as questions count as found."
          },
          {
            "name": "Lines with sheet and detail reference",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every takeoff line must name the sheet and the detail, schedule or location it came from."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "No unapproved send, stamp, bid, status change or overwrite. A source change cancels a pending approval. Test malicious document instructions and repeated requests."
          }
        ],
        "speed": {
          "p95Seconds": 1800,
          "concurrentJobs": 2,
          "unit": "bid"
        },
        "controls": "The takeoff and estimate are drafts for an estimator to check. Your estimator still reviews the marked-up sheets, settles assumptions and exclusions, and sets the price and margin."
      }
    },
    {
      "id": "contract-obligations-renewal-tracking",
      "title": "Contract Obligations & Renewal Tracking",
      "description": "A purchasing guide to buying a workflow that turns signed contracts and amendments into source-linked obligations and renewal reminders for your team to check.",
      "url": "https://renx.openmercury.com/purchasing-guides/contract-obligations-renewal-tracking/",
      "category": {
        "id": "legal-compliance",
        "name": "Legal & Compliance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/legal-compliance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for your contract families and internal tracking, not a hosted contract platform licence.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload signed contracts",
            "description": "Read the supplied agreement and amendments, list duties and renewal windows, and show the source clauses. Your team approves the list and local internal reminders.",
            "setup": {
              "min": 1008,
              "max": 2760
            }
          },
          {
            "key": "connected",
            "name": "Connect my contract repository",
            "description": "Read authorised contract versions from your repository. New or changed files produce a fresh review draft; reminders update only after approval.",
            "setup": {
              "min": 1368,
              "max": 3840
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.678,
          "max": 0.978,
          "unit": "contract family",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 40,
              "noun": "text-readable pages"
            },
            {
              "key": "documentsPerUnit",
              "count": 4,
              "noun": "related signed documents"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Capture agreed obligations and notice windows, with current clauses and visible gaps.",
        "metrics": [
          {
            "name": "Obligations captured",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Captured obligations divided by all independently labelled in-scope obligations. Missed, deferred and unprocessed items remain in the denominator."
          },
          {
            "name": "Deadline accuracy",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct normalised dates or correctly unresolved statuses divided by all labelled timing fields. Preserve the notice period, anchor, timezone and business-day rule; guessing an unavailable anchor fails."
          },
          {
            "name": "Current terms used",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct governing terms divided by all labelled affected fields. A replaced base clause cannot remain active after a supplied signed amendment changes it."
          },
          {
            "name": "Valid clause links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each obligation links to the supporting clause, document version and date-calculation inputs. A citation to unrelated text does not pass."
          },
          {
            "name": "Uncertainty marked",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All labelled missing, unsigned, conflicting or ambiguous evidence remains visible for review. Do not substitute confidence scores for disclosure of a missing document."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "contract family"
        },
        "controls": "These are test-set targets for internal tracking. Your team confirms interpretation, ownership and reminder dates; missing documents are not evidence that a duty does not exist."
      }
    },
    {
      "id": "contract-playbook-review",
      "title": "Contract Playbook Review",
      "description": "A purchasing guide to buying a workflow that checks contracts against your review rules, explains deviations and prepares changes for your legal team.",
      "url": "https://renx.openmercury.com/purchasing-guides/contract-playbook-review/",
      "category": {
        "id": "legal-compliance",
        "name": "Legal & Compliance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/legal-compliance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost only; human review and maintenance are separate. Confirmed in your pilot.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Find deviations",
            "description": "Check the contract against your approved playbook and return findings with clause references. Do not modify the contract.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "redline",
            "name": "Also draft changes",
            "description": "Adds a proposed revision file using your approved clause library, with visible changes and an unchanged original. Your legal team decides what to accept.",
            "setup": {
              "min": 1872,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Playbook checks",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.22,
          "max": 0.3,
          "unit": "contract",
          "composition": [
            {
              "key": "checksPerUnit",
              "count": 20,
              "noun": "playbook checks"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500,
            "pages": 20
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Playbook checks",
        "description": "Find deviations, link evidence and suggest your approved position.",
        "metrics": [
          {
            "name": "Playbook deviations caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Detected labelled deviations divided by all deviations the reviewer marked under the chosen playbook; missed or unanswered checks count as misses."
          },
          {
            "name": "Flags confirmed by reviewers",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Flags the reviewer confirms divided by all flags; duplicates and unsupported allegations count as false flags."
          },
          {
            "name": "Correct clause references",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Findings whose cited clause supports the finding, or whose missing-clause claim is correct, divided by all findings requiring evidence. Missing evidence fails."
          },
          {
            "name": "Playbook-aligned recommendations",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Expected issue responses using the correct preferred or fallback position divided by all labelled responses needed. Omitted recommendations fail; suggested redlines must preserve the intended meaning."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "maxPages": 20,
          "concurrentJobs": 1,
          "unit": "contract",
          "definition": "From accepted file to findings and any selected revision output, including parsing, queueing and retries. Lawyer review time is separate."
        },
        "controls": "Your legal team approves the playbook and every proposed change. No automatic legal advice, acceptance, counterparty messages or signatures."
      }
    },
    {
      "id": "crm-record-maintenance",
      "title": "CRM Record Maintenance",
      "description": "Keep contacts and deals current with source-linked updates from approved emails and call notes.",
      "url": "https://renx.openmercury.com/purchasing-guides/crm-record-maintenance/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Start with a fixed field allowlist and communication exports. Store evidence timestamps and handle contradictions explicitly. This does not replace the CRM or infer missing commercial commitments.",
            "setup": {
              "min": 1224,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Write approved CRM changes",
            "description": "Connect a documented CRM API and apply only the approved field diff after checking the current record version. Save an audit receipt and a rollback record.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0528,
          "max": 0.0678,
          "unit": "record update",
          "composition": [
            {
              "key": "messagesPerUnit",
              "count": 10,
              "noun": "email or note extracts"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 2000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Correct contact and deal matches",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct suggested record matches divided by all suggested matches; ambiguous identities remain unresolved."
          },
          {
            "name": "Supported field changes",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct, source-supported field changes divided by all proposed changes, evaluated against the latest approved record."
          },
          {
            "name": "Required updates proposed",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Valid in-scope updates proposed divided by all independently labeled updates; declining every change cannot pass."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 30,
          "concurrentJobs": 1,
          "unit": "record update"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "crypto-close-reconciliation",
      "title": "Crypto Month-End Reconciliation",
      "description": "A guide to buying an AI workflow that reconciles crypto account balances at month end and explains differences for your accountants.",
      "url": "https://renx.openmercury.com/purchasing-guides/crypto-close-reconciliation/",
      "category": {
        "id": "web3-crypto",
        "name": "Web3 & Crypto",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/web3-crypto/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Reconcile exported records",
            "description": "Read wallet, custodian and exchange exports with your subledger export and trial balance, match balances and transactions, and list each break with a likely cause and source records.",
            "setup": {
              "min": 1224,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Connect my ledgers",
            "description": "Adds direct reads from your crypto subledger and public chain data, draft adjusting entries in your ledger that an accountant approves, and safe reruns that do not duplicate entries.",
            "setup": {
              "min": 1872,
              "max": 5520
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.716,
          "max": 1.716,
          "unit": "account period",
          "composition": [
            {
              "key": "transactionsPerUnit",
              "count": 500,
              "noun": "transactions"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 40
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Breaks found and explained with source records, uncertain causes asked as questions.",
        "metrics": [
          {
            "name": "Transactions matched correctly",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Test transactions matched to the right counterpart, or correctly left unmatched, divided by all test transactions. Duplicates and missing transactions count as errors."
          },
          {
            "name": "Known breaks found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled breaks from past periods that are reported for the right account and asset, divided by all labelled breaks. A balance that does not agree must never be shown as reconciled."
          },
          {
            "name": "Break causes accepted",
            "target": 80,
            "unit": "%",
            "direction": "gte",
            "definition": "Suggested causes such as timing, fees, internal transfers, spam tokens or missing records that accountants accept, divided by all suggested causes."
          },
          {
            "name": "Draft entries correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Draft adjusting entries with the right accounts, amounts, assets and dates, divided by all draft entries."
          },
          {
            "name": "Items linked to sources",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every break and draft entry must cite the statement line, transaction hash or subledger record behind it."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 2,
          "unit": "account period"
        },
        "controls": "A suggested cause is a starting point for an accountant, not a conclusion. Your accountants still review every break, approve entries and sign off the period."
      }
    },
    {
      "id": "crypto-compliance-alert-review",
      "title": "Crypto Compliance Alert Review",
      "description": "A purchasing guide to buying a workflow that prepares each crypto transaction monitoring alert with evidence, policy checks and a suggested next step for your compliance analysts to decide.",
      "url": "https://renx.openmercury.com/purchasing-guides/crypto-compliance-alert-review/",
      "category": {
        "id": "web3-crypto",
        "name": "Web3 & Crypto",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/web3-crypto/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review exported alerts",
            "description": "Map your alert export and customer snapshot, summarise exposure and recent transfers, check each policy item and suggest close, escalate or request information with reasons.",
            "setup": {
              "min": 864,
              "max": 2760
            }
          },
          {
            "key": "connected",
            "name": "Connect my monitoring tool",
            "description": "Adds read-only alert and customer retrieval and attaches the draft case note to the alert without changing its status, with duplicate-safe retries.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.094,
          "max": 0.174,
          "unit": "alert",
          "composition": [
            {
              "key": "transfersPerUnit",
              "count": 50,
              "noun": "recent customer transfers"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct facts, high escalation recall and each suggestion reviewed by an analyst.",
        "metrics": [
          {
            "name": "Alert facts correct",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "An alert passes only when amounts, addresses, assets, exposure category, hops and timestamps all match the source records."
          },
          {
            "name": "Escalations caught",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Alerts sent to escalation or an analyst divided by all alerts a senior analyst labelled for escalation; missing output counts as a miss."
          },
          {
            "name": "Next step agrees",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Suggested next steps that match the senior analyst's labelled decision divided by all reviewed alerts."
          },
          {
            "name": "Statements supported",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Factual statements supported by the alert, customer record or written policy divided by all factual statements in the summary."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 5,
          "unit": "alert"
        },
        "controls": "Missing an alert that should be escalated matters more than an extra review. Suggestions are drafts; your analysts and compliance officer make every decision."
      }
    },
    {
      "id": "custom-part-quote-preparation",
      "title": "Custom Part Quote Preparation",
      "description": "A purchasing guide to buying a workflow that reads each customer quote request and drawing, lists the part requirements and open questions, and fills a draft quote from your own rates for an estimator to approve.",
      "url": "https://renx.openmercury.com/purchasing-guides/custom-part-quote-preparation/",
      "category": {
        "id": "manufacturing-robotics",
        "name": "Manufacturing & Robotics",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/manufacturing-robotics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "worksheet",
        "scopes": [
          {
            "key": "worksheet",
            "name": "Prepare quote worksheets",
            "description": "Read the request and drawings, list each part's material, quantities, tolerances, finishes and certificates with their source, draft questions for anything missing, match similar past quotes and fill a price build-up from your rate rules.",
            "setup": {
              "min": 1296,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Connect my business system",
            "description": "Adds lookup of past jobs, routings and customer records in your business system, imports past quotes for matching, and saves a draft quote there only after an estimator approves it.",
            "setup": {
              "min": 2016,
              "max": 5640
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.22,
          "max": 0.42,
          "unit": "quote request",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 300,
            "pages": 10
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Sourced requirements and a rule-based build-up, with unclear items raised as questions.",
        "metrics": [
          {
            "name": "Requirement fields correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Requirement fields such as material, quantity, tightest tolerance, finish and certificates that match the confirmed value, divided by all fields in the test requests."
          },
          {
            "name": "Missing or unclear items caught",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled missing or conflicting requirements raised as questions, divided by all labelled gaps."
          },
          {
            "name": "Price lines following your rules",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Draft price lines that equal the result of your rate rules applied to the confirmed inputs, divided by all price lines."
          },
          {
            "name": "Values with a source",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every filled value must cite the drawing page, request email or rate rule it came from."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "maxPages": 20,
          "concurrentJobs": 3,
          "unit": "quote request"
        },
        "controls": "The worksheet is a draft for an estimator, not a quote. Your estimators still check the drawing, decide machine time where there is no basis, set the price and approve what is sent."
      }
    },
    {
      "id": "custom-text-classification",
      "title": "Custom Text Classification Model",
      "description": "A purchasing guide to buying a small AI model trained to sort your text into your own categories, running in your environment.",
      "url": "https://renx.openmercury.com/purchasing-guides/custom-text-classification/",
      "category": {
        "id": "ai-models",
        "name": "AI Models & Specialisation",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ai-models/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Engineering estimates before tax, not provider quotes. Training compute, data labelling, maintenance and downstream systems are separate from inference cost.",
        "recommendedScope": "model",
        "scopes": [
          {
            "key": "model",
            "name": "Train and deploy my classifier",
            "description": "Adapt a small open model to your approved labels, evaluate it on held-out examples and deploy it with a review threshold.",
            "setup": {
              "min": 1008,
              "max": 2880
            }
          },
          {
            "key": "retraining",
            "name": "Also add a retraining pipeline",
            "description": "Adds versioned datasets, repeatable training, comparison reports and rollback. A person approves each new model before it replaces the current version.",
            "setup": {
              "min": 1584,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Everyday classification",
          "deployment": "Your cloud",
          "modelAccess": "No external model calls"
        },
        "machineCostPerUnit": {
          "min": 0.01335248,
          "max": 0.02335248,
          "unit": "batch",
          "composition": [
            {
              "key": "textsPerUnit",
              "count": 1000,
              "noun": "texts"
            }
          ],
          "assumptions": {
            "modelAccess": "No external model calls",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Everyday classification",
        "description": "Balance the categories and send unknown text for review.",
        "metrics": [
          {
            "name": "Balanced classification score",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Calculate precision and recall for each category, combine them into its F-score, then average equally across categories. Abstentions on labelled in-scope text count as misses."
          },
          {
            "name": "Minimum category recall",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct predictions for a category divided by all held-out texts labelled with that category. Every category must meet the target; do not hide rare categories in an overall average."
          },
          {
            "name": "Out-of-scope texts sent for review",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct review states divided by all labelled out-of-scope texts. Report false review flags on in-scope text separately and include them in classification scoring."
          },
          {
            "name": "Valid prediction records",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Valid records divided by all submitted records. Missing results, malformed fields and unrecognised labels fail."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 1,
          "unit": "batch",
          "definition": "From accepted batch to complete results, including model loading, tokenisation, queueing, retries and export. Training time is separate."
        },
        "controls": "Keep training, tuning and acceptance data separate. Do not hide wrong labels or review cases by excluding them from the scores."
      }
    },
    {
      "id": "data-cleaning-validation",
      "title": "Data Cleaning & Validation",
      "description": "A guide to buying an AI workflow that turns customer spreadsheets into clean import files, with approved formatting rules, missing values flagged and every change recorded.",
      "url": "https://renx.openmercury.com/purchasing-guides/data-cleaning-validation/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost only; the business time to approve rules, human review and maintenance are separate. Confirmed in your pilot.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Prepare clean import files",
            "description": "Import file, change record and review report for your team. No writes to your destination system.",
            "setup": {
              "min": 576,
              "max": 1920
            }
          },
          {
            "key": "connected",
            "name": "Connect my import pipeline",
            "description": "Adds scheduled intake from an agreed storage source, an approved write to a staging destination and recovery checks.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          }
        ],
        "baseline": {
          "standard": "Checked imports",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.436,
          "max": 1.344,
          "unit": "batch",
          "composition": [
            {
              "key": "recordsPerUnit",
              "count": 1000,
              "noun": "records"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Checked imports",
        "description": "Map columns and flag errors for your review.",
        "metrics": [
          {
            "name": "Fields mapped correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of source fields on held-out files mapped to the right target field. Declining to map an ambiguous field does not count as correct."
          },
          {
            "name": "Changes that follow approved rules",
            "target": 99.5,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of cell changes the workflow made that follow an approved rule. Cells that should have changed but did not are reported alongside."
          },
          {
            "name": "Known errors found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of defined business errors in the held-out set that are located, reported separately for missing, format, reference and duplicate errors."
          },
          {
            "name": "Flags that hold up",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of flags confirmed on natural samples, not on files with errors added by hand."
          },
          {
            "name": "Ready to import without edits",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of all input records correctly prepared for import without a manual change. Rejected records remain in the denominator. Approval of mappings and writes is still required."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "batch",
          "definition": "At your expected load, from batch received to result available, including queue time and retries. Human waiting time reported separately."
        },
        "controls": "In every case: no silently dropped rows and no unauthorised writes on the agreed challenge cases; ambiguous mappings, unknown values and possible duplicates always go to review; human time reported separately."
      }
    },
    {
      "id": "data-pipeline-warehouse-setup",
      "title": "Data Pipeline & Warehouse Setup",
      "description": "Buy a reusable tool that loads business data into your warehouse, checks each load and records its source.",
      "url": "https://renx.openmercury.com/purchasing-guides/data-pipeline-warehouse-setup/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-08",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Load supplied exports",
            "description": "Run a repeatable import from approved exports into isolated warehouse tables.",
            "setup": {
              "min": 1296,
              "max": 3720
            }
          },
          {
            "key": "connected",
            "name": "Connect and schedule sources",
            "description": "Add authorized source adapters, scheduled incremental loads and freshness alerts.",
            "setup": {
              "min": 1872,
              "max": 5400
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0634,
          "max": 0.1034,
          "unit": "load",
          "composition": [
            {
              "key": "rowsPerUnit",
              "count": 10000,
              "noun": "source rows"
            },
            {
              "key": "tablesPerUnit",
              "count": 2,
              "noun": "source tables"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Correct mapped values",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct destination values divided by all independently checked mapped values, with omitted values counted as errors."
          },
          {
            "name": "Duplicate-free reruns",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Rerun and interrupted-load cases producing the reference final table divided by all tested rerun and interrupted-load cases."
          },
          {
            "name": "Traceable destination records",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Destination records with the correct source and mapping version divided by all destination records tested."
          },
          {
            "name": "Approved write boundaries",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed permission and schema-change control cases divided by all tested control cases; any unauthorized write fails acceptance."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 1,
          "unit": "load"
        },
        "controls": "Proposed targets apply to an independently labeled test set on the agreed workload, not every possible future input. Review each pilot result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "delivery-appointment-scheduling",
      "title": "Pickup & Delivery Appointments",
      "description": "A guide to buying an AI workflow that arranges pickup and delivery appointments by email and flags scheduling conflicts.",
      "url": "https://renx.openmercury.com/purchasing-guides/delivery-appointment-scheduling/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "email",
        "scopes": [
          {
            "key": "email",
            "name": "Arrange appointments by email",
            "description": "Email each facility a request with the load references and window, follow up unanswered requests, read replies and record the confirmed date, time and number, raising offers outside the window.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Connect my transportation system",
            "description": "Adds a connection that reads loads needing appointments from your transportation system, writes confirmed appointments back without duplicates, and sends reschedule requests after your team approves them.",
            "setup": {
              "min": 1944,
              "max": 5520
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0484,
          "max": 0.0684,
          "unit": "appointment",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 2000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct appointment details, with unclear replies and conflicts raised to your team.",
        "metrics": [
          {
            "name": "Appointment details correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct dates, times, time zones and confirmation numbers compared with the facility replies, divided by all such details in the test threads."
          },
          {
            "name": "Inside the load window",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Recorded appointments that fall inside the load’s pickup or delivery window, or were raised to your team, divided by all recorded appointments."
          },
          {
            "name": "Unclear replies raised",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled unclear replies, conflicting offers and portal-only facilities raised to your team, divided by all such labelled threads."
          },
          {
            "name": "Appointments with source",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every recorded appointment must link to the facility reply it came from."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 6,
          "unit": "appointment"
        },
        "controls": "A confirmed time and number must come from the facility’s reply. A proposed time is not a confirmation, and a recorded appointment without a reply behind it is an error."
      }
    },
    {
      "id": "dental-payment-posting",
      "title": "Dental Insurance Payment Posting",
      "description": "Match insurer payments to dental claims and prepare checked entries for your practice software.",
      "url": "https://renx.openmercury.com/purchasing-guides/dental-payment-posting/",
      "category": {
        "id": "healthcare-life-sciences",
        "name": "Healthcare & Life Sciences",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/healthcare-life-sciences/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Begin with structured remittance and claim exports, not scanned EOBs. Check payment totals, contractual adjustments and previously posted identifiers before preparing entries.",
            "setup": {
              "min": 1440,
              "max": 4080
            }
          },
          {
            "key": "connected",
            "name": "Approved practice-system posting",
            "description": "Use a documented practice-system API to post the exact approved batch with duplicate protection and an audit receipt. API access must be confirmed before work starts.",
            "setup": {
              "min": 1872,
              "max": 5520
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0732,
          "max": 0.1032,
          "unit": "remittance",
          "composition": [
            {
              "key": "claimLinesPerUnit",
              "count": 25,
              "noun": "claim payment lines"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Correct patient and claim matches",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct suggested matches divided by all suggested matches; ambiguous identifiers must remain unposted."
          },
          {
            "name": "Posting exceptions caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Duplicate, unmatched and unbalanced cases held divided by all independently labeled posting exceptions."
          },
          {
            "name": "Exact payment and adjustment totals",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct cent-level totals divided by all totals in approved batches; any unbalanced released batch fails."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 1,
          "unit": "remittance"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "diagnosis-coding-evidence-review",
      "title": "Diagnosis Coding Evidence Review",
      "description": "A purchasing guide to buying a workflow that checks outpatient diagnosis codes against clinical notes and prepares evidence for your coding team.",
      "url": "https://renx.openmercury.com/purchasing-guides/diagnosis-coding-evidence-review/",
      "category": {
        "id": "healthcare-life-sciences",
        "name": "Healthcare & Life Sciences",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/healthcare-life-sciences/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload notes and ICD-10-CM codes",
            "description": "Upload signed text notes, dates of service and proposed codes. Check the dated code release, flag unsupported details and export a reviewed evidence worksheet.",
            "setup": {
              "min": 1728,
              "max": 5040
            }
          },
          {
            "key": "connected",
            "name": "Read notes for ICD-10-CM review",
            "description": "Read signed notes and proposed codes through an authorised clinical API. Preserve patient, encounter and source versions. Changed records reopen the worksheet; nothing is written back.",
            "setup": {
              "min": 2304,
              "max": 6720
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.299,
          "max": 0.699,
          "unit": "encounter",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 10,
              "noun": "text pages of signed clinical documentation"
            },
            {
              "key": "codesPerUnit",
              "count": 10,
              "noun": "proposed diagnosis codes"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Supported findings, missing details and dated code checks.",
        "metrics": [
          {
            "name": "Correct review findings",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "A flagged error, suggested omission or documentation question must be justified by the record and applicable rule. Valid syntax is not enough; unsupported specificity is an error."
          },
          {
            "name": "Important coding issues found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Count all qualified-coder-labelled material issues, including unsupported diagnoses, missing supported codes and date-version errors. Failed jobs and unnecessary abstentions count as misses; an empty worksheet cannot pass."
          },
          {
            "name": "Valid codes and versions",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Check reportable codes and required characters against the release effective on the date of service. Unknown dates must remain unresolved, not silently use the latest release."
          },
          {
            "name": "Valid source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Open the exact signed source passage and applicable rule version. If the note changes, reopen review and retain earlier decisions as history."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "maxPages": 10,
          "concurrentJobs": 2,
          "unit": "encounter"
        },
        "controls": "A qualified coder reviews every encounter. Never infer an undocumented diagnosis or treat uncertain outpatient diagnoses as confirmed. Critical coding or patient-data errors fail the pilot even if averages pass."
      }
    },
    {
      "id": "distributor-order-entry",
      "title": "Distributor Order Entry",
      "description": "A purchasing guide to buying a workflow that turns customer orders from email, attachments, photos and voicemail into draft sales orders matched to your catalog, for your order desk to check.",
      "url": "https://renx.openmercury.com/purchasing-guides/distributor-order-entry/",
      "category": {
        "id": "food-agriculture",
        "name": "Food & Agriculture",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/food-agriculture/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Draft orders for review",
            "description": "Read order emails, attachments, photos and voicemail files, match lines to your catalog and customer order guides, and return draft orders with flagged lines.",
            "setup": {
              "min": 936,
              "max": 2760
            }
          },
          {
            "key": "connected",
            "name": "Enter approved orders in my ERP",
            "description": "Adds a read-only catalog, customer and price lookup, an approved order inbox and entry of approved orders with duplicate protection.",
            "setup": {
              "min": 1656,
              "max": 4680
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0322,
          "max": 0.0522,
          "unit": "order",
          "composition": [
            {
              "key": "linesPerUnit",
              "count": 40,
              "noun": "order lines"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 2000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate drafts with unclear lines held for the order desk.",
        "metrics": [
          {
            "name": "Correct order lines",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "A line passes only when product, quantity and unit of sale all match the order desk's label; missed and invented lines count as errors."
          },
          {
            "name": "Unclear lines flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged unclear, unknown, substitute or missing-quantity lines divided by all such labelled lines."
          },
          {
            "name": "Correct customer and delivery",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Customer account, ship-to location and requested delivery date must all be right for the order to pass."
          },
          {
            "name": "Orders needing no edits",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Drafts that the order desk approves without changing any line or detail, divided by all orders in the test, including unreadable ones."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "order"
        },
        "controls": "Check quantities and units of sale with rules, not model judgement. A line with the right product but the wrong pack size is an error."
      }
    },
    {
      "id": "docs-update-drafts",
      "title": "Product Docs Update Drafts",
      "description": "A guide to buying an AI workflow that keeps product documentation up to date by drafting changes for your writers to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/docs-update-drafts/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Use merged code changes",
            "description": "Read each merged pull request, search your docs for pages it affects, record when no update is needed and open a draft docs pull request with a source link beside each change.",
            "setup": {
              "min": 1152,
              "max": 3240
            }
          },
          {
            "key": "channels",
            "name": "Add chat and tickets",
            "description": "Adds team chat threads and support or product tickets you mark as triggers, links each draft to its ticket and connects to your docs platform for previews.",
            "setup": {
              "min": 1800,
              "max": 5160
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.128,
          "max": 0.228,
          "unit": "merged pull request",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Drafts for changes that affect customer-facing docs, with unclear changes asked as questions.",
        "metrics": [
          {
            "name": "Needed updates drafted",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Past merged changes that needed a docs update and received a draft, divided by all such changes in the test set."
          },
          {
            "name": "Drafts worth keeping",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Drafts your writers judge necessary and keep after editing, divided by all drafts opened."
          },
          {
            "name": "Statements correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "New or changed statements in drafts that match the merged code and marked sources, divided by all new or changed statements. A statement about behaviour the code does not have is a critical failure."
          },
          {
            "name": "Changes with a source",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every draft change must link to the merged code, ticket or thread behind it."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 4,
          "unit": "merged pull request"
        },
        "controls": "Drafts are proposals for your writers; they are not published docs. Your writers still edit, approve and publish."
      }
    },
    {
      "id": "domain-speech-transcription",
      "title": "Domain Speech Transcription",
      "description": "A purchasing guide to buying a workflow that turns your industry recordings into accurate transcripts, with your terminology, speaker labels and audio-linked review.",
      "url": "https://renx.openmercury.com/purchasing-guides/domain-speech-transcription/",
      "category": {
        "id": "ai-models",
        "name": "AI Models & Specialisation",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ai-models/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Transcribe uploaded recordings",
            "description": "Transcribe authorised recordings, highlight uncertain wording and link each segment to its audio. Export corrected text, subtitles and structured timestamps.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Read an approved recording folder",
            "description": "Add a read-only recording folder with duplicate detection, retry tracking and retention controls. Import only files you are authorised to process.",
            "setup": {
              "min": 1728,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.3016,
          "max": 0.5016,
          "unit": "recording",
          "composition": [
            {
              "key": "audioMinutesPerUnit",
              "count": 30,
              "noun": "audio minutes"
            },
            {
              "key": "speakersPerUnit",
              "count": 2,
              "noun": "speakers"
            },
            {
              "key": "keytermsPerUnit",
              "count": 50,
              "noun": "glossary terms"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Glossary-aware transcription with uncertain wording ready for review.",
        "metrics": [
          {
            "name": "Word accuracy",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Compute word error rate from substitutions, deletions and insertions against the independently corrected transcript; word accuracy is the remaining proportion. Keep the same normalisation rules and report negative scores rather than hiding insertion errors."
          },
          {
            "name": "Technical terms captured",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Count correctly transcribed spoken glossary terms against all reference occurrences. Missing, uncertain or silently dropped terms count as misses."
          },
          {
            "name": "Technical terms correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check output glossary terms against the audio, including recordings where those terms are absent. A glossary must not make the model invent a product name."
          },
          {
            "name": "Correct speaker attribution",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare reference speech time after matching anonymous speaker labels. Missed speech and speech assigned to the wrong speaker count as errors. Test silence and overlapping speech separately."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "recording"
        },
        "controls": "Score raw machine output before human corrections. Speaker labels are anonymous, not identity verification. Check timestamps against the agreed tolerance and reject incomplete audio."
      }
    },
    {
      "id": "drawing-checks-rfi-drafts",
      "title": "Drawing Set Checks & RFI Drafts",
      "description": "A purchasing guide to a workflow that finds coordination issues in your drawings and specifications, then drafts RFIs for your project engineer.",
      "url": "https://renx.openmercury.com/purchasing-guides/drawing-checks-rfi-drafts/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Check uploaded sets",
            "description": "Check agreed issue types across the uploaded drawing set and specification, then draft RFIs in your template with source references.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          },
          {
            "key": "connected",
            "name": "Connect my document system",
            "description": "Adds a connection that pulls each issued set or addendum from your document system, compares it with the previous revision, marks earlier findings as resolved or still open, and saves approved RFIs there as drafts for your project engineer to send.",
            "setup": {
              "min": 2376,
              "max": 6960
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 11.956,
          "max": 16.956,
          "unit": "drawing set",
          "composition": [
            {
              "key": "sheetsPerUnit",
              "count": 150,
              "noun": "drawing sheets"
            },
            {
              "key": "specPagesPerUnit",
              "count": 400,
              "noun": "specification pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 8
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Finds most known coordination issues, with uncertain points raised as questions for your engineer.",
        "metrics": [
          {
            "name": "Known issues found",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Known coordination issues in the test sets, from RFIs your team raised and issues added on purpose, that receive a correct finding, divided by all known issues. A vague finding does not count."
          },
          {
            "name": "Findings confirmed",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Findings your project engineers confirm as real issues worth an RFI or a note, divided by all findings on the test sets."
          },
          {
            "name": "Correct sheet and detail references",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Findings and draft RFIs whose sheet numbers, detail callouts and specification sections point to the right places, divided by all findings and draft RFIs."
          },
          {
            "name": "Draft RFIs usable with light edits",
            "target": 80,
            "unit": "%",
            "direction": "gte",
            "definition": "Draft RFIs for confirmed findings that your project engineers approve with light edits or none, divided by all draft RFIs for confirmed findings."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "No unapproved send, stamp, bid, status change or overwrite. A source change cancels a pending approval. Test malicious document instructions and repeated requests."
          }
        ],
        "speed": {
          "p95Seconds": 3600,
          "concurrentJobs": 2,
          "unit": "drawing set"
        },
        "controls": "Findings and draft RFIs are questions for your project engineer, not design decisions. The architect and engineers of record answer RFIs and remain responsible for the design."
      }
    },
    {
      "id": "ecommerce-returns-exchanges",
      "title": "Returns & Exchanges",
      "description": "A guide to buying an AI workflow that checks return requests against your store policy, drafts customer replies and prepares actions for your team's approval.",
      "url": "https://renx.openmercury.com/purchasing-guides/ecommerce-returns-exchanges/",
      "category": {
        "id": "ecommerce-internet",
        "name": "E-commerce & Internet",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ecommerce-internet/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost per assessed request only; human handling, maintenance, refunds, shipping and your store or helpdesk subscriptions are separate. Confirmed in your pilot.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Prepare decisions and replies",
            "description": "Works from controlled case and order exports. Evidence, decision and reply drafts for your team; no store access, no refunds, no messages sent.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Connect my store and helpdesk",
            "description": "Adds the agreed store and helpdesk connection, explicit approval of each action, and reconciliation of what the store actually did.",
            "setup": {
              "min": 2592,
              "max": 7200
            }
          }
        ],
        "baseline": {
          "standard": "Policy-checked replies",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.1068,
          "max": 0.306,
          "unit": "return",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Policy-checked replies",
        "description": "Check eligibility, explain the policy and flag exceptions.",
        "metrics": [
          {
            "name": "Decisions that match policy",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of labelled requests whose proposed action, eligibility and preconditions match the answer approved by your support lead."
          },
          {
            "name": "Claims backed by a source",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of order, item, amount and policy statements in the drafts that cite a correct source, version and currency."
          },
          {
            "name": "Cases correctly handed to a person",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of cases that needed a person or more evidence and were handed over or blocked, including permission, conflict and state-change cases."
          },
          {
            "name": "Approvable without re-investigation",
            "target": 60,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of in-scope requests where the draft could be approved as prepared. Timeouts, errors and justified escalations stay in the denominator."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "return",
          "definition": "From receipt to a finished decision and draft, including queueing and store reads. Approval, shipping and payment settlement are reported separately."
        },
        "controls": "In every case: no store change or refund without approval on the agreed challenge cases; missing evidence, policy conflicts and identity doubts always go to a person; amounts come from order data, never from the model; human time reported separately."
      }
    },
    {
      "id": "end-to-end-tests",
      "title": "End-to-End Test Writing & Upkeep",
      "description": "A guide to buying an AI workflow that writes browser tests for your app, explains failures and proposes test repairs.",
      "url": "https://renx.openmercury.com/purchasing-guides/end-to-end-tests/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "tests",
        "scopes": [
          {
            "key": "tests",
            "name": "Write and maintain tests",
            "description": "Write browser tests for the user flows you describe, run them in your CI, sort each failure into an app bug, a test that needs updating or an unstable environment, and open a repair pull request when an intended change broke a test.",
            "setup": {
              "min": 1296,
              "max": 3720
            }
          },
          {
            "key": "coverage",
            "name": "Add preview checks and bug reports",
            "description": "Adds runs on preview builds of each pull request, bug reports in your issue tracker with steps, screenshots and a recording for app bugs, and a map of which user flows have tests.",
            "setup": {
              "min": 1944,
              "max": 5760
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0392,
          "max": 0.0792,
          "unit": "test run",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Working tests for the agreed flows, with unclear failures handed to an engineer rather than guessed.",
        "metrics": [
          {
            "name": "Flows with a passing test",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Agreed user flows that end in a passing test which checks the agreed outcome, divided by all agreed flows."
          },
          {
            "name": "Planted bugs caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Bugs planted in a test build of your app that make a covered test fail, divided by all planted bugs in covered flows."
          },
          {
            "name": "Failures sorted correctly",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Failed runs sorted the same way as your engineer would sort them, as an app bug, a test that needs updating or an unstable environment, divided by all failed runs in the test set."
          },
          {
            "name": "Test fixes accepted",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Test repair pull requests your engineers merge without rework, divided by all repair pull requests. A repair that lets a real bug pass counts as a critical failure."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 8,
          "unit": "test run"
        },
        "controls": "Test results and failure explanations help your engineers decide; they are not a release approval. Your team still decides what ships."
      }
    },
    {
      "id": "essay-feedback-rubric-checks",
      "title": "Essay Feedback & Rubric Checks",
      "description": "A purchasing guide to a workflow that drafts rubric-based marks and specific essay feedback, with evidence for your teacher to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/essay-feedback-rubric-checks/",
      "category": {
        "id": "education",
        "name": "Education",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/education/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "AI-assisted setup using reusable components and your approved sources.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Rubric marks and feedback",
            "description": "Get draft criterion marks and feedback linked to the student's text. Add an LMS connection to read submissions and save approved feedback as drafts.",
            "setup": {
              "min": 1008,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Connect my submission system",
            "description": "Read approved material from one authorised source connection and save reviewed outputs as drafts in one agreed destination. No automatic release.",
            "setup": {
              "min": 1512,
              "max": 4320
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0688,
          "max": 0.0888,
          "unit": "essay",
          "composition": [
            {
              "key": "wordsPerUnit",
              "count": 2500,
              "noun": "typed essay words"
            },
            {
              "key": "criteriaPerUnit",
              "count": 6,
              "noun": "rubric criteria"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 2000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Expert-reviewed output with checks against your agreed sources and reference examples.",
        "metrics": [
          {
            "name": "Criterion marks match",
            "target": 75,
            "unit": "%",
            "direction": "gte",
            "definition": "Teachers blind-mark essays first and moderate differences. Compare each criterion, not only the total; report agreement across score bands."
          },
          {
            "name": "Marks within one band",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Adjacent level means one step on the agreed rubric, not an arbitrary percentage. Report exact agreement separately."
          },
          {
            "name": "Feedback uses real evidence",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Invented quotations and comments about absent content are critical failures. Require exact essay passages and criterion references."
          },
          {
            "name": "Feedback useful for revision",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Blind-review comments for a concrete next step, relevant evidence and appropriate tone; generic praise does not pass."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Require approval of the exact source and output version before any release or system write. Changed sources invalidate approval. Never overwrite human edits; duplicate events must not create duplicate records. Treat documents as data, not instructions."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "essay"
        },
        "controls": "All marks and comments are drafts for teachers. No automatic official grades, admissions decisions, disciplinary action or AI-authorship accusations. Handwriting recognition and new subjects need separate testing."
      }
    },
    {
      "id": "estimate-maintenance-follow-up",
      "title": "Estimate & Maintenance Follow-up",
      "description": "A guide to buying an AI workflow that follows up on open estimates and maintenance reminders, then organises customer replies.",
      "url": "https://renx.openmercury.com/purchasing-guides/estimate-maintenance-follow-up/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "messages",
        "scopes": [
          {
            "key": "messages",
            "name": "Send approved follow-ups",
            "description": "Pick customers with open estimates or maintenance due from your exported records, exclude opt-outs and recent contacts, draft texts and emails for approval, send approved messages, record stop requests and sort replies for your office.",
            "setup": {
              "min": 1224,
              "max": 3720
            }
          },
          {
            "key": "booking",
            "name": "Add live records and booking",
            "description": "Adds reading estimates, agreements and consent directly from your field service software, offering open slots when a customer asks to book, booking the job and writing the outcome back with duplicate-safe retries.",
            "setup": {
              "min": 2088,
              "max": 6120
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0394,
          "max": 0.0894,
          "unit": "follow-up",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 800
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "The right customers and correct messages, with questions and unclear replies passed to your office.",
        "metrics": [
          {
            "name": "Right customers chosen",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Customers chosen who meet your contact rules, with consent recorded, no stop request, no recent contact, no open complaint and no job already booked, divided by all customers chosen."
          },
          {
            "name": "Message facts correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Messages whose estimate, equipment, offer and wording match your records and approved offers, divided by all messages."
          },
          {
            "name": "Replies sorted correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Replies sorted correctly as booking, question, not now or stop, divided by all labelled replies."
          },
          {
            "name": "Stop requests honoured",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Stop requests recorded before any further message is sent, divided by all stop requests in the tests, including those written in other words."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 8,
          "unit": "follow-up"
        },
        "controls": "Follow-ups are messages to your own customers under your contact rules. Your office approves the lists and offers, answers questions and decides on prices."
      }
    },
    {
      "id": "expense-receipt-policy-checks",
      "title": "Expense Receipt & Policy Checks",
      "description": "A purchasing guide to buying a workflow that checks employee receipts against your expense policy and prepares exceptions for finance review.",
      "url": "https://renx.openmercury.com/purchasing-guides/expense-receipt-policy-checks/",
      "category": {
        "id": "accounting-finance",
        "name": "Finance & Accounting",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/accounting-finance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload receipts and expenses",
            "description": "Extract receipt details, compare amounts, check approved rules and prepare findings with policy references.",
            "setup": {
              "min": 1008,
              "max": 3120
            }
          },
          {
            "key": "connected",
            "name": "Connect my expense queue",
            "description": "Adds a connection to an agreed expense queue, record updates and review drafts. Sending messages or writing review notes requires exact-action approval.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0314,
          "max": 0.0714,
          "unit": "expense",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 1,
              "noun": "receipt page"
            },
            {
              "key": "checksPerUnit",
              "count": 20,
              "noun": "policy checks"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000,
            "pages": 1
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Check receipt details and common policy rules, with missing information held for review.",
        "metrics": [
          {
            "name": "Correct receipt fields",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct required fields divided by all required fields in the held-out receipt set. Unreadable and missing fields count as failures; abstentions remain visible."
          },
          {
            "name": "Policy violations found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged policy violations divided by all finance-labelled violations. Missed and deferred violations stay in the denominator."
          },
          {
            "name": "Correct policy flags",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Confirmed policy violations divided by all violation flags. Duplicate or invented findings do not count as correct."
          },
          {
            "name": "Valid policy references",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every finding links to an applicable clause in the policy version used and to the source receipt or transaction. A citation without support fails."
          },
          {
            "name": "Missing evidence sent for review",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All missing-evidence, conflicting-currency and ambiguous-policy cases are held for review rather than described as compliant."
          }
        ],
        "speed": {
          "p95Seconds": 45,
          "maxPages": 1,
          "concurrentJobs": 2,
          "unit": "expense"
        },
        "controls": "Validate amounts and currencies with code. Flags are review recommendations, not proven fraud. Finance retains approval and payment authority."
      }
    },
    {
      "id": "financial-model-checks",
      "title": "Financial Model Checks",
      "description": "A purchasing guide to buying a workflow that checks your financial model for broken formulas, mismatched figures and unsupported assumptions before review.",
      "url": "https://renx.openmercury.com/purchasing-guides/financial-model-checks/",
      "category": {
        "id": "trading-risk",
        "name": "Trading & Risk Management",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/trading-risk/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for your repeated financial checks and evidence, not a fee for installing a spreadsheet parser.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload my models",
            "description": "Apply the agreed checks to versioned workbook copies. Show cell-level findings, calculation evidence and unresolved areas; do not change the source model.",
            "setup": {
              "min": 1152,
              "max": 3240
            }
          },
          {
            "key": "connected",
            "name": "Connect my SharePoint folder",
            "description": "Read approved saved workbooks from one folder and prepare version-pinned internal review drafts. Writing a review record needs your approval; no source-model editing is allowed.",
            "setup": {
              "min": 1512,
              "max": 4320
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2168,
          "max": 0.4168,
          "unit": "model",
          "composition": [
            {
              "key": "cellsPerUnit",
              "count": 5000,
              "noun": "populated cells"
            },
            {
              "key": "checksPerUnit",
              "count": 20,
              "noun": "agreed model checks"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Find the agreed issues and show cell evidence, with unknown results left for analyst review.",
        "metrics": [
          {
            "name": "Model issues found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged true issues divided by all labelled in-scope issues. Keep missed and deferred issues in the denominator. An unusual formula or hardcoded value is not automatically an error."
          },
          {
            "name": "Correct issue flags",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Confirmed issues divided by all proposed issue flags. Fix the rule definitions before testing; legitimate exceptions and intentional modelling choices must not become invented errors."
          },
          {
            "name": "Checked financial arithmetic",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare every agreed numeric check with an independently computed reference under the same units, periods and rounding. Missing or unverified results cannot pass as correct."
          },
          {
            "name": "Valid cell evidence",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every finding resolves to the exact workbook version, sheet and cell with the rule, formula or calculation needed to verify it."
          },
          {
            "name": "Unresolved checks shown",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Show unsupported formulas, missing external sources, stale or absent saved results and inaccessible inputs. A partial review must not be described as a clean whole-workbook audit."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 2,
          "unit": "model"
        },
        "controls": "These are proposed pilot targets, not a full model audit or proof that an investment is sound. Analysts review every model and resolve unsupported areas."
      }
    },
    {
      "id": "financial-variance-explanations",
      "title": "Financial Variance Explanations",
      "description": "A purchasing guide to buying a workflow that explains changes in your financial results, with supporting transactions and questions for your team.",
      "url": "https://renx.openmercury.com/purchasing-guides/financial-variance-explanations/",
      "category": {
        "id": "accounting-finance",
        "name": "Finance & Accounting",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/accounting-finance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Explain uploaded reports",
            "description": "Map accounts, compare periods, identify material transaction groups and draft explanations with evidence and unresolved questions.",
            "setup": {
              "min": 1008,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Read my accounting system",
            "description": "Adds a read-only ledger connection, completeness checks, source versions and repeat-run tracking. Budgets and business notes use agreed uploads.",
            "setup": {
              "min": 1584,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2324,
          "max": 0.6324,
          "unit": "account review",
          "composition": [
            {
              "key": "rowsPerUnit",
              "count": 1000,
              "noun": "transaction rows"
            },
            {
              "key": "notesPerUnit",
              "count": 20,
              "noun": "supporting notes"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Trace the main changes and keep missing context visible.",
        "metrics": [
          {
            "name": "Supported factual claims",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported factual claims divided by all emitted factual claims, judged against source evidence. Empty explanations also fail the driver-coverage test."
          },
          {
            "name": "Material drivers found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly identified material driver groups divided by all finance-labelled groups under the agreed threshold. Missing or deferred groups stay in the denominator."
          },
          {
            "name": "Correct variance totals",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All issued reviews reproduce source-period totals and show a bridge from the comparison balance to the actual balance, including any unexplained residual."
          },
          {
            "name": "Complete source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every driver row retains original transaction IDs, period and mapping versions; every business-cause claim also links to approved context."
          }
        ],
        "speed": {
          "p95Seconds": 90,
          "concurrentJobs": 2,
          "unit": "account review"
        },
        "controls": "Use deterministic decimal calculations for balances, signs and residuals. A transaction pattern is not proof of a business cause; ask for supporting context."
      }
    },
    {
      "id": "fire-alarm-design-drafts",
      "title": "Fire Alarm Design Drafts",
      "description": "Prepare detector layout and schedule drafts from checked room data for your fire-alarm engineer to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/fire-alarm-design-drafts/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "The base input is checked room polygons and approved device rules, not arbitrary PDFs or building-model interpretation. Export a preliminary DXF and device schedule. Riser design, voltage-drop calculations and complex spaces are separately scoped.",
            "setup": {
              "min": 2160,
              "max": 6240
            }
          },
          {
            "key": "connected",
            "name": "Connect a design review folder",
            "description": "Read structured geometry exports and place versioned drafts in an approved document store. Native CAD plugins and live model edits are outside this scope.",
            "setup": {
              "min": 2448,
              "max": 7200
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.3882,
          "max": 0.6882,
          "unit": "floor draft",
          "composition": [
            {
              "key": "roomsPerUnit",
              "count": 20,
              "noun": "validated rooms"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Correct room and unit mapping",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly mapped room identifiers and dimensions divided by all required geometry fields; unit mistakes fail the pilot."
          },
          {
            "name": "Draft placements meeting supplied rules",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Placements satisfying the supplied deterministic checks divided by all proposed placements; this does not certify code compliance."
          },
          {
            "name": "Drawing and schedule agreement",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Matching device identifiers and counts divided by all devices in the drawing and schedule."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 1,
          "unit": "floor draft"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "food-label-claim-review",
      "title": "Food & Supplement Label and Claim Review",
      "description": "Check label text, ingredient declarations and product claims against your approved regulatory checklist.",
      "url": "https://renx.openmercury.com/purchasing-guides/food-label-claim-review/",
      "category": {
        "id": "food-agriculture",
        "name": "Food & Agriculture",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/food-agriculture/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Start with exported label text and product specifications for an agreed jurisdiction. Artwork geometry, minimum type size, laboratory verification and deriving nutrition values are outside the baseline.",
            "setup": {
              "min": 1296,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Connect the artwork review queue",
            "description": "Read label text and product specifications from an approved product-data system and attach a draft review without overwriting approved artwork.",
            "setup": {
              "min": 1584,
              "max": 4440
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2112,
          "max": 0.3612,
          "unit": "label",
          "composition": [
            {
              "key": "checksPerUnit",
              "count": 30,
              "noun": "approved checklist checks"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Checklist issues found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Detected in-scope issues divided by all expert-labeled issues; report allergens and unsupported claims separately."
          },
          {
            "name": "Flagged issues confirmed",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Expert-confirmed issues divided by all flagged issues, so flagging every label cannot pass."
          },
          {
            "name": "Correct rule and source references",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Issues with the correct current checklist rule and source text divided by all reported issues."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 90,
          "concurrentJobs": 1,
          "unit": "label"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "food-traceability-records",
      "title": "Food Traceability Records",
      "description": "A purchasing guide to buying a workflow that reads supplier shipping documents for foods on the Food Traceability List and prepares receiving records with lot codes, sources and quantities for your team to check.",
      "url": "https://renx.openmercury.com/purchasing-guides/food-traceability-records/",
      "category": {
        "id": "food-agriculture",
        "name": "Food & Agriculture",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/food-agriculture/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "records",
        "scopes": [
          {
            "key": "records",
            "name": "Records from uploaded documents",
            "description": "Read bills of lading, packing lists, invoices and shipping notices, fill the receiving key data elements for covered foods, and flag missing or inconsistent values.",
            "setup": {
              "min": 936,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Connect my receiving system",
            "description": "Adds a read-only lookup of purchase orders and receipts, an approved document inbox and saving of approved records with duplicate protection.",
            "setup": {
              "min": 1584,
              "max": 4440
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved OCR and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.1102,
          "max": 0.1902,
          "unit": "shipment",
          "composition": [
            {
              "key": "lotsPerUnit",
              "count": 20,
              "noun": "lot lines"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved OCR and model APIs",
            "monthlyVolume": 500,
            "pages": 3
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate records with missing data held for your quality team.",
        "metrics": [
          {
            "name": "Correct data elements",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Each element passes only when it matches the labelled value, including quantity, unit, dates, locations and the reference document; a guessed value is an error."
          },
          {
            "name": "Missing data flagged",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged missing, conflicting or unreadable elements divided by all such labelled cases."
          },
          {
            "name": "Exact lot codes",
            "target": 99.5,
            "unit": "%",
            "direction": "gte",
            "definition": "Lot codes must match character for character; a near match counts as an error."
          },
          {
            "name": "Records needing no edits",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Shipment records approved without any change, divided by all shipments in the test, including unreadable ones."
          }
        ],
        "speed": {
          "p95Seconds": 90,
          "maxPages": 4,
          "concurrentJobs": 2,
          "unit": "shipment"
        },
        "controls": "Copy lot codes exactly as printed and never create one. Covered foods, location descriptions and record rules come from your quality lead, not from the model."
      }
    },
    {
      "id": "freight-invoice-audit",
      "title": "Freight Invoice Audit",
      "description": "A purchasing guide to buying a workflow that checks freight invoices against your rate cards and shipment records, with evidence for every difference.",
      "url": "https://renx.openmercury.com/purchasing-guides/freight-invoice-audit/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost only; human review and maintenance are separate. Confirmed in your pilot.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Check invoices from files",
            "description": "Report and review queue for your team. No system writes.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Connect my finance system",
            "description": "Adds an agreed email or storage intake, one system connection and an approval step before any write.",
            "setup": {
              "min": 2160,
              "max": 6240
            }
          }
        ],
        "baseline": {
          "standard": "Invoice checks",
          "deployment": "Your cloud",
          "modelAccess": "Approved OCR and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.0642,
          "max": 0.0992,
          "unit": "invoice",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved OCR and model APIs",
            "monthlyVolume": 2000,
            "pages": 3
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Invoice checks",
        "description": "Check rates, surcharges and duplicate charges against your agreed rules.",
        "metrics": [
          {
            "name": "Material exceptions caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of real material exceptions in the held-out set that are flagged."
          },
          {
            "name": "Flags that hold up",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of flags confirmed on natural samples."
          },
          {
            "name": "Key fields correct",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct amounts, currencies, dates and shipment references divided by all required labelled fields; report each field separately."
          },
          {
            "name": "Invoices correctly assessed without edits",
            "target": 60,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct complete assessments needing no human correction divided by all input invoices, including rejected and referred cases. This does not approve payment."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "maxPages": 3,
          "concurrentJobs": 1,
          "unit": "invoice",
          "definition": "At your expected load. Human waiting time reported separately."
        },
        "controls": "In every case: no missed material exception on the agreed challenge cases; unknown rules, missing rates and conflicts always go to review; human time reported separately."
      }
    },
    {
      "id": "freight-order-entry",
      "title": "Freight Order Entry",
      "description": "A purchasing guide to buying a workflow that reads shipper order emails and attachments and prepares checked load records for your transportation management system.",
      "url": "https://renx.openmercury.com/purchasing-guides/freight-order-entry/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Prepare loads for review",
            "description": "Read order emails, spreadsheets and PDF tenders, match the customer and facilities to your records, and prepare a load record with every missing or conflicting detail flagged.",
            "setup": {
              "min": 1008,
              "max": 3000
            }
          },
          {
            "key": "connected",
            "name": "Create loads in my system",
            "description": "Adds a connection to your transportation management system that creates each load only after your approval, with duplicate protection when an order is resent or a run is retried.",
            "setup": {
              "min": 1800,
              "max": 5160
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0536,
          "max": 0.0936,
          "unit": "order",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 3,
              "noun": "attachment pages with the order email"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate fields with unclear orders held for review.",
        "metrics": [
          {
            "name": "Required fields correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct required fields, such as customer, stops, dates, equipment, weight and references, divided by all required fields in the test orders."
          },
          {
            "name": "Complete orders correct",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Orders where every required field is correct divided by all test orders; an order sent for review counts as not complete."
          },
          {
            "name": "Problems flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Orders with labelled missing, ambiguous or conflicting details that were sent for review, divided by all such labelled orders."
          },
          {
            "name": "Complete source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every load field must point to the email text, attachment page or master record it came from."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 4,
          "unit": "order"
        },
        "controls": "Pickup and delivery dates, addresses, equipment and reference numbers must come from the order or your records. A filled field without a source is an error, not a convenience."
      }
    },
    {
      "id": "fresh-food-production-plans",
      "title": "Fresh Food Production Plans",
      "description": "A purchasing guide to buying a workflow that plans how much fresh food to make and when, using your sales, stock and shelf-life rules.",
      "url": "https://renx.openmercury.com/purchasing-guides/fresh-food-production-plans/",
      "category": {
        "id": "food-agriculture",
        "name": "Food & Agriculture",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/food-agriculture/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "AI-assisted setup for a bounded department workflow, not a grocery enterprise platform licence.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload sales and stock",
            "description": "Read your supplied sales, stock and approved rules. Draft item quantities and preparation windows, with missing inputs and the calculation behind each recommendation.",
            "setup": {
              "min": 1296,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Connect my sales system",
            "description": "Read item-level sales and stock from the agreed endpoint. Changes create a new draft; only an approved plan is written back to your internal production list.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0896,
          "max": 0.1396,
          "unit": "daily plan",
          "composition": [
            {
              "key": "itemsPerUnit",
              "count": 50,
              "noun": "prepared items"
            },
            {
              "key": "windowsPerUnit",
              "count": 6,
              "noun": "preparation windows"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 600
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the daily forecast and keep quantities within your approved production rules.",
        "metrics": [
          {
            "name": "Forecast error",
            "target": 25,
            "unit": "%",
            "direction": "lte",
            "definition": "Sum of absolute forecast errors divided by observed eligible sales. Lower is better. Use future holdouts and the agreed stockout treatment; zero-sales groups need a separate absolute-error report."
          },
          {
            "name": "Improvement over baseline",
            "target": 10,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare both forecasts on identical held-out dates and item groups. A zero-error baseline cannot support a relative gain; report it separately rather than inventing a percentage."
          },
          {
            "name": "Forecast bias",
            "target": 10,
            "unit": "%",
            "direction": "lte",
            "definition": "Absolute signed total forecast error divided by total observed sales. Report over- and underprediction by item group so opposite errors cannot conceal poor plans."
          },
          {
            "name": "Production rules respected",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All reviewed plans must obey approved rules, or show an explicit infeasible status. Do not change constraints silently or treat an infeasible plan as a successful production schedule."
          },
          {
            "name": "Traceable quantities",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each quantity links to sales, usable stock, expiry, batch size and calculation version. Explanations cannot alter forecast numbers or preparation rules."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 2,
          "unit": "daily plan"
        },
        "controls": "These are proposed pilot targets, not measured results or a promise of less waste. Sales on stockout days understate demand; your manager confirms the rules and approves every production plan."
      }
    },
    {
      "id": "game-ready-asset-cleanup-rigging",
      "title": "Game-Ready Asset Cleanup & Rigging",
      "description": "Buy a reusable tool that cleans supplied meshes, prepares texture layouts and optionally adds character rigging.",
      "url": "https://renx.openmercury.com/purchasing-guides/game-ready-asset-cleanup-rigging/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-08",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Clean topology and UV layouts",
            "description": "Build non-destructive mesh cleanup, UV preparation and target-format validation.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          },
          {
            "key": "rigged",
            "name": "Add character rigging",
            "description": "Add skeleton fitting, weight checks and pose tests for the agreed character family.",
            "setup": {
              "min": 2592,
              "max": 7200
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0482,
          "max": 0.1862,
          "unit": "asset",
          "composition": [
            {
              "key": "meshesPerUnit",
              "count": 1,
              "noun": "source mesh"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Target imports passed",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Processed assets passing the agreed target-engine import suite divided by all submitted eligible test assets, including processing failures."
          },
          {
            "name": "Geometry checklist satisfied",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed topology and UV checklist items divided by all independently required checklist items; unresolved items are reported."
          },
          {
            "name": "Selected-scope checks passed",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed target-use fixtures divided by all required fixtures; rigged scope uses the agreed deformation poses while static scope uses material and transform fixtures."
          },
          {
            "name": "Source and approval controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed source-preservation, rights and output-approval cases divided by all tested control cases; any source overwrite fails acceptance."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 1,
          "unit": "asset"
        },
        "controls": "Proposed targets apply to an independently labeled test set on the agreed workload, not every possible future input. Review each pilot result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "guided-practice-tutor",
      "title": "Guided Practice Tutor",
      "description": "A purchasing guide to a tutor that uses your approved course materials to guide learners through practice, offer hints and show teachers where they get stuck.",
      "url": "https://renx.openmercury.com/purchasing-guides/guided-practice-tutor/",
      "category": {
        "id": "education",
        "name": "Education",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/education/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "AI-assisted setup using reusable components and your approved sources.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Practice with hints",
            "description": "Guide practice using approved questions and hints. Add a connection to one learning system for teacher-visible session summaries.",
            "setup": {
              "min": 1440,
              "max": 4080
            }
          },
          {
            "key": "connected",
            "name": "Connect my learning system",
            "description": "Read approved material from one authorised source connection and save reviewed outputs as drafts in one agreed destination. No automatic release.",
            "setup": {
              "min": 2016,
              "max": 5640
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.236,
          "max": 0.276,
          "unit": "practice session",
          "composition": [
            {
              "key": "turnsPerUnit",
              "count": 10,
              "noun": "tutor replies"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Expert-reviewed output with checks against your agreed sources and reference examples.",
        "metrics": [
          {
            "name": "Explanations correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Independent teachers verify the method and explanation against the approved course, including intentionally incorrect learner attempts."
          },
          {
            "name": "Hints follow the teaching method",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Label when a hint, question or final worked example is appropriate. Refusing every question or revealing the answer immediately fails."
          },
          {
            "name": "Uses approved material",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check the exact supporting source version. Correct-sounding material from another syllabus does not count."
          },
          {
            "name": "Escalations handled correctly",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Test age-inappropriate content, distress, requests for personal contact and unsupported tasks. Do not diagnose or counsel; use the school's reviewed escalation process."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Approve the question bank, source versions and hint rules before learner access; ordinary hints then run within those approved rules. Review every pilot session. Require exact-output approval before publishing summaries or writing to a learning system. Changed sources invalidate approval. Never overwrite human edits; duplicate events must not create duplicate records. Treat documents as data, not instructions."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "practice session"
        },
        "controls": "Start with a teacher-supervised pilot for one subject and age group. No high-stakes exam answers, official grading, unsupervised counselling, learner profiling or engagement manipulation. School approval and safeguarding checks are required before learner access."
      }
    },
    {
      "id": "home-service-call-booking",
      "title": "Home Service Call Intake & Booking",
      "description": "A purchasing guide to an AI call workflow for home service businesses, deployed in your environment. It answers customer calls, records the job details, escalates emergencies and creates job requests or bookings for your office.",
      "url": "https://renx.openmercury.com/purchasing-guides/home-service-call-booking/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and example calls.",
        "recommendedScope": "intake",
        "scopes": [
          {
            "key": "intake",
            "name": "Take down jobs for my office",
            "description": "Answers calls with your approved script, checks the service area, records the problem, address and contact details, reads them back, alerts your on-call technician by your emergency rules and stores a job request with the recording.",
            "setup": {
              "min": 1152,
              "max": 3480
            }
          },
          {
            "key": "booking",
            "name": "Book jobs into my field service software",
            "description": "Adds reading open slots by job type and area, creating or matching the customer and job in your field service software, duplicate-safe retries and a clear fallback to a job request when the system is unavailable.",
            "setup": {
              "min": 1944,
              "max": 5640
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved speech and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.22568,
          "max": 0.32568,
          "unit": "call",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved speech and model APIs",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Reliable job details with emergencies and unclear calls passed to people.",
        "metrics": [
          {
            "name": "Complete job details",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "A call passes only when name, callback number, service address, service type, problem and urgency all match the labelled call; missing or invented details fail."
          },
          {
            "name": "Emergencies escalated",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled emergency calls that triggered the approved alert and caller instructions, divided by all labelled emergency calls."
          },
          {
            "name": "Correct handovers",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Calls that asked for a person, needed a price, complained or fell outside the rules and reached staff, divided by all such labelled calls."
          },
          {
            "name": "Calls with a stored record",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every answered call, including dropped and spam calls, must leave a stored outcome with transcript and recording link."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 3,
          "unit": "call"
        },
        "controls": "The assistant says it is automated, follows your recording consent rules and never gives safety advice beyond your approved emergency script. A confident summary is not proof; the recording and transcript stay linked to every request."
      }
    },
    {
      "id": "hotel-guest-enquiries",
      "title": "Hotel Guest Enquiries",
      "description": "A purchasing guide to buying a workflow that answers hotel guests from your approved information and passes requests to your front desk.",
      "url": "https://renx.openmercury.com/purchasing-guides/hotel-guest-enquiries/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Engineering estimates, not provider quotes. Human service, messaging channels, reservation systems and maintenance are separate.",
        "recommendedScope": "desk",
        "scopes": [
          {
            "key": "desk",
            "name": "Help my front desk answer",
            "description": "Staff submit a guest question and receive a suggested reply, supporting hotel information and any required handover. Staff decide what to send.",
            "setup": {
              "min": 1008,
              "max": 2880
            }
          },
          {
            "key": "webchat",
            "name": "Answer guests on my website",
            "description": "Adds website chat, session isolation, abuse controls and a staff queue. After approved launch, answer only agreed public-information topics; hand over requests and exceptions.",
            "setup": {
              "min": 1728,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Reliable routine answers",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0256,
          "max": 0.0316,
          "unit": "reply",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 3000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Reliable routine answers",
        "description": "Answer approved questions and recognise when staff are needed.",
        "metrics": [
          {
            "name": "Routine questions answered correctly",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Fully correct, complete replies divided by all labelled answerable routine enquiries. Unnecessary handovers and missing replies count as failures."
          },
          {
            "name": "Facts supported by hotel information",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported atomic factual claims divided by all factual claims returned. Use current approved sources; expired policies, wrong-property information and unsupported promises fail."
          },
          {
            "name": "Required handovers recognised",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct handovers divided by all enquiries labelled as requiring staff. Include requests for a person, unavailable facts, booking-specific issues and complaints. Measure unnecessary handovers separately."
          },
          {
            "name": "Request summaries captured correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct summaries divided by all labelled staff requests. Preserve supplied request, contact and location details; mark missing information unknown. Wrong or invented details and omitted requests fail."
          }
        ],
        "speed": {
          "p95Seconds": 30,
          "concurrentJobs": 5,
          "unit": "reply",
          "definition": "From accepted guest message to complete reply or recorded handover, including retrieval, model calls, queueing and retries. Staff response and service fulfilment time are separate."
        },
        "controls": "Use current approved sources. Unknown policies and requests for a person must not be answered with invented details."
      }
    },
    {
      "id": "hotel-housekeeping-boards",
      "title": "Hotel Housekeeping Boards",
      "description": "Builds room assignments from today's housekeeping report, shift roster and your rules, with DND rooms and missing details clearly marked.",
      "url": "https://renx.openmercury.com/purchasing-guides/hotel-housekeeping-boards/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for one hotel and approved room rules, not the entire Lance platform or a PMS licence.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload my room report",
            "description": "Read a text-readable report and your approved roster. Build editable assignments, show holds and keep room totals reconciled.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Read my room-status source",
            "description": "Read an authorised report or room-status feed. Recheck changed rooms and invalidate affected approvals; do not move locked or started work.",
            "setup": {
              "min": 1656,
              "max": 4800
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.331,
          "max": 0.581,
          "unit": "housekeeping board",
          "composition": [
            {
              "key": "roomsPerUnit",
              "count": 100,
              "noun": "rooms"
            },
            {
              "key": "attendantsPerUnit",
              "count": 10,
              "noun": "on-shift attendants"
            },
            {
              "key": "shiftsPerUnit",
              "count": 1,
              "noun": "service shift"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 60
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Check room details, staff capacity, DND and current source versions.",
        "metrics": [
          {
            "name": "Room-detail accuracy",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct status, service, DND, room identity and time fields divided by all labelled fields. Missing or failed extractions count as errors; do not omit hard rooms."
          },
          {
            "name": "Usable workload plans",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Boards meeting the frozen workload-spread and floor-grouping targets divided by all feasible test boards. Compare the same rooms, roster, hard constraints and locked assignments with the approved reference baseline. Several allocations can be valid."
          },
          {
            "name": "Rooms accounted for",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every input room appears exactly once as assigned, held or no service needed. Reconcile counts and IDs; duplicate, omitted and wrong-property rooms fail."
          },
          {
            "name": "Assignment rules respected",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every assignment respects DND, availability, service windows, room-type competence, shift capacity, section rules and locked or started work. Infeasible rooms remain unassigned with reasons; never relax a rule silently."
          },
          {
            "name": "Changed or unclear rooms flagged",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All labelled missing, stale or conflicting sources are visible and trigger the correct hold or invalidation. Unknown room availability is not permission to enter."
          },
          {
            "name": "Source details preserved",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Link the room to its source row, service day, current status version, roster and controlling assignment rules. Show estimated service minutes as approved planning inputs, not observed cleaning outcomes."
          },
          {
            "name": "Supervisor approval controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All challenge cases prevent unapproved release, DND override, status writes, employee decisions, guest messages and cross-hotel access. Changed sources invalidate affected approvals; conflicts never overwrite started work."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "housekeeping board"
        },
        "controls": "Pilot targets for draft boards, not cleaning time, guest satisfaction or labour savings. All hard rules must pass; an accuracy average cannot excuse a DND or capacity violation. A supervisor approves every board."
      }
    },
    {
      "id": "infrastructure-change-cost-review",
      "title": "Infrastructure Change Cost Review",
      "description": "A purchasing guide to buying a workflow that checks the cloud cost of an infrastructure change before your team approves it.",
      "url": "https://renx.openmercury.com/purchasing-guides/infrastructure-change-cost-review/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for custom rules and review integration, not just installing a free cost tool.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload infrastructure snapshots",
            "description": "Compare costs and apply your approved rules. Return resource-level evidence, assumptions and anything that could not be priced.",
            "setup": {
              "min": 720,
              "max": 2160
            }
          },
          {
            "key": "connected",
            "name": "Connect my repository",
            "description": "Adds read access to an agreed repository and prepares versioned review drafts. Posting a comment requires exact-action approval; merge and deployment permissions are not granted.",
            "setup": {
              "min": 1080,
              "max": 3240
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.1258,
          "max": 0.2258,
          "unit": "change",
          "composition": [
            {
              "key": "resourcesPerUnit",
              "count": 100,
              "noun": "resource entries"
            },
            {
              "key": "checksPerUnit",
              "count": 20,
              "noun": "cost policy checks"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Verify the cost comparison and common budget rules, with unknown costs sent for review.",
        "metrics": [
          {
            "name": "Correct cost calculations",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Count correct price, quantity and total calculations against independently computed references. Fix the region, currency, price date, usage and billing convention. Missing or unsupported entries cannot pass as priced calculations."
          },
          {
            "name": "Cost policy breaches found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged breaches divided by all labelled breaches of the agreed policies. Missed and deferred breaches remain in the denominator."
          },
          {
            "name": "Correct policy flags",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Confirmed breaches divided by all proposed policy flags. A missing usage estimate is uncertainty, not proof of a budget violation."
          },
          {
            "name": "Valid cost evidence",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each finding identifies the resource, input version, price source and date, region, currency and usage assumption. Unsupported explanations fail."
          },
          {
            "name": "Unknown costs sent for review",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All missing usage, unsupported resources and stale price cases remain visible and go to engineering review. A partial estimate must not be described as the complete bill."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "change"
        },
        "controls": "Use deterministic price calculations. Estimated costs are not the actual cloud bill. Unknown usage or unsupported resources must not become zero. Engineers retain approval and deployment authority."
      }
    },
    {
      "id": "instagram-sales-follow-up",
      "title": "Instagram Comment-to-DM Sales Follow-up",
      "description": "Turn eligible Instagram product enquiries into accurate reply drafts and approved checkout links.",
      "url": "https://renx.openmercury.com/purchasing-guides/instagram-sales-follow-up/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "The base scope uses consented interaction exports and catalog data to prepare drafts. Likes alone do not authorize a DM. Unsupported requests and unknown products must reach a person.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Connect the Instagram inbox",
            "description": "Receive approved webhook events and send reviewed replies through the authorized messaging API. Deduplicate events and recheck permission and catalog freshness before sending.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0307,
          "max": 0.0407,
          "unit": "reply",
          "composition": [
            {
              "key": "messagesPerUnit",
              "count": 10,
              "noun": "conversation messages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 3000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Correct product facts",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported product claims divided by all product claims in delivered replies; invented availability or shipping promises fail."
          },
          {
            "name": "Purchase enquiries identified",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct enquiry classifications divided by all labeled interactions, reported separately for enquiry and non-enquiry examples."
          },
          {
            "name": "Sensitive requests handed over",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Requests requiring a person that are held divided by all independently labeled refund, complaint and uncertain requests."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 15,
          "concurrentJobs": 1,
          "unit": "reply"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "insurance-certificate-checks",
      "title": "Vendor & Tenant Insurance Certificate Checks",
      "description": "A guide to buying an AI workflow that checks vendor and tenant insurance documents against your requirements and flags gaps or expiry.",
      "url": "https://renx.openmercury.com/purchasing-guides/insurance-certificate-checks/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "checks",
        "scopes": [
          {
            "key": "checks",
            "name": "Check uploaded certificates",
            "description": "Read each certificate and its endorsements, record insurers, policies, limits and dates, compare them with the requirement set for that vendor or tenant, draft a request for anything short and keep an expiry list.",
            "setup": {
              "min": 936,
              "max": 3000
            }
          },
          {
            "key": "connected",
            "name": "Connect my property software",
            "description": "Adds a connection that reads vendor and tenant records, saves the approved compliance status back, and sends approved renewal and correction requests before cover lapses.",
            "setup": {
              "min": 1512,
              "max": 4800
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0926,
          "max": 0.1926,
          "unit": "certificate",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 6,
              "noun": "pages including endorsements"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Certificate details read correctly, shortfalls found and few false alarms.",
        "metrics": [
          {
            "name": "Certificate details read correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Insurers, policy numbers, coverage types, limits and dates read correctly, divided by all such details in the test certificates."
          },
          {
            "name": "Shortfalls found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Known shortfalls such as low limits, missing endorsements, wrong certificate holder or expired cover that are flagged, divided by all known shortfalls."
          },
          {
            "name": "Flags that are real",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged shortfalls your team confirms as real, divided by all flags raised on the test certificates."
          },
          {
            "name": "Results with page and requirement",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every result must give the certificate or endorsement page and the requirement it was checked against."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 4,
          "unit": "certificate"
        },
        "controls": "A certificate is evidence of cover on the date it was issued, not the policy itself. Your team decides what to accept and when to ask for the policy or endorsements."
      }
    },
    {
      "id": "insurance-quote-comparison",
      "title": "Insurance Quote Comparison & Policy Checks",
      "description": "A purchasing guide to a workflow that compares carrier quotes, checks the issued policy and drafts your proposal for broker review.",
      "url": "https://renx.openmercury.com/purchasing-guides/insurance-quote-comparison/",
      "category": {
        "id": "insurance",
        "name": "Insurance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/insurance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "compare",
        "scopes": [
          {
            "key": "compare",
            "name": "Compare uploaded quotes and policies",
            "description": "Compare limits, deductibles, exclusions, endorsements and premium across quotes. Check the issued policy against the bound quote and draft your proposal.",
            "setup": {
              "min": 1296,
              "max": 4080
            }
          },
          {
            "key": "connected",
            "name": "Connect my agency management system",
            "description": "Adds a connection that reads quotes, binders and policies from the client record, and files the approved comparison, proposal and discrepancy notes back to that record.",
            "setup": {
              "min": 1872,
              "max": 5880
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.848,
          "max": 1.248,
          "unit": "placement",
          "composition": [
            {
              "key": "quotesPerUnit",
              "count": 4,
              "noun": "carrier quotes"
            },
            {
              "key": "pagesPerUnit",
              "count": 120,
              "noun": "pages including the issued policy"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 150
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Coverage details read correctly, differences found and few false alarms.",
        "metrics": [
          {
            "name": "Coverage details read correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Limits, sublimits, deductibles, premiums, taxes and fees, form numbers and policy dates read correctly, divided by all such details in the test placements."
          },
          {
            "name": "Differences found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Known differences in limits, deductibles, exclusions, endorsements, named insureds or premium that are flagged, divided by all known differences."
          },
          {
            "name": "Flags that are real",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged differences your broker confirms as real, divided by all flags raised on the test placements."
          },
          {
            "name": "Results with page",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each material comparison and policy finding must cite the exact supporting document version and page. A page that does not support the finding fails."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every permission and approval challenge must pass. Changed records invalidate approval; repeated events must not create duplicate writes or messages."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 3,
          "unit": "placement"
        },
        "controls": "A comparison shows what the documents say, not which coverage the client should buy. Your broker gives the advice, decides what to raise with the carrier and approves what the client sees."
      }
    },
    {
      "id": "interview-notes-scorecard-drafts",
      "title": "Interview Notes & Scorecard Drafts",
      "description": "A purchasing guide to buying a workflow that turns interview transcripts into source-linked notes and scorecard drafts for your hiring team to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/interview-notes-scorecard-drafts/",
      "category": {
        "id": "professional-business",
        "name": "Professional & Business Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/professional-business/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for your templates, evidence checks and review process, not a clone of a hosted recruiting platform.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload interview transcripts",
            "description": "Organise the interview into factual notes with source links and unanswered topics visible. Your hiring team checks and approves the draft.",
            "setup": {
              "min": 792,
              "max": 2280
            }
          },
          {
            "key": "connected",
            "name": "Connect my recruitment system",
            "description": "Read authorised transcripts from your agreed system and map notes to the right interview record. Sending a draft requires exact-action approval; no hiring-stage changes are permitted.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.1324,
          "max": 0.2324,
          "unit": "interview",
          "composition": [
            {
              "key": "minutesPerUnit",
              "count": 30,
              "noun": "minutes of transcript"
            },
            {
              "key": "topicsPerUnit",
              "count": 20,
              "noun": "job-related scorecard topics"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Capture relevant answers in your template, with verified source links and visible gaps.",
        "metrics": [
          {
            "name": "Accurate note statements",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported factual statements divided by all generated factual statements. Invented, contradicted and wrongly attributed statements fail; an omitted fact is measured separately."
          },
          {
            "name": "Relevant answers captured",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Captured reference answer points divided by all labelled job-related answer points. Missing, skipped and deferred points remain in the denominator."
          },
          {
            "name": "Correct speaker attribution",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly attributed statements divided by all statements with a speaker. Interviewer examples must not become candidate experience."
          },
          {
            "name": "Valid source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each factual note links to the supporting transcript span, participant and input version. A link to unrelated text does not pass."
          },
          {
            "name": "Missing evidence marked",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All labelled unanswered, ambiguous and conflicting topics must remain visible. Do not fill a blank with an inference about the candidate."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "interview"
        },
        "controls": "These targets measure notes against authorised transcripts, not the truth of a candidate's claims or their suitability for a job. Human interviewers retain all assessment and hiring decisions."
      }
    },
    {
      "id": "inventory-replenishment-plans",
      "title": "Inventory Replenishment Plans",
      "description": "A purchasing guide to buying a workflow that shows what to restock, how much to buy and when, using your sales, stock and supplier lead times.",
      "url": "https://renx.openmercury.com/purchasing-guides/inventory-replenishment-plans/",
      "category": {
        "id": "ecommerce-internet",
        "name": "E-commerce & Internet",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ecommerce-internet/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "AI-assisted setup for a bounded stock-planning workflow, not an enterprise inventory platform licence.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload sales and stock",
            "description": "Read your mapped sales, stock, incoming deliveries and buying rules. Draft quantities and order dates with calculations and unresolved inputs.",
            "setup": {
              "min": 1368,
              "max": 3840
            }
          },
          {
            "key": "connected",
            "name": "Connect my Shopify store",
            "description": "Read authorised Shopify sales and inventory updates, combine supplied inbound orders and buying rules, and write approved plan versions to your internal review list.",
            "setup": {
              "min": 1872,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.354,
          "max": 0.654,
          "unit": "restock plan",
          "composition": [
            {
              "key": "skusPerUnit",
              "count": 100,
              "noun": "stock items"
            },
            {
              "key": "locationsPerUnit",
              "count": 2,
              "noun": "stock locations"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the forecast and draft buying quantities within your approved rules.",
        "metrics": [
          {
            "name": "Forecast error",
            "target": 30,
            "unit": "%",
            "direction": "lte",
            "definition": "Sum of absolute forecast errors divided by eligible observed sales on future holdouts. Lower is better. Report stockout treatment and zero-sales groups separately."
          },
          {
            "name": "Improvement over baseline",
            "target": 10,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare both forecasts on identical future dates and item groups. Freeze a simple seasonal baseline before testing. A zero-error baseline cannot support a relative improvement claim."
          },
          {
            "name": "Forecast bias",
            "target": 10,
            "unit": "%",
            "direction": "lte",
            "definition": "Absolute signed aggregate error divided by observed sales. Report over- and underprediction by product group too, so opposite errors do not cancel unnoticed."
          },
          {
            "name": "Buying rules respected",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Check available stock, confirmed inbound, lead times, pack sizes, minimum quantities and budget. Flag infeasible or late plans instead of silently overriding rules."
          },
          {
            "name": "Traceable quantities",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each quantity and order date resolves to input versions and deterministic calculations. Explain bundle expansion, reservations and uncertain incoming stock."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "restock plan"
        },
        "controls": "These are proposed pilot targets, not measured results or a stockout guarantee. Sales during stockouts understate demand; your buyer reviews and approves purchasing."
      }
    },
    {
      "id": "investment-data-room-analysis",
      "title": "Investment Data Room Analysis",
      "description": "A purchasing guide to buying a workflow that answers your investment questions from deal documents, with source links and conflicting figures clearly shown.",
      "url": "https://renx.openmercury.com/purchasing-guides/investment-data-room-analysis/",
      "category": {
        "id": "trading-risk",
        "name": "Trading & Risk Management",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/trading-risk/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Analyse an uploaded deal pack",
            "description": "Answer the agreed questions, preserve financial definitions and show missing or conflicting evidence. Keep every answer linked to its sources.",
            "setup": {
              "min": 1296,
              "max": 3840
            }
          },
          {
            "key": "connected",
            "name": "Read an approved document folder",
            "description": "Add a read-only folder connection with document version tracking and repeat-run checks. Limit each run to the agreed pack; extra sources and licensed feeds are separate.",
            "setup": {
              "min": 1872,
              "max": 5520
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.432,
          "max": 3.432,
          "unit": "review pack",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 100,
              "noun": "text pages"
            },
            {
              "key": "documentsPerUnit",
              "count": 10,
              "noun": "source documents"
            },
            {
              "key": "questionsPerUnit",
              "count": 10,
              "noun": "diligence questions"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 20
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Cited answers with missing and conflicting evidence visible.",
        "metrics": [
          {
            "name": "Source-supported answers",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check each factual answer claim against the correct source. Report completeness separately; a short or empty answer cannot pass by omitting required facts."
          },
          {
            "name": "Required facts included",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Score all analyst-labelled required facts and contradictions. Explicitly mark genuinely absent evidence; calling an available fact missing is an error."
          },
          {
            "name": "Correct financial figures",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Match the original value, scale, sign, entity, period and currency. Keep adjusted and reported figures distinct; conflicting sources must remain visible."
          },
          {
            "name": "Valid source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Open each citation at the correct passage and document version. Test changed files, inaccessible sources and deal-level permissions."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "maxPages": 100,
          "concurrentJobs": 2,
          "unit": "review pack"
        },
        "controls": "Preserve period, entity, currency, units and reported-versus-adjusted definitions. A cited number can still be used incorrectly. Every pack needs analyst review."
      }
    },
    {
      "id": "invoice-processing",
      "title": "Invoice Processing",
      "description": "A purchasing guide to buying a workflow that reads supplier invoices, checks the details and prepares records for your accounting team.",
      "url": "https://renx.openmercury.com/purchasing-guides/invoice-processing/",
      "category": {
        "id": "accounting-finance",
        "name": "Finance & Accounting",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/accounting-finance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost only; human review and maintenance are separate. Confirmed in your pilot.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Extract and check invoices",
            "description": "Upload files and receive checked records and an exception list. No accounting-system writes.",
            "setup": {
              "min": 720,
              "max": 2160
            }
          },
          {
            "key": "connected",
            "name": "Prepare accounting drafts",
            "description": "Adds an agreed mailbox or storage intake, supplier and purchase-order matching, and approved draft bills in an agreed accounting system.",
            "setup": {
              "min": 1440,
              "max": 4080
            }
          }
        ],
        "baseline": {
          "standard": "Checked invoice records",
          "deployment": "Your cloud",
          "modelAccess": "Approved OCR and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.0556,
          "max": 0.0756,
          "unit": "invoice",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved OCR and model APIs",
            "monthlyVolume": 2000,
            "pages": 3
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Checked invoice records",
        "description": "Read required fields and line items; flag duplicates, missing data and inconsistent totals.",
        "metrics": [
          {
            "name": "Required fields correct",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct supplier, invoice reference, dates, currency and totals divided by all required labelled fields; missing answers count as errors. Report each field separately."
          },
          {
            "name": "Line-item fields correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct required descriptions, quantities, prices and tax fields divided by all labelled line-item fields; unmatched or omitted items count as errors."
          },
          {
            "name": "Invoices ready without edits",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Invoices with every required field and check correct divided by all inputs, including rejected files. No field average can substitute for this result."
          },
          {
            "name": "Required reviews caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled duplicate, missing-field, conflicting-total or unmatched-reference cases correctly referred for review divided by all cases requiring review. Report false review flags separately."
          }
        ],
        "speed": {
          "p95Seconds": 30,
          "maxPages": 3,
          "concurrentJobs": 1,
          "unit": "invoice",
          "definition": "From receipt to checked record, including queueing and retries. Human review and accounting approval are separate."
        },
        "controls": "Keep originals and evidence. Missing data is flagged, never invented. Every accounting write needs approval; no payment or bank-detail changes."
      }
    },
    {
      "id": "it-help-desk-requests",
      "title": "IT Help Desk Requests",
      "description": "A purchasing guide to buying a workflow that answers routine employee IT questions from your own help articles and turns other requests into complete, correctly routed tickets for your IT team.",
      "url": "https://renx.openmercury.com/purchasing-guides/it-help-desk-requests/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "answers",
        "scopes": [
          {
            "key": "answers",
            "name": "Answer and route requests",
            "description": "Answer how-to questions from approved articles with a citation, ask for missing details, set category and priority, and hand everything else to your IT queue as a complete ticket draft.",
            "setup": {
              "min": 936,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Connect my service desk and access approvals",
            "description": "Adds ticket creation and status updates in your service desk, and an approval step for a short list of access groups. After the named approver says yes, it adds the person to that group and records who approved it.",
            "setup": {
              "min": 1800,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0704,
          "max": 0.1704,
          "unit": "request",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Sourced answers for routine questions, with anything unclear handed to your IT team.",
        "metrics": [
          {
            "name": "Correct sourced answers",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "An answer passes only when your IT team agrees it is correct and it cites an approved article that supports it. Unsourced answers count as failures."
          },
          {
            "name": "Correct category and queue",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Tickets whose category, priority and queue match the IT team's label, divided by all tickets in the test set."
          },
          {
            "name": "Sensitive requests handed over",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled security reports, admin-rights requests and out-of-policy requests sent to a person, divided by all such labelled requests."
          },
          {
            "name": "Changes with approval",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every account or access change must have a recorded approval from the named approver before it runs. Any exception fails the release."
          }
        ],
        "speed": {
          "p95Seconds": 30,
          "concurrentJobs": 5,
          "unit": "request"
        },
        "controls": "An answer is only as good as the article behind it. When no approved article covers the question, the workflow says so and opens a ticket instead of guessing."
      }
    },
    {
      "id": "lease-renewal-preparation",
      "title": "Lease Renewal Preparation",
      "description": "Checks expiring leases and approved renewal terms, then prepares reminders and reply drafts for your property team.",
      "url": "https://renx.openmercury.com/purchasing-guides/lease-renewal-preparation/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for one property's checked renewal preparation, not the entire EliseAI platform or a PMS licence.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload my lease records",
            "description": "Read text-readable files, check dates and approved terms, then prepare a reminder or reply draft with source evidence.",
            "setup": {
              "min": 1296,
              "max": 3840
            }
          },
          {
            "key": "connected",
            "name": "Read my property records",
            "description": "Read one authorised property source, reconcile changed records and reopen affected reviews. No sending messages or changing lease records.",
            "setup": {
              "min": 1800,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2544,
          "max": 0.4044,
          "unit": "renewal case",
          "composition": [
            {
              "key": "leasesPerUnit",
              "count": 1,
              "noun": "current lease"
            },
            {
              "key": "amendmentsPerUnit",
              "count": 2,
              "noun": "amendments"
            },
            {
              "key": "messagesPerUnit",
              "count": 6,
              "noun": "resident messages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Check current lease details, dates, approved terms and draft evidence.",
        "metrics": [
          {
            "name": "Lease-detail accuracy",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct property, unit, lease identity, expiry date, term length and amount fields divided by all labelled fields. Missing extraction remains in the denominator; amendments must control the correct fields."
          },
          {
            "name": "Ready-to-review drafts",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Drafts with the correct purpose, approved terms, supported explanations and correct escalation divided by all held-out cases. A case with missing data passes only if held with the correct reason, not if a plausible offer is invented."
          },
          {
            "name": "Reminder dates correct",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Calculate dates from the authoritative lease and frozen reminder policy with the property time zone and business-day rules. Test boundaries and amendments. These are configured reminders, not legal notice advice."
          },
          {
            "name": "Approved terms preserved",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every numeric term and commitment in a draft must match the current approved record and intended unit. Unknown terms stay blank or on hold; the workflow does not choose rents or eligibility."
          },
          {
            "name": "Exceptions escalated",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Score correct holds for missing approvals, contradictory amendments, ambiguous replies and requests outside approved terms. Critical tenant-rights or recipient ambiguity cases must all be held."
          },
          {
            "name": "Source details preserved",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct source span, version and property for each material fact. Links alone do not pass if the cited source contradicts the draft."
          },
          {
            "name": "Approval controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every challenge blocks cross-property access, unapproved sending, rent changes, renewal decisions, signatures and binding notices. Stale approval must not authorize a changed draft."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "renewal case"
        },
        "controls": "Pilot targets for checked renewal drafts, not retention, rent growth or legal compliance. Critical recipient, term and approval errors are not allowed. Your property team reviews every case."
      }
    },
    {
      "id": "legal-due-diligence-tables",
      "title": "Legal Due Diligence Tables",
      "description": "A purchasing guide to buying a workflow that turns deal contracts and amendments into a cited diligence table, with missing documents and issues ready for legal review.",
      "url": "https://renx.openmercury.com/purchasing-guides/legal-due-diligence-tables/",
      "category": {
        "id": "legal-compliance",
        "name": "Legal & Compliance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/legal-compliance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review an uploaded deal pack",
            "description": "Group related contracts, extract agreed terms and prepare a source-linked issue table. Include reviewed states, missing-document requests and editable exports.",
            "setup": {
              "min": 1584,
              "max": 4560
            }
          },
          {
            "key": "connected",
            "name": "Read an approved deal folder",
            "description": "Import selected files from an approved folder. Track source changes, retain reviewer decisions and reopen affected cells for review.",
            "setup": {
              "min": 2160,
              "max": 6240
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.504,
          "max": 3.504,
          "unit": "diligence pack",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 100,
              "noun": "text pages"
            },
            {
              "key": "documentsPerUnit",
              "count": 20,
              "noun": "source documents"
            },
            {
              "key": "fieldsPerUnit",
              "count": 10,
              "noun": "review fields"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 20
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "A cited table with material issues and missing documents visible.",
        "metrics": [
          {
            "name": "Correct extracted terms",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Score every required review cell, including genuinely absent terms. Wrong parties, dates, exceptions or unsupported values are errors; empty outputs cannot pass."
          },
          {
            "name": "Material issues found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Use counsel-labelled issues and the agreed materiality rules. Include issues created by amendments, cross-references and missing documents, not just obvious clauses."
          },
          {
            "name": "Relevant issue flags",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Count all proposed flags and check whether each is supported and relevant. Flagging every clause cannot pass by achieving high recall."
          },
          {
            "name": "Correct amendment handling",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check the base contract, amendment sequence, execution evidence and affected clauses. A genuinely uncertain relationship must stay unresolved; guessing a convenient version is an error."
          },
          {
            "name": "Valid clause citations",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Open the exact clause in the recorded source version. Test stale links, revised files, duplicate names and access changes."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "maxPages": 100,
          "concurrentJobs": 2,
          "unit": "diligence pack"
        },
        "controls": "Keep missing evidence and unresolved amendments separate from confirmed facts. A source-backed table is not a legal clearance, and every pack requires counsel review."
      }
    },
    {
      "id": "lesson-plans-practice-packs",
      "title": "Lesson Plans & Practice Packs",
      "description": "A purchasing guide to a workflow that turns your curriculum and lesson objectives into lesson plans, levelled practice and answer keys for teacher review.",
      "url": "https://renx.openmercury.com/purchasing-guides/lesson-plans-practice-packs/",
      "category": {
        "id": "education",
        "name": "Education",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/education/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "AI-assisted setup using reusable components and your approved sources.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Lesson plans and practice",
            "description": "Get a lesson plan, levelled practice and an answer key. Add a connection to your curriculum folder and save approved packs as drafts.",
            "setup": {
              "min": 1008,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Connect my curriculum library",
            "description": "Read approved material from one authorised source connection and save reviewed outputs as drafts in one agreed destination. No automatic release.",
            "setup": {
              "min": 1512,
              "max": 4320
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.181866666667,
          "max": 0.3152,
          "unit": "lesson pack",
          "composition": [
            {
              "key": "activitiesPerUnit",
              "count": 10,
              "noun": "practice activities"
            },
            {
              "key": "levelsPerUnit",
              "count": 3,
              "noun": "reading levels"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 300
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Expert-reviewed output with checks against your agreed sources and reference examples.",
        "metrics": [
          {
            "name": "Content correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Teachers check every factual statement against approved materials. Unsupported or confidently wrong content fails."
          },
          {
            "name": "Objectives covered",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "A curriculum lead labels objective-to-activity alignment before seeing the workflow output; superficial keyword matches do not count."
          },
          {
            "name": "Levelled activities suitable",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Teachers use an agreed reading-level and cognitive-demand rubric. Easier language must not remove the learning objective."
          },
          {
            "name": "Answer keys correct",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "A wrong or ambiguous answer key is a critical failure, not a rounding error in the overall score."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Require approval of the exact source and output version before any release or system write. Changed sources invalidate approval. Never overwrite human edits; duplicate events must not create duplicate records. Treat documents as data, not instructions."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "lesson pack"
        },
        "controls": "Your teacher checks the content and answer keys before learners see it. No automatic posting to classes, student grading, individual education plans or claims of improved attainment."
      }
    },
    {
      "id": "loan-covenant-monitoring",
      "title": "Loan Covenant Compliance Checks",
      "description": "A purchasing guide to buying a workflow that reads borrower reporting packages, recalculates the covenant tests in each loan agreement and lists passes, breaches and open questions for your credit team.",
      "url": "https://renx.openmercury.com/purchasing-guides/loan-covenant-monitoring/",
      "category": {
        "id": "trading-risk",
        "name": "Trading & Risk Management",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/trading-risk/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Check uploaded reporting packages",
            "description": "Read agreed statement and certificate formats, extract the financial inputs each covenant needs, recalculate the tests and return pass, possible breach and open-question results with page references.",
            "setup": {
              "min": 1512,
              "max": 3960
            }
          },
          {
            "key": "connected",
            "name": "Connect to my loan records",
            "description": "Adds read-only loan records and a document store, a tracker for reporting packages that are due or missing, and version handling for restated or resubmitted statements.",
            "setup": {
              "min": 2376,
              "max": 6360
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.5044,
          "max": 1.0044,
          "unit": "package",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 80,
            "pages": 40
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate tests, with unclear inputs held for review.",
        "metrics": [
          {
            "name": "Financial inputs correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "An input passes only when value, period, currency and scale are correct; an input marked missing when it is missing is correct."
          },
          {
            "name": "Covenant results correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "A test passes only when the recalculated value and the pass or breach result match the credit officer's label."
          },
          {
            "name": "Breaches caught",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Breaches flagged or held for review divided by all labelled breaches; missing results count as misses."
          },
          {
            "name": "Complete source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Results must keep the statement page, compliance certificate line, covenant definition version and calculation steps."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "maxPages": 120,
          "concurrentJobs": 2,
          "unit": "package"
        },
        "controls": "Calculate covenants with exact arithmetic from the definitions your credit officers approve. A model reading of the credit agreement is not a covenant definition, and a recalculated result is not a credit decision."
      }
    },
    {
      "id": "long-video-short-clips",
      "title": "Long Video to Short Clips",
      "description": "A purchasing guide to buying a workflow that turns your interviews, podcasts and explainers into captioned short clips you can review and edit.",
      "url": "https://renx.openmercury.com/purchasing-guides/long-video-short-clips/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Clip recordings I upload",
            "description": "Upload an authorised recording and receive editable clip drafts with source timestamps, caption templates and portrait framing. Keep the source and edit settings for later changes.",
            "setup": {
              "min": 1800,
              "max": 5040
            }
          },
          {
            "key": "connected",
            "name": "Pick up recordings from my folder",
            "description": "Adds an authorised source-folder connection, duplicate detection, job status and failure notifications. Finished clips stay in your review area until you choose to download or share them.",
            "setup": {
              "min": 2232,
              "max": 6240
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 2.3399456,
          "max": 6.3399456,
          "unit": "video batch",
          "composition": [
            {
              "key": "sourceMinutesPerUnit",
              "count": 30,
              "noun": "source-video minutes"
            },
            {
              "key": "clipsPerUnit",
              "count": 3,
              "noun": "clip drafts"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 10
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Use reusable caption styles, editable moments and checked portrait framing.",
        "metrics": [
          {
            "name": "Clips accepted for light editing",
            "target": 80,
            "unit": "%",
            "direction": "gte",
            "definition": "An editor accepts the topic, complete meaning, context and cut points using a rubric agreed before testing. Count every requested draft, including duplicates and failures. Report no-output recordings and useful-clip yield separately."
          },
          {
            "name": "Caption word accuracy",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare captions with a human transcript using word substitutions, deletions and insertions. Preserve names, numbers and negation; meaning-changing errors block sharing even if the overall score passes."
          },
          {
            "name": "Important content kept in frame",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Inspect frames sampled across every output clip plus all cut and layout changes. Check the speaker, slides and caption safe areas; unresolved crop failures count as failures, not excluded samples."
          },
          {
            "name": "Caption timing within tolerance",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare caption boundaries with the reference audio timing. Check audio-video drift independently and reject exports with missing or clipped speech."
          },
          {
            "name": "Exports pass technical checks",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Validate duration, dimensions, frame rate, readable captions, decodable video and intact audio for every requested export. Deliver subtitle files and cut settings; a successful render alone does not prove editorial quality."
          }
        ],
        "speed": {
          "p95Seconds": 1200,
          "concurrentJobs": 2,
          "unit": "video batch"
        },
        "controls": "Meaning-changing edits, fabricated speech or unauthorised footage block sharing. Technical success and an AI score do not replace editorial approval."
      }
    },
    {
      "id": "machine-fault-troubleshooting",
      "title": "Machine Fault Troubleshooting",
      "description": "A purchasing guide to buying a workflow that answers a technician's fault question from your equipment manuals, procedures and past work orders, with likely causes, checks and sources, while people do every repair.",
      "url": "https://renx.openmercury.com/purchasing-guides/machine-fault-troubleshooting/",
      "category": {
        "id": "manufacturing-robotics",
        "name": "Manufacturing & Robotics",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/manufacturing-robotics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "answers",
        "scopes": [
          {
            "key": "answers",
            "name": "Answer from manuals and past repairs",
            "description": "Search your manuals, procedures and exported past work orders, then answer with likely causes in order, the checks to make, required safety steps and a draft work order note.",
            "setup": {
              "min": 1080,
              "max": 3120
            }
          },
          {
            "key": "connected",
            "name": "Connect alarms and work orders",
            "description": "Adds read-only alarm history from your historian or monitoring system, live lookup of work orders and asset records, and draft work order notes that a technician confirms before they are saved.",
            "setup": {
              "min": 1800,
              "max": 5160
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.15,
          "max": 0.25,
          "unit": "fault",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Useful causes and checks from your sources, with uncertain cases referred to a person.",
        "metrics": [
          {
            "name": "Confirmed cause suggested",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Held-out past faults whose confirmed cause appears among the top three suggestions with a supporting source, divided by all test faults."
          },
          {
            "name": "Statements backed by a source",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Statements in answers that the cited manual page, procedure or work order supports, divided by all statements checked."
          },
          {
            "name": "Safety steps included",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Answers to faults that need a lockout or safety step and include that step from your procedures, divided by all such answers."
          },
          {
            "name": "Unknown faults handed over",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Test faults outside your sources where the answer says so and refers to a person, divided by all such faults."
          }
        ],
        "speed": {
          "p95Seconds": 30,
          "concurrentJobs": 5,
          "unit": "fault"
        },
        "controls": "Answers are suggestions for a qualified technician, not instructions to bypass your procedures. Your technicians still inspect, decide and repair, and your safety rules always apply."
      }
    },
    {
      "id": "medical-record-chronologies",
      "title": "Medical Record Chronologies",
      "description": "A purchasing guide to buying a workflow that turns a client's medical records and bills into a dated chronology, with a source page for every entry, for your attorneys and case staff to check.",
      "url": "https://renx.openmercury.com/purchasing-guides/medical-record-chronologies/",
      "category": {
        "id": "legal-compliance",
        "name": "Legal & Compliance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/legal-compliance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample files.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload case files",
            "description": "Read each page, list every dated visit, test, procedure and prescription with provider and source page, match bills to visits and show treatment gaps and missing bills.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Connect my case management system",
            "description": "Adds read-only retrieval of a case's record and bill documents and saves the chronology to the case as a draft document, with duplicate-safe retries.",
            "setup": {
              "min": 1800,
              "max": 5160
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 2.48,
          "max": 3.48,
          "unit": "case",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 500,
              "noun": "pages of records and bills"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 40
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Most events caught, correct details and a source page for every entry, checked by your staff.",
        "metrics": [
          {
            "name": "Treatment events found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Events in the staff-checked chronology that appear in the draft with the right date, divided by all events in the checked chronology; missing output counts as a miss."
          },
          {
            "name": "Entry details correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "An entry passes only when its date, provider, complaint, findings and any medication match the cited page; an invented diagnosis fails the run."
          },
          {
            "name": "Source pages correct",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Entries whose linked page supports the entry, divided by all entries in the draft."
          },
          {
            "name": "Bills accounted for",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Billed charges matched to the correct visit or listed as unmatched, divided by all billed charges in the case file."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 2,
          "unit": "case"
        },
        "controls": "A missed visit or a wrong page matters more than an extra entry to check. The chronology is a working draft; your attorneys decide what it means for the case."
      }
    },
    {
      "id": "model-inference-optimization",
      "title": "Model Inference Optimization",
      "description": "Buy a reusable tool that tests your model on your hardware and compares faster settings against your quality requirements.",
      "url": "https://renx.openmercury.com/purchasing-guides/model-inference-optimization/",
      "category": {
        "id": "ai-models",
        "name": "AI Models & Specialisation",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ai-models/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-08",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Profile and tune a runtime",
            "description": "Benchmark the existing runtime and test compatible batching, caching and compilation settings.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          },
          {
            "key": "connected",
            "name": "Integrate the approved configuration",
            "description": "Add a staging service adapter, load-test gates and a controlled configuration rollout.",
            "setup": {
              "min": 2304,
              "max": 6480
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.286,
          "max": 1.136,
          "unit": "benchmark run",
          "composition": [
            {
              "key": "requestsPerUnit",
              "count": 100,
              "noun": "benchmark requests"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Baseline quality retained",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Optimized aggregate quality score divided by the positive baseline score on the same independent fixture set, capped at full retention."
          },
          {
            "name": "Successful throughput improvement",
            "target": 10,
            "unit": "%",
            "direction": "gte",
            "definition": "Additional successful requests per second divided by baseline successful requests per second at fixed concurrency and workload."
          },
          {
            "name": "Tail-latency regression",
            "target": 5,
            "unit": "%",
            "direction": "lte",
            "definition": "Positive increase in end-to-end tail latency divided by baseline tail latency on the same requests; an improvement has no regression."
          },
          {
            "name": "Approved runtime boundaries",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed model-integrity, access and rollback control cases divided by all tested control cases; any unauthorized deployment fails acceptance."
          }
        ],
        "speed": {
          "p95Seconds": 1800,
          "concurrentJobs": 1,
          "unit": "benchmark run"
        },
        "controls": "Proposed targets apply to an independently labeled test set on the agreed workload, not every possible future input. Review each pilot result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "model-routing-fallback",
      "title": "Model Routing & Fallback",
      "description": "A purchasing guide to buying a workflow that chooses an approved AI model for each task and switches when a model is unavailable.",
      "url": "https://renx.openmercury.com/purchasing-guides/model-routing-fallback/",
      "category": {
        "id": "ai-models",
        "name": "AI Models & Specialisation",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ai-models/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for task-tested custom routing and controls, not a fee for installing a free gateway.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Try my sample requests",
            "description": "Run your samples through approved routes and return the response, model, attempts and usage. Test task quality and failures before live use.",
            "setup": {
              "min": 864,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Connect my app",
            "description": "Adds authentication, per-app limits and a versioned connection. Your team approves a staged rollout and can switch back to its existing endpoint.",
            "setup": {
              "min": 1296,
              "max": 3840
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0264,
          "max": 0.0294,
          "unit": "request",
          "composition": [
            {
              "key": "inputTokensPerUnit",
              "count": 4000,
              "noun": "input tokens"
            },
            {
              "key": "outputTokensPerUnit",
              "count": 500,
              "noun": "output tokens"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 10000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test your common tasks, fallback behaviour and model and spending rules.",
        "metrics": [
          {
            "name": "Tasks completed correctly",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Agree reference answers, extraction fields or an independent grading rubric for each task. Count all in-scope requests, including errors and failed output validation; a successful HTTP response is not a correct answer."
          },
          {
            "name": "Recoverable failures handled",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Use a controlled outage with an approved healthy spare and sufficient pre-agreed budget. Keep missed and failed recovery cases in the denominator. Safety refusals, policy blocks and exhausted budgets must stop; they are not outages to bypass."
          },
          {
            "name": "Model and data rules respected",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Check every attempt, including retries and errors. Untrusted prompt text cannot modify allowlists, tenant access, data policy or fallback destinations."
          },
          {
            "name": "Budget limits respected",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Reserve the maximum possible billed cost before dispatch using verified tariffs and token limits. Account for concurrent requests, timed-out calls and uncertain billing; do not release an uncertain reservation as though no cost occurred."
          },
          {
            "name": "Complete routing records",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Record all requests and attempts without storing sensitive prompt contents by default. Unknown provider usage stays pending reconciliation, not zero."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 10,
          "unit": "request"
        },
        "controls": "These are pilot targets, not a promise of universal accuracy or uptime. Freeze the task rubric and approved routes before testing. A cost band is not a hard spending ceiling. Fail closed when no eligible route remains."
      }
    },
    {
      "id": "onchain-security-alert-triage",
      "title": "On-Chain Security Alert Triage",
      "description": "A guide to buying an AI workflow that explains on-chain security alerts and suggests which need urgent attention, with supporting evidence.",
      "url": "https://renx.openmercury.com/purchasing-guides/onchain-security-alert-triage/",
      "category": {
        "id": "web3-crypto",
        "name": "Web3 & Crypto",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/web3-crypto/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "brief",
        "scopes": [
          {
            "key": "brief",
            "name": "Explain each alert",
            "description": "Receive each alert, decode the transaction and contracts involved, check related addresses and past alerts, and post a brief with suggested urgency, value at risk and the matching runbook.",
            "setup": {
              "min": 1080,
              "max": 3120
            }
          },
          {
            "key": "incident",
            "name": "Add paging and incident tickets",
            "description": "Adds grouping of related alerts, paging the on-call responder for urgent ones, an incident ticket and a timeline of transactions and decisions.",
            "setup": {
              "min": 1656,
              "max": 4920
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.146,
          "max": 0.196,
          "unit": "alert",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 600
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Urgent alerts caught, false alarms explained, uncertain alerts sent to a responder.",
        "metrics": [
          {
            "name": "Real incidents marked urgent",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Replayed real attacks and seeded incidents marked urgent, divided by all such alerts in the test set. A missed or failed brief counts as a miss."
          },
          {
            "name": "False alarms marked low",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Known false alarms marked low urgency with a stated reason, divided by all known false alarms."
          },
          {
            "name": "Brief facts correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Amounts, addresses, function names and balance changes in briefs that match chain data, divided by all such facts stated."
          },
          {
            "name": "Right runbook linked",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Alerts that link the runbook your team agrees applies, divided by all alerts with an applicable runbook."
          },
          {
            "name": "Briefs with references",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every brief must give the transaction hash, block, chain and alert reference it is based on."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 4,
          "unit": "alert"
        },
        "controls": "A brief is decision support, not a verdict. When the workflow is unsure it marks the alert for a responder; it never lowers urgency to stay quiet."
      }
    },
    {
      "id": "online-review-replies",
      "title": "Online Review Replies",
      "description": "A guide to buying an AI workflow that drafts customer review replies in your voice and sends sensitive complaints to a manager.",
      "url": "https://renx.openmercury.com/purchasing-guides/online-review-replies/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Approve every reply",
            "description": "Read new reviews for the locations in scope, label topic and risk, draft a reply in your voice and policy, send sensitive complaints to the named manager and post approved replies to Google.",
            "setup": {
              "min": 864,
              "max": 3000
            }
          },
          {
            "key": "routing",
            "name": "Auto-post routine replies",
            "description": "Adds posting low-risk replies under rules you set by rating, topic and location, opening a ticket or message for issues a location must handle, and a weekly summary of themes per location.",
            "setup": {
              "min": 1584,
              "max": 5160
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0272,
          "max": 0.0672,
          "unit": "review",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Useful drafts in your voice, with sensitive complaints sent to a person before any reply.",
        "metrics": [
          {
            "name": "Drafts approved as written",
            "target": 80,
            "unit": "%",
            "direction": "gte",
            "definition": "Draft replies that managers approve with no change or only a light edit, divided by all drafts on the test reviews."
          },
          {
            "name": "Replies within policy",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Replies that follow your reply policy, with no admission of fault, no compensation outside policy and no guest personal details, divided by all replies."
          },
          {
            "name": "Sensitive reviews escalated",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled sensitive reviews, such as illness, injury, discrimination, legal threats or accusations against named staff, sent to a person before any reply, divided by all such reviews."
          },
          {
            "name": "Replies with a record",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Replies recorded with the review, the risk label, the rule used and who approved or posted them, divided by all replies."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 4,
          "unit": "review"
        },
        "controls": "Review replies are public. Your managers decide what is posted unless your rules allow posting low-risk replies, and they handle the complaints passed to them."
      }
    },
    {
      "id": "playtest-feedback-analysis",
      "title": "Playtest Feedback & Issue Reports",
      "description": "Buy a reusable tool that turns playtest recordings and player comments into issue drafts linked to the relevant moments.",
      "url": "https://renx.openmercury.com/purchasing-guides/playtest-feedback-analysis/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-08",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Analyze supplied sessions",
            "description": "Import consented footage and transcripts, group observations and prepare evidence-linked issue drafts.",
            "setup": {
              "min": 1512,
              "max": 4320
            }
          },
          {
            "key": "connected",
            "name": "Connect approved issue tracking",
            "description": "Add an authorized issue-tracker adapter and reviewer-approved ticket creation with duplicate checks.",
            "setup": {
              "min": 1944,
              "max": 5520
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.237,
          "max": 0.267,
          "unit": "session",
          "composition": [
            {
              "key": "minutesPerUnit",
              "count": 10,
              "noun": "recorded minutes"
            },
            {
              "key": "framesPerUnit",
              "count": 30,
              "noun": "sampled evidence frames"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Labeled issues covered",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Independently labeled actionable issues represented in the review queue divided by all labeled actionable issues."
          },
          {
            "name": "Useful issue groups",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Reviewer-confirmed actionable groups divided by all generated issue groups, including duplicates and unsupported claims."
          },
          {
            "name": "Correct evidence links",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Issue links pointing to the correct session and supporting timestamp divided by all generated evidence links."
          },
          {
            "name": "Consent and sharing controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed consent, redaction and approved-sharing cases divided by all tested control cases; any unapproved sharing fails acceptance."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 1,
          "unit": "session"
        },
        "controls": "Proposed targets apply to an independently labeled test set on the agreed workload, not every possible future input. Review each pilot result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "pre-sign-transaction-preview",
      "title": "Pre-sign Transaction Preview",
      "description": "Shows asset movements, token approvals and policy mismatches before your team signs a transaction.",
      "url": "https://renx.openmercury.com/purchasing-guides/pre-sign-transaction-preview/",
      "category": {
        "id": "web3-crypto",
        "name": "Web3 & Crypto",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/web3-crypto/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for a bounded transaction preview workflow, not Blockaid's threat network or a production cosigner.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload an unsigned transaction",
            "description": "Supply the exact unsigned payload and intended action. Simulate at a recorded block, check approved rules and show changes for review.",
            "setup": {
              "min": 1440,
              "max": 4320
            }
          },
          {
            "key": "connected",
            "name": "Read my proposal queue",
            "description": "Read one authorised unsigned-proposal source, preview changed payloads and invalidate stale reviews. No wallet approval or signing permissions.",
            "setup": {
              "min": 1944,
              "max": 5880
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.067,
          "max": 0.107,
          "unit": "transaction preview",
          "composition": [
            {
              "key": "transactionsPerUnit",
              "count": 1,
              "noun": "unsigned transaction"
            },
            {
              "key": "chainsPerUnit",
              "count": 1,
              "noun": "agreed EVM chain"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Check supported effects, spending limits, evidence and isolation.",
        "metrics": [
          {
            "name": "Asset-effect accuracy",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct supported asset contract, address, signed quantity and resulting approval fields divided by all independently labelled fields. Missing fields count as wrong; reverts and unsupported calls must not appear successful."
          },
          {
            "name": "Policy exceptions caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Recall of exceptions to the buyer's frozen recipient, amount and allowance rules. Unknown addresses or unverified identities remain unresolved. This is not malicious-contract detection."
          },
          {
            "name": "Policy warnings correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly raised policy warnings divided by all policy warnings. Include compliant examples; a system that flags every transaction cannot pass."
          },
          {
            "name": "Critical amounts preserved",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Critical amounts, token decimals, spender and destination addresses must match raw evidence using integer arithmetic and canonical addresses. A fabricated symbol or asset value cannot replace a contract address."
          },
          {
            "name": "Evidence linked",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every material statement links to the exact payload fingerprint, chain, block hash, execution result and policy version. Stale or mismatched evidence is a failure."
          },
          {
            "name": "Signing isolated",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Challenge tests must block signing, broadcasts, key requests, cosigning, rule changes, cross-wallet data access and stale review reuse. A revert, timeout or missing trace cannot yield a successful preview."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "transaction preview"
        },
        "controls": "Targets apply to the agreed transaction set at recorded chain state. Every preview needs human review. Critical wrong amounts, recipients or signing actions are not allowed. Simulation is not a safety guarantee."
      }
    },
    {
      "id": "preventive-maintenance-plans",
      "title": "Preventive Maintenance Plans",
      "description": "A purchasing guide to buying a workflow that turns equipment manuals and service records into maintenance tasks, due dates and source links for your team to approve.",
      "url": "https://renx.openmercury.com/purchasing-guides/preventive-maintenance-plans/",
      "category": {
        "id": "manufacturing-robotics",
        "name": "Manufacturing & Robotics",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/manufacturing-robotics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for your equipment family and approved rules, not a complete maintenance platform or sensor licence.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload my equipment records",
            "description": "Read the manual, approved rules and service records. Draft tasks and next due dates, leaving missing information visible.",
            "setup": {
              "min": 936,
              "max": 2760
            }
          },
          {
            "key": "connected",
            "name": "Connect my maintenance system",
            "description": "Read authorised assets, completion history and usage counters. Changed records reopen the plan for review; nothing is written back or scheduled automatically.",
            "setup": {
              "min": 1368,
              "max": 3960
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2202,
          "max": 0.3702,
          "unit": "asset plan",
          "composition": [
            {
              "key": "assetsPerUnit",
              "count": 1,
              "noun": "equipment asset"
            },
            {
              "key": "pagesPerUnit",
              "count": 20,
              "noun": "text-readable manual pages"
            },
            {
              "key": "tasksPerUnit",
              "count": 10,
              "noun": "agreed maintenance tasks"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Draft complete tasks and calculated due dates with sources and visible gaps.",
        "metrics": [
          {
            "name": "Required tasks captured",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Captured required tasks divided by all independently labelled in-scope tasks. Missed, deferred and unprocessed tasks remain in the denominator."
          },
          {
            "name": "Due-date accuracy",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct due dates or correctly unresolved fields divided by all labelled scheduling fields. Check fixed and completion-based rules, units, timezones and month-end behaviour; never guess a missing anchor."
          },
          {
            "name": "Valid source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every task and interval links to the correct asset manual or approved rule, input version and calculation inputs. An unrelated citation fails."
          },
          {
            "name": "Missing information marked",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All labelled missing, stale, reset or conflicting dates and usage readings remain visible for review. Unknown readings cannot produce an all-clear result."
          },
          {
            "name": "Approval controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All challenge cases reject equipment control, work-order release and unapproved interval changes. Any source change invalidates affected approvals."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 2,
          "unit": "asset plan"
        },
        "controls": "Test-set targets, not equipment uptime or safety guarantees. Missing dates and invalid counters remain unresolved. An engineer approves every plan before your existing process releases work."
      }
    },
    {
      "id": "prior-authorization-requests",
      "title": "Prior Authorization Request Preparation",
      "description": "A purchasing guide to a workflow, deployed in your environment, that reads an order, the chart documents and the payer policy you select, and prepares a prior authorization request with a criteria checklist for your staff to review and submit.",
      "url": "https://renx.openmercury.com/purchasing-guides/prior-authorization-requests/",
      "category": {
        "id": "healthcare-life-sciences",
        "name": "Healthcare & Life Sciences",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/healthcare-life-sciences/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Prepare from uploaded documents",
            "description": "Read the uploaded order, chart documents and selected payer policy, fill the request fields, mark each criterion as documented, missing or unclear with page references, and draft a cover letter.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Read chart documents from my EHR",
            "description": "Adds a read-only document connection for the ordered patient, a check that every document belongs to that patient and order, duplicate-safe reruns and visible failures. Staff still review and submit.",
            "setup": {
              "min": 1728,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.254,
          "max": 0.354,
          "unit": "request",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 40,
              "noun": "chart pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Supported criteria statuses with unclear items held for staff.",
        "metrics": [
          {
            "name": "Criteria marked correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Criteria with the status a reviewer assigned and a page that supports it, divided by all criteria in the selected policies."
          },
          {
            "name": "Missing documents found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly listed gaps divided by all gaps reviewers labelled; an item marked documented without support counts as a miss."
          },
          {
            "name": "Request fields correct",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Form fields that match the order and chart, divided by all required fields; blank required fields are errors."
          },
          {
            "name": "Valid page references",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Statements whose cited document and page belong to the same patient and contain the stated fact, divided by all statements."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 3,
          "unit": "request"
        },
        "controls": "A criterion marked as documented is a pointer to chart evidence, not a judgement that the service is needed. Your clinician makes that decision and payer rules change, so staff confirm the current policy."
      }
    },
    {
      "id": "private-event-enquiries",
      "title": "Private Event Enquiries & Proposals",
      "description": "A guide to buying an AI workflow that drafts replies and proposals for private events, using your spaces, menus and availability.",
      "url": "https://renx.openmercury.com/purchasing-guides/private-event-enquiries/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "replies",
        "scopes": [
          {
            "key": "replies",
            "name": "Draft replies",
            "description": "Read each enquiry, record the event details, check the calendar for open dates and draft a reply with the spaces, packages, minimum spend and next questions that fit, for your events team to approve.",
            "setup": {
              "min": 1080,
              "max": 3360
            }
          },
          {
            "key": "proposals",
            "name": "Add leads and proposals",
            "description": "Adds creating or matching the lead in your event software, a draft proposal with the space, menu and minimum spend, a hold request on the date for your team to confirm, and duplicate-safe retries.",
            "setup": {
              "min": 1872,
              "max": 5520
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0932,
          "max": 0.1932,
          "unit": "enquiry",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct event details and replies from your sheets, with unusual enquiries passed to your events team.",
        "metrics": [
          {
            "name": "Event details found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Event details recorded correctly, divided by all labelled details in the test enquiries. A wrong date or guest count counts as a failure."
          },
          {
            "name": "Reply facts correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Draft replies whose spaces, menus, prices, dates and policies all match your sheets and calendar, divided by all drafts. One wrong fact fails the draft."
          },
          {
            "name": "Enquiries passed to a person",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled enquiries that need a person, such as buyouts, complaints, contract changes or requests outside policy, passed to your events team, divided by all such enquiries."
          },
          {
            "name": "Drafts with sources",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Drafts that name the space, package and calendar check behind them, divided by all drafts."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 4,
          "unit": "enquiry"
        },
        "controls": "Draft replies are for your events team to approve. Open dates are what the calendar showed at the time; your team confirms holds and bookings."
      }
    },
    {
      "id": "private-knowledge-search",
      "title": "Private Knowledge Search & Answers",
      "description": "A purchasing guide to buying a workflow that answers questions from your own documents, with source links and access controls.",
      "url": "https://renx.openmercury.com/purchasing-guides/private-knowledge-search/",
      "category": {
        "id": "ai-models",
        "name": "AI Models & Specialisation",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ai-models/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Search approved documents",
            "description": "Import approved text documents and access labels. Return grounded answers, source locations and a clear response when the answer is missing.",
            "setup": {
              "min": 864,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Keep my knowledge source connected",
            "description": "Adds a connector for the agreed source, incremental refresh, deletion handling and permission rechecks. Block stale or revoked content instead of serving an old cached answer.",
            "setup": {
              "min": 1440,
              "max": 4200
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0404,
          "max": 0.0804,
          "unit": "question",
          "composition": [
            {
              "key": "answersPerUnit",
              "count": 1,
              "noun": "answer"
            },
            {
              "key": "retrievedPassagesPerUnit",
              "count": 8,
              "noun": "retrieved passages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Grounded answers with permission checks and visible sources.",
        "metrics": [
          {
            "name": "Claims supported by sources",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check each factual answer claim against its cited passage and document version. Unsupported, wrong-version or contradictory claims count as incorrect."
          },
          {
            "name": "Answerable questions answered",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Among held-out questions with an authorised source answer, count only answers covering the required facts. Abstention and incomplete answers count as misses."
          },
          {
            "name": "Required evidence found",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Use independently labelled relevant passages. A question passes only when the retrieved set contains the evidence needed to answer it, within the agreed passage limit."
          },
          {
            "name": "Unknown answers handled correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "On a separate unanswerable set, require a clear limitation rather than invented facts. Report this separately from answerable coverage."
          }
        ],
        "speed": {
          "p95Seconds": 45,
          "concurrentJobs": 2,
          "unit": "question"
        },
        "controls": "Review answers during the pilot. Access controls are mandatory at every level; a high average score never excuses a data leak."
      }
    },
    {
      "id": "privilege-review-log-drafts",
      "title": "Privilege Review & Log Drafts",
      "description": "A purchasing guide to buying a workflow that suggests a privilege call for each document in a review set, cites the passage behind it and drafts the log description for your attorneys to decide.",
      "url": "https://renx.openmercury.com/purchasing-guides/privilege-review-log-drafts/",
      "category": {
        "id": "legal-compliance",
        "name": "Legal & Compliance",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/legal-compliance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample documents.",
        "recommendedScope": "export",
        "scopes": [
          {
            "key": "export",
            "name": "Upload review exports",
            "description": "Read each document with its metadata and family, check people and domains against your list, suggest withhold, redact, produce or attorney review with the supporting passage, and draft a log description that does not reveal the advice.",
            "setup": {
              "min": 936,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Connect my review platform",
            "description": "Adds read-only retrieval of documents and metadata from your review platform and writes suggestions and draft log text to separate draft fields, with duplicate-safe retries.",
            "setup": {
              "min": 1584,
              "max": 4680
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.28,
          "max": 1.68,
          "unit": "batch",
          "composition": [
            {
              "key": "documentsPerUnit",
              "count": 100,
              "noun": "documents with metadata"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Almost every privileged document caught for attorney review, with usable draft log entries.",
        "metrics": [
          {
            "name": "Privileged documents caught",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Documents suggested for withholding, redaction or attorney review divided by all documents your attorneys coded privileged; missing output counts as a miss."
          },
          {
            "name": "Privilege suggestions upheld",
            "target": 80,
            "unit": "%",
            "direction": "gte",
            "definition": "Withhold or redact suggestions your attorneys coded the same way divided by all withhold or redact suggestions."
          },
          {
            "name": "Log entries usable",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Draft log descriptions an attorney accepts without substantive change divided by all drafts; any description that reveals the advice fails the run."
          },
          {
            "name": "Passages correct",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Suggestions whose cited passage, author, recipients and date match the document divided by all suggestions."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 4,
          "unit": "batch"
        },
        "controls": "Missing a privileged document matters more than an extra one for attorneys to check. Suggestions and log text are drafts; your attorneys make every call and sign off the log."
      }
    },
    {
      "id": "product-advice-assistant",
      "title": "Product Advice & Recommendations",
      "description": "A purchasing guide to buying a workflow that answers product questions and recommends suitable items from your own store catalog.",
      "url": "https://renx.openmercury.com/purchasing-guides/product-advice-assistant/",
      "category": {
        "id": "ecommerce-internet",
        "name": "E-commerce & Internet",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ecommerce-internet/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "internal",
        "scopes": [
          {
            "key": "internal",
            "name": "An internal product advice tool",
            "description": "Use a supplied catalog snapshot and approved product notes to prepare answers and alternatives for staff. No direct shopper messages or live availability claims.",
            "setup": {
              "min": 1008,
              "max": 2760
            }
          },
          {
            "key": "connected",
            "name": "Connect to my storefront",
            "description": "Adds catalog refresh, current availability checks, a storefront widget, session limits and handover. Enable customer replies only after the merchant accepts the pilot.",
            "setup": {
              "min": 1656,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.068,
          "max": 0.108,
          "unit": "conversation",
          "composition": [
            {
              "key": "repliesPerUnit",
              "count": 5,
              "noun": "assistant replies"
            },
            {
              "key": "productsPerUnit",
              "count": 10,
              "noun": "retrieved product records per reply"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Grounded advice with suitable products and clear handovers.",
        "metrics": [
          {
            "name": "Supported product claims",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Every factual claim must be supported by the correct product variant and current approved source. Unverifiable claims count as incorrect."
          },
          {
            "name": "Suitable recommendations",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Evaluate each recommended item against the shopper's stated compatibility, size, budget and availability constraints; ignoring a hard constraint fails the item."
          },
          {
            "name": "Answerable questions handled",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct non-empty answers divided by all questions labelled answerable from approved sources. Always handing over cannot pass this measure."
          },
          {
            "name": "Required handovers caught",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Identify missing evidence, contradictory sources, regulated advice and prohibited actions using a separately labelled challenge set."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "conversation"
        },
        "controls": "Test with staff before enabling shopper replies. Keep human handover and an immediate off switch. No promised conversion lift, sales volume or autonomous buying."
      }
    },
    {
      "id": "product-catalog-enrichment",
      "title": "Product Catalog Enrichment",
      "description": "A purchasing guide to buying a workflow that turns supplier product data into accurate attributes and on-brand listings for your store.",
      "url": "https://renx.openmercury.com/purchasing-guides/product-catalog-enrichment/",
      "category": {
        "id": "ecommerce-internet",
        "name": "E-commerce & Internet",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ecommerce-internet/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Prepare a review file",
            "description": "Read approved supplier records, map required attributes and draft brand-aligned listings. Export a review file without changing your store.",
            "setup": {
              "min": 720,
              "max": 2280
            }
          },
          {
            "key": "connected",
            "name": "Connect my product catalog",
            "description": "Adds a connector for the agreed catalog fields, change previews, approval checks and retry-safe synchronisation. Recheck the source version before each approved update.",
            "setup": {
              "min": 1224,
              "max": 3720
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0716,
          "max": 0.1716,
          "unit": "product",
          "composition": [
            {
              "key": "sourceRecordsPerUnit",
              "count": 3,
              "noun": "supplier source records"
            },
            {
              "key": "attributesPerUnit",
              "count": 30,
              "noun": "target attributes"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 300
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Source-backed attributes and copy, ready for review.",
        "metrics": [
          {
            "name": "Correct product facts",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Check each factual claim against the same product and variant. A plausible claim without evidence counts as incorrect."
          },
          {
            "name": "Available attributes filled",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly filled required attributes divided by all required attributes that have an answer in the approved sources. Leaving a known value blank counts as a miss."
          },
          {
            "name": "Brand and format rules passed",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Check the whole listing against agreed length, tone, forbidden phrases and field rules. An empty listing fails."
          },
          {
            "name": "Valid source links",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Each populated factual field needs its source ID and location. Generated copy must remain traceable to those fields."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "product"
        },
        "controls": "Your merchandiser reviews every output during the pilot. Search ranking and sales are not acceptance guarantees. Missing facts must not be guessed."
      }
    },
    {
      "id": "product-photo-preparation",
      "title": "Product Photo Preparation",
      "description": "A purchasing guide to buying a workflow that cleans product photos, applies your image style and prepares the sizes you need.",
      "url": "https://renx.openmercury.com/purchasing-guides/product-photo-preparation/",
      "category": {
        "id": "ecommerce-internet",
        "name": "E-commerce & Internet",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ecommerce-internet/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Prepare uploaded photos",
            "description": "Apply an approved background and shadow preset, preserve the product and create the agreed output sizes from the same edited master.",
            "setup": {
              "min": 1008,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Read photos from my catalog",
            "description": "Add a read-only source connection, product identity checks and duplicate-safe imports. Stage edited files for approval; publishing is not included.",
            "setup": {
              "min": 1584,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.12,
          "max": 0.16,
          "unit": "photo",
          "composition": [
            {
              "key": "sourceImagesPerUnit",
              "count": 1,
              "noun": "source image"
            },
            {
              "key": "exportsPerUnit",
              "count": 3,
              "noun": "output sizes"
            },
            {
              "key": "megapixelsPerUnit",
              "count": 5,
              "noun": "megapixels maximum input"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test normal catalog photos and review difficult cutouts.",
        "metrics": [
          {
            "name": "Product details preserved",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Count every submitted source photo. Compare product shape, color, text and visible features against the source under a buyer-approved checklist; missing outputs fail."
          },
          {
            "name": "Usable cutouts",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Use annotated reference masks and buyer-agreed edge tolerances. Report each product type separately; missing outputs and incorrect transparent regions fail."
          },
          {
            "name": "Correct export files",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Validate every required file for format, dimensions, padding and naming against the agreed store rules; absent exports fail."
          },
          {
            "name": "Correct product links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every output retains the right product ID, source hash and editing preset. A wrong product association blocks release."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "photo"
        },
        "controls": "Keep the original beside every edit. No automatic store publishing; reject invented features or missing product parts, even when aggregate targets pass."
      }
    },
    {
      "id": "product-quality-issue-detection",
      "title": "Product Quality Issue Detection",
      "description": "A purchasing guide to buying a workflow that finds recurring product problems in service and warranty records, with evidence for your quality team.",
      "url": "https://renx.openmercury.com/purchasing-guides/product-quality-issue-detection/",
      "category": {
        "id": "manufacturing-robotics",
        "name": "Manufacturing & Robotics",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/manufacturing-robotics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Check uploaded service and warranty records",
            "description": "Validate records, group related symptoms, show changes over time and link each proposed issue to its evidence. Keep unmatched and urgent reports visible.",
            "setup": {
              "min": 1584,
              "max": 4320
            }
          },
          {
            "key": "connected",
            "name": "Read new cases from my service system",
            "description": "Adds a service-case connection, complete incremental imports and repeat-run tracking. Warranty data and installed-base counts remain agreed uploads.",
            "setup": {
              "min": 2160,
              "max": 6000
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.3248,
          "max": 0.7248,
          "unit": "record batch",
          "composition": [
            {
              "key": "recordsPerUnit",
              "count": 100,
              "noun": "new service or warranty records"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Find recurring issues with traceable evidence and a manageable review queue.",
        "metrics": [
          {
            "name": "Important issue groups found",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Matched actionable groups divided by all engineer-labelled actionable groups in the time-held-out set. Novel and rare groups are scored separately; missed and deferred groups remain in the denominator."
          },
          {
            "name": "Alerts worth investigating",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Distinct surfaced alerts judged actionable divided by all surfaced alerts. Engineers agree actionability before testing; duplicate or misleading alerts fail. Report the queue size as well."
          },
          {
            "name": "Complete source evidence",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every surfaced group has valid original record IDs, incident dates, product versions and reproducible deduplicated counts. Rates require the matching exposure denominator and time window."
          },
          {
            "name": "Urgent records routed",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every record matching agreed urgent rules reaches human review, including single incidents. A failed import raises an operational alert; unread records have not been checked. This measures routing against those rules, not detection of every possible safety hazard."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 2,
          "unit": "record batch"
        },
        "controls": "Count distinct incidents, not duplicate reports. Missing installed-base or operating-hour data means no failure-rate claim. Suspected causes stay hypotheses. Urgent reports cannot be suppressed by the model."
      }
    },
    {
      "id": "product-video-ad-variants",
      "title": "Product Video Ad Variants",
      "description": "Turns your product photos and clips into video ad variants with different hooks, ready for your marketing team to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/product-video-ad-variants/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for reusable templates and existing product media, not a generated-video platform or a paid-media service.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload my product assets",
            "description": "Add product photos, clips, the brand kit and approved selling points. Review and export the template-based ad versions yourself.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Read my asset library",
            "description": "Read one authorised asset source or prepared export. Changes reopen affected versions for review; nothing is published or written back.",
            "setup": {
              "min": 1584,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.488128,
          "max": 0.888128,
          "unit": "ad batch",
          "composition": [
            {
              "key": "videosPerUnit",
              "count": 3,
              "noun": "ad variants"
            },
            {
              "key": "secondsPerUnit",
              "count": 15,
              "noun": "seconds per ad"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Use approved templates, different hooks and checked product claims.",
        "metrics": [
          {
            "name": "Ready without re-editing",
            "target": 80,
            "unit": "%",
            "direction": "gte",
            "definition": "Passing variants divided by all requested variants on a held-out test. Your team freezes a checklist for copy, pacing, clarity and product identity before tuning. Missing, failed and deferred exports fail; no cherry-picking favourites."
          },
          {
            "name": "Supported product claims",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every claim must match an approved current product fact or offer. Unsupported benefits, discounts, testimonials or demonstrations fail. A held claim is visible, not silently replaced by invented copy."
          },
          {
            "name": "Brand and layout checks",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All agreed brand and placement checks pass, including exact approved colours, fonts, product imagery, readable captions and your frozen safe-area rules. No unlicensed media or altered product identity."
          },
          {
            "name": "Playable exports",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All requested files pass format, dimensions, frame rate, duration and playback checks. No partial or corrupt file counts as an export. Platform acceptance still requires your own review."
          },
          {
            "name": "Controlled differences",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every version changes only the agreed opening hook. Keep the body, offer, ending and output settings fixed, with a version manifest. Material changes invalidate prior approvals."
          },
          {
            "name": "Publishing controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All challenge cases stop ad-account uploads, publishing and spending. Unapproved or changed assets remain in review. Restrict each brand's media and credentials to its own workspace."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "ad batch"
        },
        "controls": "Agreed test-set targets, not promised clicks, conversions, platform approval or advertising return. Your marketer reviews every ad."
      }
    },
    {
      "id": "production-alert-investigation",
      "title": "Production Alert Investigation",
      "description": "A purchasing guide to buying a workflow that investigates each production alert across your metrics, logs, deploys and code, and gives the on-call engineer evidence-linked likely causes.",
      "url": "https://renx.openmercury.com/purchasing-guides/production-alert-investigation/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "notes",
        "scopes": [
          {
            "key": "notes",
            "name": "Investigate and report",
            "description": "Receive alerts from your paging tool, run read-only queries against your metrics, logs, deploy history and code, and post likely causes ranked with linked evidence and the queries used.",
            "setup": {
              "min": 1224,
              "max": 3360
            }
          },
          {
            "key": "actions",
            "name": "Add approved runbook steps",
            "description": "Adds a short list of runbook steps such as restarting a service or rolling back the latest deploy. Each step is proposed with its evidence, shown as a dry run and runs only after the on-call engineer confirms in the channel.",
            "setup": {
              "min": 1944,
              "max": 5400
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.56,
          "max": 0.96,
          "unit": "alert",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 150
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "A useful first investigation, with uncertain findings marked for the engineer.",
        "metrics": [
          {
            "name": "Confirmed cause found",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Replayed incidents where the cause your team confirmed afterwards is among the top likely causes, divided by all replayed incidents."
          },
          {
            "name": "Findings with evidence",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Statements in the note that link to a query result, log line, deploy or code change which supports them, divided by all statements."
          },
          {
            "name": "Alerts investigated on time",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Alerts with a complete note posted within the speed target, divided by all alerts received during the test."
          },
          {
            "name": "Changes with approval",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every production change must have a recorded confirmation from the on-call engineer before it runs. Any exception fails the release."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 3,
          "unit": "alert"
        },
        "controls": "A likely cause is a lead for the engineer, not a diagnosis. Each finding must point to the query or record that supports it, and missing data is reported as missing."
      }
    },
    {
      "id": "property-maintenance-intake",
      "title": "Property Maintenance Intake",
      "description": "A purchasing guide to buying a workflow that turns residents' repair requests into clear work orders for your property team to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/property-maintenance-intake/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Engineering estimates, not provider quotes. Staff review, repairs, system subscriptions, connector usage and maintenance are separate.",
        "recommendedScope": "draft",
        "scopes": [
          {
            "key": "draft",
            "name": "Prepare work orders",
            "description": "Submit resident text and trusted property details. Receive a work-order draft, suggested trade and urgency, evidence excerpts and questions for missing information. Staff reviews every request.",
            "setup": {
              "min": 1296,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Create approved work orders",
            "description": "Adds an authorised API connector, property and unit matching, approval records, duplicate prevention and write receipts. Staff approves each work order; no contractor dispatch or spending is authorised.",
            "setup": {
              "min": 1872,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Reliable intake",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0334,
          "max": 0.0534,
          "unit": "request",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Reliable intake",
        "description": "Capture the issue, flag urgency and identify missing details.",
        "metrics": [
          {
            "name": "Work-order details captured correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Requests preserving every supplied essential fact divided by all labelled requests. Wrong unit, invented facts, omissions and missing output fail; unknown fields stay unknown."
          },
          {
            "name": "Correct trade classification",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct trade or approved review route divided by all labelled requests. Sending an otherwise classifiable request to review counts as a miss; report results by trade."
          },
          {
            "name": "Urgent cases escalated",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly escalated requests divided by all labelled urgent requests. Report false alarms separately. Existing urgent channels remain active; the target is not a guarantee of detecting every emergency."
          },
          {
            "name": "Missing details identified",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Incomplete requests with all required missing fields identified divided by all labelled incomplete requests. Invented answers and irrelevant or missing questions fail."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 5,
          "unit": "request",
          "definition": "From accepted request to a complete draft or recorded escalation, including rule lookup, queueing and retries. Staff approval, system writes and repair time are separate."
        },
        "controls": "Staff remains responsible for urgency and next actions. Never treat the model as the sole emergency-reporting channel."
      }
    },
    {
      "id": "pull-request-review",
      "title": "Pull Request Review",
      "description": "A purchasing guide to buying a workflow that reads each pull request with the surrounding code, checks it against your team's review rules and leaves specific comments before your reviewers look.",
      "url": "https://renx.openmercury.com/purchasing-guides/pull-request-review/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "comments",
        "scopes": [
          {
            "key": "comments",
            "name": "Review and comment",
            "description": "Read the change and related code, check it against your review rules and post inline comments with severity and the rule used, plus a short summary.",
            "setup": {
              "min": 1080,
              "max": 3120
            }
          },
          {
            "key": "checks",
            "name": "Add merge checks and tickets",
            "description": "Adds a required check that fails on the serious rules you choose, with an override a maintainer can record, per-repository rule settings and issue tracker links for findings that are deferred.",
            "setup": {
              "min": 1728,
              "max": 5160
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.182,
          "max": 0.282,
          "unit": "pull request",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Useful comments on rule breaks and likely bugs, with uncertain points asked as questions.",
        "metrics": [
          {
            "name": "Comments accepted",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Comments that reviewers mark as valid and worth acting on, divided by all comments posted on the test pull requests."
          },
          {
            "name": "Known problems found",
            "target": 60,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled problems from past pull requests that receive a correct comment, divided by all labelled problems. Problems found only by a vague comment do not count."
          },
          {
            "name": "Rule breaks flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled breaks of your written rules that are flagged with the right rule, divided by all labelled rule breaks."
          },
          {
            "name": "Comments with location and reason",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every comment must give the file, line and the rule or reason behind it."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 4,
          "unit": "pull request"
        },
        "controls": "Review comments are suggestions for a person to weigh, not a pass or fail on the code. Your reviewers still read the change and decide whether to merge."
      }
    },
    {
      "id": "purchase-order-confirmations",
      "title": "Purchase Order Confirmations",
      "description": "A purchasing guide to buying a workflow that compares supplier order confirmations with your purchase orders, flags changed quantities, prices and dates, and drafts follow-ups for your buyers to approve.",
      "url": "https://renx.openmercury.com/purchasing-guides/purchase-order-confirmations/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Check confirmations from files",
            "description": "Read open order exports and supplier replies, match each confirmed line to the order, flag changed quantities, prices and dates, and draft a follow-up for unconfirmed or changed orders.",
            "setup": {
              "min": 1008,
              "max": 3000
            }
          },
          {
            "key": "connected",
            "name": "Connect my purchasing system and mailbox",
            "description": "Adds reading open orders from your purchasing system and supplier replies from an approved mailbox, sending approved follow-ups and recording approved confirmed dates, with duplicate protection on retries.",
            "setup": {
              "min": 1872,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0884,
          "max": 0.1884,
          "unit": "purchase order",
          "composition": [
            {
              "key": "linesPerUnit",
              "count": 20,
              "noun": "order lines"
            },
            {
              "key": "messagesPerUnit",
              "count": 10,
              "noun": "supplier messages or confirmation documents"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate line checks with unclear replies held for your buyer.",
        "metrics": [
          {
            "name": "Confirmed lines read correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Order lines where the confirmed quantity, unit price and date were read and matched correctly, divided by all confirmed lines in the test set."
          },
          {
            "name": "Differences found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled quantity, price, date, item and unconfirmed-line differences that were flagged, divided by all labelled differences; flags count only when the line is right."
          },
          {
            "name": "Supported follow-ups",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Draft follow-ups where every order number, item, quantity, price and date matches the order and the latest reply, divided by all drafts."
          },
          {
            "name": "Complete source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every result must point to the order line and the supplier message or document page it came from."
          }
        ],
        "speed": {
          "p95Seconds": 90,
          "concurrentJobs": 4,
          "unit": "purchase order"
        },
        "controls": "Use exact arithmetic for quantities and prices and agreed tolerances for dates. A supplier message that says confirmed is not a confirmation of every line unless each line matches."
      }
    },
    {
      "id": "purchase-request-vendor-onboarding",
      "title": "Purchase Request Triage & Vendor Onboarding",
      "description": "Route purchase requests to the right approver and check that a new vendor has supplied the required documents.",
      "url": "https://renx.openmercury.com/purchasing-guides/purchase-request-vendor-onboarding/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Use a fixed approval matrix and a versioned vendor checklist. Read text exports rather than opening untrusted attachments automatically. Document presence is not proof of authenticity.",
            "setup": {
              "min": 1152,
              "max": 3240
            }
          },
          {
            "key": "connected",
            "name": "Create procurement review tasks",
            "description": "Read approved intake events and create review tasks through a documented procurement API. Never activate a supplier or change payment details.",
            "setup": {
              "min": 1440,
              "max": 4200
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.123,
          "max": 0.183,
          "unit": "request",
          "composition": [
            {
              "key": "documentsPerUnit",
              "count": 10,
              "noun": "text document extracts"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Correct approval route",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Requests assigned to the correct rule-defined approver divided by all test requests, including missing-budget cases."
          },
          {
            "name": "Missing documents identified",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Required missing or expired documents identified divided by all labeled missing or expired documents."
          },
          {
            "name": "Correct request details",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct required values divided by all required request fields; omitted and invented values fail."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 1,
          "unit": "request"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "rd-tax-evidence-preparation",
      "title": "R&D Tax Evidence Preparation",
      "description": "Turn engineering records into source-linked project narratives and time-allocation drafts for your tax adviser.",
      "url": "https://renx.openmercury.com/purchasing-guides/rd-tax-evidence-preparation/",
      "category": {
        "id": "accounting-finance",
        "name": "Finance & Accounting",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/accounting-finance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Use ticket exports, commit metadata and agreed project mappings. Time allocations are drafts, not proof of hours worked. Missing evidence stays visible rather than being invented.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Read-only engineering sync",
            "description": "Sync metadata from an approved engineering system into the same review queue. Payroll remains a buyer-provided export.",
            "setup": {
              "min": 1440,
              "max": 4320
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.3972,
          "max": 0.6972,
          "unit": "project pack",
          "composition": [
            {
              "key": "recordsPerUnit",
              "count": 100,
              "noun": "engineering records"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Source-linked statements",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported factual statements divided by all factual statements in delivered narratives; missing or incorrect citations fail."
          },
          {
            "name": "Relevant records included",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Relevant records represented divided by all relevant records in an independently labeled project pack."
          },
          {
            "name": "Correct allocation calculations",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct contributor-period totals divided by all required totals; overlapping assignments must not double-count time."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 1,
          "unit": "project pack"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "receivables-follow-up",
      "title": "Accounts Receivable Follow-up",
      "description": "A purchasing guide to buying a workflow that checks overdue invoices, explains what is holding up payment and prepares follow-ups for your approval.",
      "url": "https://renx.openmercury.com/purchasing-guides/receivables-follow-up/",
      "category": {
        "id": "accounting-finance",
        "name": "Finance & Accounting",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/accounting-finance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Prepare follow-up drafts",
            "description": "Read an authorised customer snapshot, identify missing information or promises, and prepare an evidence-linked follow-up without sending it.",
            "setup": {
              "min": 720,
              "max": 2280
            }
          },
          {
            "key": "connected",
            "name": "Connect my ledger and mailbox",
            "description": "Adds read-only invoice synchronisation, email-thread retrieval and approval-gated sending with a fresh payment-status check and duplicate-send protection.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0332,
          "max": 0.0732,
          "unit": "case",
          "composition": [
            {
              "key": "invoicesPerUnit",
              "count": 10,
              "noun": "open invoices"
            },
            {
              "key": "messagesPerUnit",
              "count": 10,
              "noun": "recent messages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Evidence-backed drafts and required holds.",
        "metrics": [
          {
            "name": "Correct invoice facts",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Customer, invoice, currency, outstanding amount and due date must all match the same current source record."
          },
          {
            "name": "Correct next actions",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Actions are checked against labelled cases, including dispute holds, contact changes and promised payment dates."
          },
          {
            "name": "Supported draft claims",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Each payment or commitment claim needs a linked invoice record or message; invented or stale claims fail."
          },
          {
            "name": "Required holds caught",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Detected dispute, paid-invoice, identity and permission holds divided by all labelled hold cases."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 2,
          "unit": "case"
        },
        "controls": "Your credit controller reviews every case during the pilot. No guaranteed collection or payment date. Approvals must be enforced in code, not left to a prompt."
      }
    },
    {
      "id": "recipe-costs-from-invoices",
      "title": "Recipe Costs from Supplier Invoices",
      "description": "A guide to buying an AI workflow that updates ingredient and dish costs from supplier invoices, with price changes for your team to approve.",
      "url": "https://renx.openmercury.com/purchasing-guides/recipe-costs-from-invoices/",
      "category": {
        "id": "food-agriculture",
        "name": "Food & Agriculture",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/food-agriculture/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "costing",
        "scopes": [
          {
            "key": "costing",
            "name": "Upload invoices",
            "description": "Read each invoice, match lines to your ingredients with pack and unit conversion, recalculate recipe and menu item costs, and list price changes, unmatched lines and items above your target food cost.",
            "setup": {
              "min": 936,
              "max": 3000
            }
          },
          {
            "key": "connected",
            "name": "Connect my restaurant systems",
            "description": "Adds an approved invoice inbox, menu prices and item sales from your point of sale and saving approved ingredient prices to your recipe or inventory system.",
            "setup": {
              "min": 1584,
              "max": 4920
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved OCR and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.1054,
          "max": 0.1854,
          "unit": "invoice",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved OCR and model APIs",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate costs with unmatched and uncertain lines held for your team.",
        "metrics": [
          {
            "name": "Invoice lines read correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Each invoice line passes only when item, pack size, quantity, unit price and extension match the labelled values, including credits; a guessed value is an error."
          },
          {
            "name": "Lines matched with the right unit",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Lines matched to the right ingredient with a correct conversion to your recipe unit, divided by all labelled lines; an unmatched line shown for review is not an error, a wrong match is."
          },
          {
            "name": "Price changes flagged",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Ingredient price changes above your agreed threshold that are flagged, divided by all such labelled changes in the test invoices."
          },
          {
            "name": "Recipe costs matching a hand check",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Recipe and menu item costs that match a hand recalculation within your agreed tolerance, divided by all recipes in the checked sample."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 4,
          "unit": "invoice"
        },
        "controls": "Recipes, portions, unit rules and target food cost come from your chef or owner, not from the model. A line that cannot be matched with confidence is shown for review, not applied."
      }
    },
    {
      "id": "referral-intake",
      "title": "Referral Intake & Missing Documents",
      "description": "A purchasing guide to buying a workflow that reads referral packets, checks for missing documents and prepares an intake record for your clinic to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/referral-intake/",
      "category": {
        "id": "healthcare-life-sciences",
        "name": "Healthcare & Life Sciences",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/healthcare-life-sciences/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates assume an existing approved environment. Staff review, compliance programmes, vendor minimums, source-system charges and maintenance are separate.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Check uploaded packets",
            "description": "Submit an authorised referral packet. Receive extracted intake fields, source-page evidence and a missing-document checklist. Staff confirms the patient and every next action.",
            "setup": {
              "min": 1584,
              "max": 4560
            }
          },
          {
            "key": "connected",
            "name": "Watch our intake folder",
            "description": "Adds a read-only connector to an existing approved document source, packet grouping rules, duplicate checks, a durable queue and visible failures. Staff reviews the same intake drafts; this is not an EHR integration.",
            "setup": {
              "min": 2448,
              "max": 6960
            }
          }
        ],
        "baseline": {
          "standard": "Core intake checks",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.051,
          "max": 0.111,
          "unit": "packet",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000,
            "pages": 10
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Core intake checks",
        "description": "Extract the essentials and identify missing requirements.",
        "metrics": [
          {
            "name": "Intake fields correct",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct values or correct missing-value labels divided by every required field across all test packets. Wrong values, omissions and blank output fail; report present and missing fields separately."
          },
          {
            "name": "Missing requirements found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged missing or unusable requirements divided by all staff-labelled missing or unusable checklist items. Unreadable pages and missing output stay in the denominator."
          },
          {
            "name": "Missing-item flags correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Confirmed missing or unusable items divided by all items flagged. Flagging everything fails precision; returning no findings fails recall on incomplete packets."
          },
          {
            "name": "Source references correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Extracted claims with a supporting page and correct packet identity divided by all extracted claims. Pair with field coverage so empty output cannot pass."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "maxPages": 10,
          "concurrentJobs": 3,
          "unit": "packet",
          "definition": "From accepted complete packet to persisted intake draft, including OCR, checklist lookup, queueing and retries. Source polling delay, staff review, chasing documents and clinical care are separate."
        },
        "controls": "Staff reviews every referral. Correct document extraction does not establish clinical suitability, coverage or readiness for treatment."
      }
    },
    {
      "id": "rent-roll-operating-statement",
      "title": "Rent Roll & T-12 Underwriting Prep",
      "description": "A purchasing guide to buying a workflow that turns a seller's rent roll and trailing operating statement into clean, checked inputs for your underwriting model, with differences listed for your analyst.",
      "url": "https://renx.openmercury.com/purchasing-guides/rent-roll-operating-statement/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Prepare uploaded deal packages",
            "description": "Read rent rolls and operating statements in spreadsheet or PDF form, normalise units and lines to your format, check totals against the source and list differences.",
            "setup": {
              "min": 1152,
              "max": 3600
            }
          },
          {
            "key": "model",
            "name": "Fill my underwriting model",
            "description": "Adds intake from an approved deal folder, mapping to the input tab of your model template, version history and a check that each run writes a new copy.",
            "setup": {
              "min": 1728,
              "max": 5400
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.932,
          "max": 1.932,
          "unit": "deal package",
          "composition": [
            {
              "key": "rentRollUnitsPerUnit",
              "count": 500,
              "noun": "rent roll units"
            },
            {
              "key": "statementMonthsPerUnit",
              "count": 12,
              "noun": "months of operating statement"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 40
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Reliable unit and account values, with unmapped lines held for review.",
        "metrics": [
          {
            "name": "Rent roll fields correct",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Unit, type, area, rents, lease dates and status must match the source row. A missing or merged unit counts as wrong."
          },
          {
            "name": "Statement lines mapped correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly mapped lines divided by all lines labelled by your analyst; lines with no agreed account must be held, not guessed."
          },
          {
            "name": "Totals that tie to the source",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Unit counts, rent totals and statement totals must equal the source document, or the package is not released."
          },
          {
            "name": "Differences flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged differences, such as occupancy that disagrees with income, divided by all labelled differences."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "deal package"
        },
        "controls": "Use exact decimal arithmetic for money. A prepared input is not a valuation; your analyst checks the differences and sets the assumptions."
      }
    },
    {
      "id": "rental-application-document-checks",
      "title": "Rental Application Document Checks",
      "description": "A guide to buying an AI workflow that checks rental applicants' income documents and flags inconsistencies for your leasing team.",
      "url": "https://renx.openmercury.com/purchasing-guides/rental-application-document-checks/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "documents",
        "scopes": [
          {
            "key": "documents",
            "name": "Check uploaded documents",
            "description": "Read pay stubs, bank statements, offer letters and benefit letters, check names, employers, dates and totals across them, check each file for signs of editing, work out income by your rules and list missing documents.",
            "setup": {
              "min": 1008,
              "max": 3000
            }
          },
          {
            "key": "connected",
            "name": "Connect my leasing software",
            "description": "Adds a read-only connection that picks up new applications and their documents, checks them and saves the approved summary to the application as a note or attachment.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.1412,
          "max": 0.2412,
          "unit": "application",
          "composition": [
            {
              "key": "documentsPerUnit",
              "count": 8,
              "noun": "applicant documents"
            },
            {
              "key": "pagesPerUnit",
              "count": 20,
              "noun": "pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Income worked out from the right figures, edited documents flagged and genuine documents left alone.",
        "metrics": [
          {
            "name": "Income worked out correctly",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Applications where the monthly income matches your team's own working under your written rules, within the tolerance you agree, divided by all test applications."
          },
          {
            "name": "Edited documents flagged",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Known edited or made-up documents in the test set that are flagged for a person, divided by all known edited documents."
          },
          {
            "name": "Genuine documents left unflagged",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Genuine documents that are not flagged, divided by all genuine documents in the test set. Unusual but genuine layouts are included on purpose."
          },
          {
            "name": "Figures with document and page",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every income figure and every flag must give the document, page and reason behind it."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 4,
          "unit": "application"
        },
        "controls": "A flag is a reason for your team to look again, not a decision about the applicant. Your leasing team applies your screening policy and makes every decision."
      }
    },
    {
      "id": "rental-leasing-enquiries",
      "title": "Rental Leasing Enquiries",
      "description": "A purchasing guide to buying a workflow that drafts replies to prospective renters from your approved listing facts, suggests tour times and hands sensitive enquiries to your leasing team.",
      "url": "https://renx.openmercury.com/purchasing-guides/rental-leasing-enquiries/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Draft replies for my leasing team",
            "description": "Read each enquiry, draft a reply from approved facts, suggest open tour times, record the renter's stated needs and hand sensitive or unanswerable enquiries to staff.",
            "setup": {
              "min": 936,
              "max": 3240
            }
          },
          {
            "key": "connected",
            "name": "Reply and book tours from my leasing system",
            "description": "Adds reading leads and availability from your leasing system, sending reply types you approve, booking tours into open slots, duplicate protection and a log of every message.",
            "setup": {
              "min": 1728,
              "max": 5640
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0246,
          "max": 0.0546,
          "unit": "enquiry",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Grounded replies, with sensitive and unanswerable enquiries sent to staff.",
        "metrics": [
          {
            "name": "Replies with only approved facts",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "A reply passes only when every price, date, fee and policy it states matches the approved facts in force at the time."
          },
          {
            "name": "Answerable questions answered",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Questions answered correctly divided by all labelled questions your approved facts cover; vague or missing answers count against it."
          },
          {
            "name": "Sensitive enquiries handed to staff",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly handed over enquiries divided by all labelled sensitive, accommodation, complaint or out-of-policy enquiries."
          },
          {
            "name": "Tour times in open slots",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Suggested or booked times must fall within open approved tour slots for the right property; double bookings fail."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 5,
          "unit": "enquiry"
        },
        "controls": "Fair housing rules apply to every reply. Have your compliance owner approve the wording, the handover rules and the facts the workflow may use."
      }
    },
    {
      "id": "restaurant-phone-orders",
      "title": "Restaurant Phone Orders & Reservations",
      "description": "A purchasing guide to an AI phone workflow for restaurants, deployed in your environment. It answers calls, takes takeout orders and table requests from your current menu and booking rules, and passes the rest to your staff.",
      "url": "https://renx.openmercury.com/purchasing-guides/restaurant-phone-orders/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and example calls.",
        "recommendedScope": "requests",
        "scopes": [
          {
            "key": "requests",
            "name": "Take orders and table requests for my staff",
            "description": "Answers calls with your approved greeting, answers hours and menu questions from approved information, takes takeout orders with items and modifiers from the current menu, takes table requests within your rules, reads everything back and stores it with the recording for staff to accept.",
            "setup": {
              "min": 1224,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Send orders and bookings to my systems",
            "description": "Adds menu and availability sync, sending confirmed takeout orders to your point of sale as unpaid orders, booking tables your reservation system shows as open, duplicate-safe retries and a fallback to a staff request when a system is unavailable.",
            "setup": {
              "min": 2088,
              "max": 5880
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved speech and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.15848,
          "max": 0.19848,
          "unit": "call",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved speech and model APIs",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct orders and table requests with allergy, group and unclear calls passed to staff.",
        "metrics": [
          {
            "name": "Correct orders",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "An order passes only when every item, modifier, quantity and pickup or delivery detail matches the labelled call; extra, missing or off-menu items fail."
          },
          {
            "name": "Correct table requests",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "A request passes only when date, time, party size, name and phone number match the labelled call and the booking rules."
          },
          {
            "name": "Correct handovers",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Allergy questions, groups above the phone limit, complaints, refunds and requests for staff that reached staff, divided by all such labelled calls."
          },
          {
            "name": "Calls with a stored record",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every answered call, including dropped and spam calls, must leave a stored outcome with transcript and recording link."
          }
        ],
        "speed": {
          "p95Seconds": 30,
          "concurrentJobs": 4,
          "unit": "call"
        },
        "controls": "The assistant says it is automated, follows recording consent rules and never answers allergy or food safety questions itself. Menu items, prices and modifiers come from the current approved menu, not from the model."
      }
    },
    {
      "id": "revenue-recognition-schedules",
      "title": "Revenue Recognition Schedules",
      "description": "A purchasing guide to buying a workflow that turns your contracts and billing records into revenue schedules for your accountant to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/revenue-recognition-schedules/",
      "category": {
        "id": "accounting-finance",
        "name": "Finance & Accounting",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/accounting-finance/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Prepare schedules from files",
            "description": "Extract dates and amounts, apply approved recognition rules and show the source behind each schedule and exception.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Import from my billing system",
            "description": "Adds a read-only billing connection, linked credit notes, versioned imports and repeat-run checks. Accounting approval stays with your team.",
            "setup": {
              "min": 1728,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.124,
          "max": 0.324,
          "unit": "contract",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 20,
              "noun": "text pages"
            },
            {
              "key": "billingLinesPerUnit",
              "count": 10,
              "noun": "billing lines"
            },
            {
              "key": "monthsPerUnit",
              "count": 24,
              "noun": "schedule months"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Check the main contract terms and hold uncertain treatments for review.",
        "metrics": [
          {
            "name": "Correct contract fields",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct required fields divided by all accountant-labelled required fields. Missing or invented values fail; report dates, currency and amounts separately."
          },
          {
            "name": "Exceptions caught",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged missing policies, contradictory dates, credits and unsupported allocations divided by all labelled exceptions."
          },
          {
            "name": "Correct schedule calculations",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every issued schedule must reproduce approved service dates, rounding and recognition rules, with totals equal to the approved allocable amount."
          },
          {
            "name": "Complete source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every issued row links to immutable contract or amendment excerpts, billing IDs and the approved policy version."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "contract"
        },
        "controls": "Use exact decimal arithmetic and the approved date convention. Unsupported allocations or policies must be held for review, not guessed."
      }
    },
    {
      "id": "rfp-questionnaire-response",
      "title": "RFP & Questionnaire Response",
      "description": "A guide to buying an AI workflow that drafts RFP and security questionnaire answers from your company documents, with sources attached and unanswered questions flagged for your team.",
      "url": "https://renx.openmercury.com/purchasing-guides/rfp-questionnaire-response/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost only, after your sources are indexed; expert review, source upkeep and maintenance are separate. Confirmed in your pilot.",
        "recommendedScope": "draft",
        "scopes": [
          {
            "key": "draft",
            "name": "Upload approved documents",
            "description": "Uses approved uploaded sources and returns a workbook of cited drafts for review. No connection to your systems.",
            "setup": {
              "min": 864,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Connect my document library",
            "description": "Adds an agreed document library sync with access checks and expiry, and a connection to your existing review queue.",
            "setup": {
              "min": 1440,
              "max": 4800
            }
          }
        ],
        "baseline": {
          "standard": "Source-checked drafts",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 6.6,
          "max": 16.2,
          "unit": "questionnaire",
          "composition": [
            {
              "key": "questionsPerUnit",
              "count": 100,
              "noun": "questions"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 20
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Source-checked drafts",
        "description": "Cited answers with missing or conflicting information flagged.",
        "metrics": [
          {
            "name": "Facts supported by sources",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of verifiable factual claims in the drafts that a valid, authorised source supports."
          },
          {
            "name": "Citations that hold up",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of factual claims with a correct location, version and supporting evidence. Claims without a citation count against it."
          },
          {
            "name": "Answerable questions fully covered",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of answerable questions whose draft covers every required sub-question without a material error, as marked by your experts."
          },
          {
            "name": "Accepted with light edits",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Share of all questions the expert accepts with light edits and no new facts. Unknown and conflicting questions stay in the denominator."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 1,
          "unit": "questionnaire",
          "definition": "Timed after the knowledge base is indexed, at your expected load. Human waiting time reported separately."
        },
        "controls": "In every case: no unsupported fact presented as confirmed on the agreed challenge cases; missing, conflicting, expired or unauthorised sources always go to the responsible person; human time reported separately."
      }
    },
    {
      "id": "sales-account-research",
      "title": "Sales Account Research & Briefs",
      "description": "A purchasing guide to buying a workflow that researches target companies, checks them against your ideal customer profile and prepares source-backed sales briefs.",
      "url": "https://renx.openmercury.com/purchasing-guides/sales-account-research/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Research supplied company pages",
            "description": "Read supplied company text, answer your checklist and explain the account's fit with source references. Mark missing facts explicitly.",
            "setup": {
              "min": 864,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Refresh website and CRM research",
            "description": "Read target accounts from your CRM, fetch approved public source pages and refresh briefs with capture dates. Export notes for review before any CRM write.",
            "setup": {
              "min": 1368,
              "max": 4080
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0624,
          "max": 0.1224,
          "unit": "account brief",
          "composition": [
            {
              "key": "accountsPerUnit",
              "count": 1,
              "noun": "target company"
            },
            {
              "key": "pagesPerUnit",
              "count": 6,
              "noun": "source pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Source-backed facts, visible gaps and your own customer-fit rules.",
        "metrics": [
          {
            "name": "Facts supported by sources",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Count supported factual claims divided by all published factual claims. Check the correct company, date and quoted evidence; an unrelated citation is not support. Review per field, not only an overall average."
          },
          {
            "name": "Available research answers found",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Count correctly answered checklist questions divided by questions independently labelled answerable from the agreed source pack. Empty briefs cannot pass by making no claims."
          },
          {
            "name": "Customer-fit decisions agreed",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare each rule's fit, not-fit or unknown decision with independent sales-team labels. Report each class separately so the majority class cannot hide errors; do not use conversion as ground truth."
          },
          {
            "name": "Missing information kept unknown",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Count unanswerable questions correctly left unknown divided by all independently labelled unanswerable questions. Missing, old or conflicting evidence must not be rewritten as a confident current fact."
          }
        ],
        "speed": {
          "p95Seconds": 90,
          "concurrentJobs": 2,
          "unit": "account brief"
        },
        "controls": "Your sales team decides how to use the brief. A customer-fit label is not verified buying intent, creditworthiness or a prediction that an account will convert."
      }
    },
    {
      "id": "sanctions-adverse-media-alert-review",
      "title": "Sanctions & Adverse Media Alert Review",
      "description": "A purchasing guide to buying a workflow that compares screening hits with your customer records and prepares source-linked notes for analyst review.",
      "url": "https://renx.openmercury.com/purchasing-guides/sanctions-adverse-media-alert-review/",
      "category": {
        "id": "trading-risk",
        "name": "Trading & Risk Management",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/trading-risk/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review uploaded alert records",
            "description": "Compare supplied identity attributes and source evidence against your policy. Prepare review notes that preserve uncertainty and do not make the final decision.",
            "setup": {
              "min": 1296,
              "max": 3600
            }
          },
          {
            "key": "connected",
            "name": "Read my approved screening feed",
            "description": "Add a read-only adapter for the agreed screening API. Preserve hit IDs, source dates and updates; only authorised articles and records are imported.",
            "setup": {
              "min": 1872,
              "max": 5280
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.166,
          "max": 0.246,
          "unit": "alert",
          "composition": [
            {
              "key": "subjectsPerUnit",
              "count": 1,
              "noun": "screened subject"
            },
            {
              "key": "hitsPerUnit",
              "count": 5,
              "noun": "candidate hits"
            },
            {
              "key": "articlesPerUnit",
              "count": 10,
              "noun": "authorised source articles"
            },
            {
              "key": "pagesPerUnit",
              "count": 20,
              "noun": "text pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Evidence-based review notes with unresolved alerts retained.",
        "metrics": [
          {
            "name": "Possible matches retained",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Among all analyst-labelled possible or confirmed matches, count those retained for investigation. Do not use overall accuracy to hide missed matches."
          },
          {
            "name": "Correct mismatch recommendations",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Among suggested mismatches, count those justified by sufficient distinguishing evidence. Report recommendation coverage too; no recommendations means the precision test is unproven, not a pass."
          },
          {
            "name": "Required evidence covered",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Check the analyst-labelled identity and policy checklist. Correctly expose missing information and contradictions; marking available evidence missing is an error."
          },
          {
            "name": "Valid source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Check subject and hit IDs, source locations, publication dates and snapshot versions. Distinguish allegations, findings and later corrections."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "maxPages": 20,
          "concurrentJobs": 2,
          "unit": "alert"
        },
        "controls": "A similar name is not proof of identity. Missing data is not evidence of a mismatch. Allegations and political roles do not establish wrongdoing. Qualified analysts retain all decisions."
      }
    },
    {
      "id": "security-finding-fixes",
      "title": "Security Finding Triage & Fixes",
      "description": "A guide to buying an AI workflow that checks security scanner findings and drafts tested code fixes for your engineers to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/security-finding-fixes/",
      "category": {
        "id": "software-it",
        "name": "Software & IT Operations",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/software-it/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "code",
        "scopes": [
          {
            "key": "code",
            "name": "Check and fix code findings",
            "description": "Import findings from your code scanner, check each against the surrounding code, record whether it is real, not reachable or a false alarm with the reason, and open a fix pull request with a test for real findings.",
            "setup": {
              "min": 1224,
              "max": 3480
            }
          },
          {
            "key": "dependencies",
            "name": "Add package upgrades and tickets",
            "description": "Adds upgrades for vulnerable packages with a check of release notes and your tests for breaking changes, issue tracker tickets for findings that need a person and recorded reasons for set-aside findings, with rules per repository.",
            "setup": {
              "min": 1872,
              "max": 5400
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.22,
          "max": 0.42,
          "unit": "finding",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Verdicts with evidence for each finding and tested fixes for real ones, with unclear cases handed to a security engineer.",
        "metrics": [
          {
            "name": "Verdicts correct",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Findings sorted the same way as your security engineer, as real, not reachable or a false alarm, divided by all findings in the test set. A real planted vulnerability called a false alarm is a critical failure."
          },
          {
            "name": "Real findings fixed",
            "target": 75,
            "unit": "%",
            "direction": "gte",
            "definition": "Real findings that get a fix which clears the scanner rescan and passes your tests, divided by all real findings in the test set."
          },
          {
            "name": "Fixes merged",
            "target": 60,
            "unit": "%",
            "direction": "gte",
            "definition": "Fix pull requests your engineers merge without rework, divided by all fix pull requests opened."
          },
          {
            "name": "Verdicts with evidence",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every verdict must cite the scanner rule, the code path and the reason."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 4,
          "unit": "finding"
        },
        "controls": "Verdicts and fixes are proposals for your engineers and security team; they are not a security sign-off. People still merge fixes and close findings."
      }
    },
    {
      "id": "shipment-check-calls",
      "title": "Shipment Check Calls",
      "description": "A guide to buying an AI workflow that calls drivers for shipment updates and flags delays for your team.",
      "url": "https://renx.openmercury.com/purchasing-guides/shipment-check-calls/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "calls",
        "scopes": [
          {
            "key": "calls",
            "name": "Call and record status",
            "description": "Place check calls at your check points, record location, arrival time, loaded or empty and any problem, retry unanswered calls and raise late, stopped or troubled loads.",
            "setup": {
              "min": 1080,
              "max": 3240
            }
          },
          {
            "key": "connected",
            "name": "Update my system and customers",
            "description": "Adds status updates in your transportation system, skips calls when a tracking feed already shows the load, and emails routine updates to customers under your rules while problems wait for your team.",
            "setup": {
              "min": 1872,
              "max": 5520
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.15368,
          "max": 0.19368,
          "unit": "load",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1500
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct status on most calls, with unclear answers and problems raised to your team.",
        "metrics": [
          {
            "name": "Status fields correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct location, arrival time, loaded or empty and problem fields compared with the recording, divided by all such fields in the test calls."
          },
          {
            "name": "Problems raised",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled delays, breakdowns, refused loads and other problems raised to your team, divided by all labelled problems."
          },
          {
            "name": "Checks closed",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Scheduled checks that end with a recorded status or a raised load after the agreed retries, divided by all scheduled checks."
          },
          {
            "name": "Status with recording",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every status note must link to the call recording, transcript or tracking feed it came from."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 10,
          "unit": "load"
        },
        "controls": "Location and arrival time must come from what the driver or dispatcher said or from a tracking feed. A status filled in without a source is an error, and an unanswered check is raised rather than assumed on time."
      }
    },
    {
      "id": "sketch-to-plan-drafts",
      "title": "Sketch to Floor Plan Drafts",
      "description": "A purchasing guide to a workflow that turns your sketches and room requirements into editable floor plan options for your architect to develop.",
      "url": "https://renx.openmercury.com/purchasing-guides/sketch-to-plan-drafts/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample projects.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Plan options from sketches",
            "description": "Read the sketch, bubble diagram or marked-up print with the room program and site boundary, generate several plan options and check each one against the program.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          },
          {
            "key": "intool",
            "name": "Inside your CAD or BIM tool",
            "description": "Add a plug-in for one agreed CAD or BIM tool. Place options on separate layers or design options, apply confirmed redlines to a draft and add simple massing.",
            "setup": {
              "min": 2520,
              "max": 7080
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.85494272,
          "max": 1.85494272,
          "unit": "design round",
          "composition": [
            {
              "key": "optionsPerUnit",
              "count": 3,
              "noun": "plan options"
            },
            {
              "key": "roomsPerUnit",
              "count": 40,
              "noun": "program rooms"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 60
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Options that follow the program closely, with every mismatch listed and unclear sketch marks asked as questions.",
        "metrics": [
          {
            "name": "Rooms within area tolerance",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Program rooms placed in an option with a drawn area inside the agreed tolerance, divided by all program rooms, across the test projects."
          },
          {
            "name": "Mismatches reported",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Missing rooms, areas outside tolerance and broken required adjacencies that appear on the deviation list, divided by all such mismatches found by the reviewer. An unreported mismatch is a failure."
          },
          {
            "name": "Redlines applied",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Redline instructions applied as marked, or returned as a question when unclear, divided by all redline instructions in the test markups."
          },
          {
            "name": "Files open clean",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Option files that open in your CAD or BIM tool with editable walls, openings and rooms on your layers and naming, without repair, divided by all option files."
          },
          {
            "name": "Options worth developing",
            "target": 60,
            "unit": "%",
            "direction": "gte",
            "definition": "Options your architects judge worth developing further, divided by all options, scored blind against the plans your team drew for the same projects."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "No unapproved send, stamp, bid, status change or overwrite. A source change cancels a pending approval. Test malicious document instructions and repeated requests."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 2,
          "unit": "design round"
        },
        "controls": "Plan options are drafts for a designer to develop. Your architects choose, change and take responsibility for the design, its code compliance and every drawing that is issued."
      }
    },
    {
      "id": "smart-contract-change-review",
      "title": "Smart Contract Change Review",
      "description": "A purchasing guide to buying a workflow that reviews smart contract changes before merge and lists possible security issues with code evidence for your engineers to confirm.",
      "url": "https://renx.openmercury.com/purchasing-guides/smart-contract-change-review/",
      "category": {
        "id": "web3-crypto",
        "name": "Web3 & Crypto",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/web3-crypto/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review an uploaded change",
            "description": "Build the agreed repository, run static analysis and the test suite, review the changed contracts in context and return findings with code paths and severity reasons.",
            "setup": {
              "min": 1008,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Review each pull request",
            "description": "Adds a read-only repository app that reviews each new pull request, posts findings as a comment or check, and avoids duplicate comments on reruns.",
            "setup": {
              "min": 1656,
              "max": 4680
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.532,
          "max": 0.732,
          "unit": "pull request",
          "composition": [
            {
              "key": "changedLinesPerUnit",
              "count": 1000,
              "noun": "changed lines of contract code"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Useful findings for engineers, with uncertain items marked for review.",
        "metrics": [
          {
            "name": "Known issues found",
            "target": 70,
            "unit": "%",
            "direction": "gte",
            "definition": "Reported labelled issues divided by all labelled issues in held-out changes, including historical fixed bugs and seeded vulnerabilities; missing output counts as a miss."
          },
          {
            "name": "Findings confirmed",
            "target": 60,
            "unit": "%",
            "direction": "gte",
            "definition": "Findings your reviewer confirms as real and actionable divided by all reported findings; duplicates and style notes count against it."
          },
          {
            "name": "Findings with evidence",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "A finding passes when the file, lines, affected code path and reasoning are correct and a reviewer can reproduce the concern."
          },
          {
            "name": "Changed files reviewed",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Changed contract files that were built and analysed divided by all changed contract files; skipped files must be listed, not hidden."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 3,
          "unit": "pull request"
        },
        "controls": "Findings are a starting point for engineers and auditors. A clean result does not mean the contract is safe, and it does not replace an audit."
      }
    },
    {
      "id": "social-content-production",
      "title": "On-brand Social Posts",
      "description": "A guide to buying an AI workflow that turns your articles, product updates and brand assets into social posts ready for review.",
      "url": "https://renx.openmercury.com/purchasing-guides/social-content-production/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Estimates before tax, not provider quotes. Running cost covers machine cost for text drafting and static rendering only; editor time, platform fees and maintenance are separate. Confirmed in your pilot.",
        "recommendedScope": "export",
        "scopes": [
          {
            "key": "export",
            "name": "Download and publish yourself",
            "description": "Review the caption and image, then download them for your usual publishing tool. Your social accounts stay disconnected.",
            "setup": {
              "min": 576,
              "max": 1920
            }
          },
          {
            "key": "scheduled",
            "name": "Add approved scheduling",
            "description": "Connect an agreed social account. Approve the finished post and its publishing time before it is scheduled. Your account needs the platform's publishing permissions.",
            "setup": {
              "min": 864,
              "max": 2880
            }
          }
        ],
        "baseline": {
          "standard": "Templates",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.1176,
          "max": 0.345,
          "unit": "post",
          "composition": [
            {
              "key": "staticImagesPerUnit",
              "count": 1,
              "noun": "static image"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Templates",
        "description": "Templates: deliver a selectable library of hooks, content structures and visual layouts. Agree the template list and demonstrate each on our material.",
        "metrics": [],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 2,
          "unit": "post",
          "definition": "From request to finished preview at your expected load, including queueing, rendering, checks and retries. Editor time reported separately."
        },
        "controls": "In every case: no post without approval, no invented customer, endorsement or result, and no silently substituted image on the agreed challenge cases; editor time reported separately."
      }
    },
    {
      "id": "specialist-language-model-fine-tuning",
      "title": "Specialist Language Model Fine-tuning",
      "description": "A purchasing guide to buying a model adapted to your examples, tested on your tasks and deployed behind an interface you control.",
      "url": "https://renx.openmercury.com/purchasing-guides/specialist-language-model-fine-tuning/",
      "category": {
        "id": "ai-models",
        "name": "AI Models & Specialisation",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ai-models/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Train from approved example files",
            "description": "Prepare the supplied examples, establish a prompted baseline, run bounded fine-tuning trials and deploy the accepted adapter. Include a reproducible recipe, held-out results and rollback.",
            "setup": {
              "min": 1728,
              "max": 4800
            }
          },
          {
            "key": "connected",
            "name": "Read an approved dataset folder",
            "description": "Add a read-only dataset folder with version tracking, duplicate checks and a reviewed import process. Future retraining and deployment require approval and a separate run budget.",
            "setup": {
              "min": 2304,
              "max": 6480
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.06597056,
          "max": 0.10597056,
          "unit": "response",
          "composition": [
            {
              "key": "inputTokensPerUnit",
              "count": 2048,
              "noun": "input tokens"
            },
            {
              "key": "outputTokensPerUnit",
              "count": 512,
              "noun": "output tokens"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "A domain adapter with independent task, format and unsupported-answer tests.",
        "metrics": [
          {
            "name": "Tasks completed correctly",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Have independent reviewers score unseen tasks against all required rubric items. Empty or incomplete responses fail answerable tasks; refusals cannot inflate success."
          },
          {
            "name": "Valid output format",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Validate every response against the agreed schema before repair. Count malformed, missing and truncated outputs as failures."
          },
          {
            "name": "Supported factual claims",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check factual output claims against the supplied context. Score required-fact coverage through task success so an empty answer cannot pass by making no claims."
          },
          {
            "name": "Missing information handled",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Use genuinely unanswerable tasks and adversarial requests. Require an explicit request for missing evidence instead of fabricated facts, without refusing answerable tasks."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 2,
          "unit": "response"
        },
        "controls": "A fine-tune is not a live knowledge store. Provide current facts in the input; test abstention, privacy leakage and forgetting. Reject regressions on protected tasks and keep rollback available."
      }
    },
    {
      "id": "spot-quote-replies",
      "title": "Spot Quote Replies",
      "description": "A guide to buying an AI workflow that turns freight quote emails into priced replies, using your rates and margins.",
      "url": "https://renx.openmercury.com/purchasing-guides/spot-quote-replies/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Draft priced replies",
            "description": "Sort quote requests from other email, read lane, equipment, dates, weight and extras, price the lane from your rate sources and rules, and leave a reply draft with the source and margin shown.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "autoreply",
            "name": "Send routine quotes automatically",
            "description": "Adds automatic replies for customers, lanes, equipment and price bands you allow, holds everything else for a rep, and matches won loads in your transportation system back to their quotes.",
            "setup": {
              "min": 1872,
              "max": 5400
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.034,
          "max": 0.054,
          "unit": "quote request",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 2000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct lane details and rule-based prices, with unusual requests held for a rep.",
        "metrics": [
          {
            "name": "Lane details read correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct origin, destination, equipment, pickup date, weight and extra services divided by all such details in the test quote emails."
          },
          {
            "name": "Prices match your rules",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Quotes whose price equals the recomputed result from the named rate source and your pricing rules, divided by all priced test quotes."
          },
          {
            "name": "Risky requests held",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled hazardous, refrigerated, oversize, multi-stop or incomplete requests held for a rep, divided by all such labelled requests."
          },
          {
            "name": "Prices with source shown",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every quote must show the rate source, the lookup used and the pricing rule applied."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 6,
          "unit": "quote request"
        },
        "controls": "The model reads the email and writes the reply; the price itself is calculated from your rate sources and rules, not chosen by the model. A quote without a source is an error."
      }
    },
    {
      "id": "stablecoin-payment-matching",
      "title": "Stablecoin Payment Matching",
      "description": "A guide to buying an AI workflow that matches incoming stablecoin payments to invoices and flags payments your team needs to resolve.",
      "url": "https://renx.openmercury.com/purchasing-guides/stablecoin-payment-matching/",
      "category": {
        "id": "web3-crypto",
        "name": "Web3 & Crypto",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/web3-crypto/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Match exported payments",
            "description": "Read payment exports from your wallets or processor with your open invoice export, match each payment to a customer and invoice, and list exceptions with a reason.",
            "setup": {
              "min": 864,
              "max": 2640
            }
          },
          {
            "key": "connected",
            "name": "Connect my wallets and accounting",
            "description": "Adds direct reads from your receiving wallets or processor and your accounting system, applies approved payments to invoices without duplicates, and drafts messages to customers who underpaid.",
            "setup": {
              "min": 1656,
              "max": 4920
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0178,
          "max": 0.0378,
          "unit": "payment",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 2000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Clear payments matched by rule, unclear ones explained, uncertain matches sent to your team.",
        "metrics": [
          {
            "name": "Payments matched correctly",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Test payments with an open invoice matched to the right customer, invoice and amount, divided by all such payments. Payments left unmatched count as misses."
          },
          {
            "name": "Suggested matches correct",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Suggested matches your team confirms, divided by all suggested matches."
          },
          {
            "name": "Exceptions found with reason",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Prepared exceptions such as short, over, late or split payments, the wrong token or network and unknown senders flagged with the right reason, divided by all prepared exceptions."
          },
          {
            "name": "Matches with references",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every match and exception must give the transaction hash, network, token and invoice reference."
          }
        ],
        "speed": {
          "p95Seconds": 60,
          "concurrentJobs": 8,
          "unit": "payment"
        },
        "controls": "A suggested match is not an accounting entry until your team approves it. When the sender, amount or invoice is unclear, the payment goes to your team rather than to the closest invoice."
      }
    },
    {
      "id": "subscription-retention-offers",
      "title": "Subscription Cancellation & Retention Offers",
      "description": "Offer an eligible pause, plan change or discount when a subscriber wants to cancel, without blocking cancellation.",
      "url": "https://renx.openmercury.com/purchasing-guides/subscription-retention-offers/",
      "category": {
        "id": "ecommerce-internet",
        "name": "E-commerce & Internet",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/ecommerce-internet/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Use fixed, approved offers and deterministic eligibility checks before drafting an explanation. Keep a no-offer path and measure outcomes against a holdout group. Retention uplift is not an acceptance promise.",
            "setup": {
              "min": 1152,
              "max": 3120
            }
          },
          {
            "key": "connected",
            "name": "Connect the cancellation flow",
            "description": "Connect an existing cancellation screen to an approved billing API. Apply a selected offer only after explicit customer confirmation and recheck account state.",
            "setup": {
              "min": 1512,
              "max": 4200
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0294,
          "max": 0.0444,
          "unit": "request",
          "composition": [
            {
              "key": "offersPerUnit",
              "count": 5,
              "noun": "eligible offer candidates"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 2000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Eligible offers only",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Offers satisfying all account, frequency and discount limits divided by all offers shown; any unauthorized offer fails the pilot."
          },
          {
            "name": "Cancellation reasons classified",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct reason labels divided by all independently labeled cancellation requests, including an unknown category."
          },
          {
            "name": "Correct outcome records",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct, deduplicated choice and billing-status records divided by all expected outcome records."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 10,
          "concurrentJobs": 1,
          "unit": "request"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "supplier-bid-comparison",
      "title": "Supplier Bid Comparison",
      "description": "Compares supplier prices, delivery dates and requirements side by side, with source links and missing details for your buyer to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/supplier-bid-comparison/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate for your quote formats and comparison rules, not a complete sourcing platform or supplier-award service.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Upload my supplier quotes",
            "description": "Read the quotes and your requirements. Compare equivalent quantities, stated costs and delivery terms, with missing answers clearly marked.",
            "setup": {
              "min": 1224,
              "max": 3480
            }
          },
          {
            "key": "connected",
            "name": "Connect my sourcing records",
            "description": "Read authorised current bids from one system or prepared export. Revised quotes reopen the comparison for review; nothing is awarded or written back.",
            "setup": {
              "min": 1656,
              "max": 4680
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.616,
          "max": 1.016,
          "unit": "bid comparison",
          "composition": [
            {
              "key": "bidsPerUnit",
              "count": 3,
              "noun": "supplier quotes"
            },
            {
              "key": "itemsPerUnit",
              "count": 20,
              "noun": "quoted items per supplier"
            },
            {
              "key": "pagesPerUnit",
              "count": 60,
              "noun": "text-readable source pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100,
            "pages": 60
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Compare submitted prices and requirements with checked totals and source links.",
        "metrics": [
          {
            "name": "Price and term accuracy",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly extracted or correctly unresolved fields divided by all independently labelled fields. Wrong supplier, currency, pack size or quote version fails. Missed and unprocessed fields remain in the denominator."
          },
          {
            "name": "Requirement matches",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct requirement statuses divided by all labelled criteria across the quotes. Distinguish supported, conflicting and unanswered requirements. No answer is not compliance."
          },
          {
            "name": "Correct cost calculations",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All labelled totals must match the approved deterministic calculation or correctly remain incomplete. Use stated quantities, pack sizes, fees, currency rates and rounding rules; unknown charges are never zero."
          },
          {
            "name": "Valid source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every entry links to its exact quote page or spreadsheet cell and current version. A citation to another supplier or obsolete offer fails."
          },
          {
            "name": "Missing details marked",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All labelled missing, ambiguous or expired details remain visible for clarification. Unsupported assumptions cannot create a complete total or a winning supplier."
          },
          {
            "name": "Decision controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "All challenge cases reject supplier awards, rejections, external messages, purchase orders and source-system writes. Changed quotes invalidate affected approvals."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "maxPages": 60,
          "concurrentJobs": 2,
          "unit": "bid comparison"
        },
        "controls": "Test-set targets, not supplier quality or savings guarantees. Your buyer reviews every comparison and owns all sourcing decisions."
      }
    },
    {
      "id": "supplier-food-safety-documents",
      "title": "Supplier Food Safety Documents",
      "description": "A guide to buying an AI workflow that keeps supplier food safety records up to date and flags missing or expiring documents.",
      "url": "https://renx.openmercury.com/purchasing-guides/supplier-food-safety-documents/",
      "category": {
        "id": "food-agriculture",
        "name": "Food & Agriculture",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/food-agriculture/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "register",
        "scopes": [
          {
            "key": "register",
            "name": "Check uploaded documents",
            "description": "Read each document, identify its type, supplier, site, scope and dates, check it against your requirements and list missing, expiring, expired or mismatched documents with drafted requests.",
            "setup": {
              "min": 936,
              "max": 2880
            }
          },
          {
            "key": "connected",
            "name": "Connect my mailbox and quality system",
            "description": "Adds an approved supplier mailbox, read access to your supplier list, saving approved register entries to your quality or ERP system and sending reminders your team approves.",
            "setup": {
              "min": 1584,
              "max": 4800
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved OCR and model APIs"
        },
        "machineCostPerUnit": {
          "min": 0.0716,
          "max": 0.1716,
          "unit": "document",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved OCR and model APIs",
            "monthlyVolume": 400
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate register entries with uncertain documents held for your quality team.",
        "metrics": [
          {
            "name": "Correct register fields",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Each register field passes only when it matches the labelled value, including supplier, site, scope, issuer, issue date and expiry date; a guessed date is an error."
          },
          {
            "name": "Documents correctly identified",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Documents assigned the right document type and the right supplier, divided by all test documents, including unreadable ones."
          },
          {
            "name": "Gaps flagged",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged missing, expired, soon to expire or mismatched documents divided by all such labelled cases in the test suppliers."
          },
          {
            "name": "Entries with source page",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every register entry must link to the source document and the page each value came from."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 4,
          "unit": "document"
        },
        "controls": "Requirements, accepted schemes and renewal rules come from your quality lead, not from the model. A document is never treated as current when its date or site cannot be read."
      }
    },
    {
      "id": "tariff-classification",
      "title": "Tariff Code Classification",
      "description": "A purchasing guide to buying a workflow that suggests import tariff codes for your products, with the tariff text and past customs rulings behind each suggestion, for your trade compliance team to approve.",
      "url": "https://renx.openmercury.com/purchasing-guides/tariff-classification/",
      "category": {
        "id": "logistics",
        "name": "Logistics & Supply Chain",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/logistics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "suggest",
        "scopes": [
          {
            "key": "suggest",
            "name": "Suggest codes for products",
            "description": "Read product descriptions and specification sheets, search the tariff schedule and published rulings, and suggest a code with step-by-step reasoning, cited text and any missing product facts.",
            "setup": {
              "min": 936,
              "max": 2880
            }
          },
          {
            "key": "catalog",
            "name": "Check my product catalog",
            "description": "Adds read-only access to your product records, flags products without codes or with codes that no longer exist after a tariff schedule update, and queues them for review.",
            "setup": {
              "min": 1656,
              "max": 4920
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.1468,
          "max": 0.3468,
          "unit": "product",
          "composition": [
            {
              "key": "pagesPerUnit",
              "count": 5,
              "noun": "pages of product description and specification"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct codes for clear products, with uncertain products held for your specialist.",
        "metrics": [
          {
            "name": "Shared code level correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Suggestions matching the specialist’s code at the internationally shared level, divided by all test products; flagged products count as not correct."
          },
          {
            "name": "Full code correct",
            "target": 85,
            "unit": "%",
            "direction": "gte",
            "definition": "Suggestions matching the specialist’s full national code, divided by all test products; flagged products count as not correct."
          },
          {
            "name": "Uncertain products flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Products the specialist labelled as needing more facts, a ruling or expert judgement that were flagged, divided by all such labelled products."
          },
          {
            "name": "Valid citations",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every cited heading, note and ruling must exist in the stored tariff edition or ruling database and say what the reasoning claims."
          }
        ],
        "speed": {
          "p95Seconds": 90,
          "concurrentJobs": 4,
          "unit": "product"
        },
        "controls": "The importer remains responsible for classification. A suggestion is research for your specialist, not a ruling; every cited heading, note and ruling must exist in the current tariff edition or ruling database."
      }
    },
    {
      "id": "tax-document-intake",
      "title": "Tax Document Intake Checks",
      "description": "A purchasing guide to buying a workflow that sorts a client's tax documents, lists what each one is and drafts a request for the documents still missing, for your preparer to approve.",
      "url": "https://renx.openmercury.com/purchasing-guides/tax-document-intake/",
      "category": {
        "id": "professional-business",
        "name": "Professional & Business Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/professional-business/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your checklist and sample client files.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Check uploaded documents",
            "description": "Read uploaded scans, photos and downloaded forms, list each document with its type, tax year, issuer and pages, compare with your checklist and draft a missing-items request.",
            "setup": {
              "min": 936,
              "max": 2760
            }
          },
          {
            "key": "connected",
            "name": "Read from my client portal",
            "description": "Adds a read-only portal or folder connection, rechecks a client when new files arrive and saves the approved document list and request as a draft in the portal.",
            "setup": {
              "min": 1512,
              "max": 4440
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.7076,
          "max": 1.7076,
          "unit": "return",
          "composition": [
            {
              "key": "documentsPerUnit",
              "count": 25,
              "noun": "client documents"
            },
            {
              "key": "pagesPerUnit",
              "count": 60,
              "noun": "pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 40
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Reliable document lists with unreadable and unknown documents held for a preparer.",
        "metrics": [
          {
            "name": "Documents identified correctly",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "A document passes only when its form type, tax year and issuer all agree with the preparer's label; corrected and duplicate forms count separately."
          },
          {
            "name": "Missing items found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled missing documents that appear in the draft request, divided by all labelled missing documents; skipped clients stay in the denominator."
          },
          {
            "name": "Correct missing-item requests",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Requested items that were really missing, divided by all requested items, so clients are not asked for documents they already sent."
          },
          {
            "name": "Complete page links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Each listed document links to its original file and pages, so a preparer can open the source in one step."
          }
        ],
        "speed": {
          "p95Seconds": 300,
          "concurrentJobs": 4,
          "unit": "return"
        },
        "controls": "A document list is preparation support, not a reviewed return. Your preparer confirms figures against the source pages, and the workflow never decides what is taxable."
      }
    },
    {
      "id": "tax-return-prep-workpapers",
      "title": "Tax Return Data Entry & Workpapers",
      "description": "A guide to buying an AI workflow that turns client tax documents into draft entries and workpapers for your preparers to check.",
      "url": "https://renx.openmercury.com/purchasing-guides/tax-return-prep-workpapers/",
      "category": {
        "id": "professional-business",
        "name": "Professional & Business Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/professional-business/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "workpaper",
        "scopes": [
          {
            "key": "workpaper",
            "name": "Prepare entries and workpapers",
            "description": "Read the figures from the supported forms, place each one in the matching tax software input with its document and page, flag differences from last year and missing recurring payers, and draft the workpaper.",
            "setup": {
              "min": 1296,
              "max": 3840
            }
          },
          {
            "key": "connected",
            "name": "Import approved entries",
            "description": "Adds an import of the entries a preparer approves into your tax software and files the workpaper in your document system, without duplicating entries when a return is run again.",
            "setup": {
              "min": 1944,
              "max": 5880
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.868,
          "max": 1.668,
          "unit": "return",
          "composition": [
            {
              "key": "documentsPerUnit",
              "count": 25,
              "noun": "source documents"
            },
            {
              "key": "pagesPerUnit",
              "count": 60,
              "noun": "pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 50
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Correct figures and fields on clear documents, with unreadable or unusual items left for the preparer.",
        "metrics": [
          {
            "name": "Figures read correctly",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Figures such as wages, withholding, interest, dividends, proceeds, basis and partnership amounts that match the labelled value on the document, divided by all labelled figures in the test returns. A figure marked unreadable for the preparer is not counted as wrong."
          },
          {
            "name": "Figures in the right input field",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly read figures that are placed in the right tax software input field for the right taxpayer, form and payer, divided by all labelled figures."
          },
          {
            "name": "Prior-year differences flagged",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Labelled differences from last year’s return above your threshold, and recurring payers missing this year, that are flagged, divided by all such labelled items."
          },
          {
            "name": "Figures with document and page",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every figure in the worksheet must cite the source document and page it came from."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 4,
          "unit": "return"
        },
        "controls": "Prepared entries are work for a preparer to check, not a completed return. Your preparers and reviewers still decide tax treatment, complete the return and sign it."
      }
    },
    {
      "id": "technician-dispatch-planning",
      "title": "Technician Dispatch & Rescheduling",
      "description": "Assign jobs to available, qualified technicians and prepare a revised schedule when plans change.",
      "url": "https://renx.openmercury.com/purchasing-guides/technician-dispatch-planning/",
      "category": {
        "id": "hospitality-local",
        "name": "Hospitality & Local Services",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/hospitality-local/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Use a constraint solver for assignments and an AI explanation for the proposed changes. The base scope uses buyer-provided travel-time estimates; live routing and traffic subscriptions are separate.",
            "setup": {
              "min": 1512,
              "max": 4560
            }
          },
          {
            "key": "connected",
            "name": "Update the dispatch board",
            "description": "Read the current board and write dispatcher-approved changes through an authorized field-service API. Refuse changes if the schedule has moved since approval.",
            "setup": {
              "min": 1872,
              "max": 5760
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.2184,
          "max": 0.3684,
          "unit": "schedule",
          "composition": [
            {
              "key": "jobsPerUnit",
              "count": 30,
              "noun": "service jobs"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Assignments meeting hard constraints",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Assignments satisfying skills, shifts and non-overlap rules divided by all proposed assignments."
          },
          {
            "name": "Feasible jobs assigned",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Jobs scheduled divided by jobs scheduled in an independently verified feasible reference plan, under identical constraints."
          },
          {
            "name": "Unassigned jobs explained",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Unassigned jobs with a correct actionable constraint explanation divided by all unassigned jobs."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 1,
          "unit": "schedule"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "title-commitment-drafting",
      "title": "Title Commitment Drafting",
      "description": "A guide to buying an AI workflow that drafts title commitments from your search packages, with document references for your examiner.",
      "url": "https://renx.openmercury.com/purchasing-guides/title-commitment-drafting/",
      "category": {
        "id": "real-estate-property",
        "name": "Real Estate & Construction",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/real-estate-property/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "draft",
        "scopes": [
          {
            "key": "draft",
            "name": "Draft from uploaded files",
            "description": "Read the order and every recorded document in the search package, draft vesting, legal description, requirements and exceptions in your form, link each item to its document and list open questions.",
            "setup": {
              "min": 1152,
              "max": 3720
            }
          },
          {
            "key": "connected",
            "name": "Connect my title production software",
            "description": "Adds a connection that reads new orders and search documents from your title production software and saves the approved schedules and open questions to the order.",
            "setup": {
              "min": 1728,
              "max": 5400
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.49,
          "max": 0.69,
          "unit": "title order",
          "composition": [
            {
              "key": "documentsPerUnit",
              "count": 30,
              "noun": "recorded documents"
            },
            {
              "key": "pagesPerUnit",
              "count": 120,
              "noun": "pages"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 200
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Vesting and legal description right, requirements and exceptions found and each linked to its document.",
        "metrics": [
          {
            "name": "Vesting and legal description right",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Test orders where the drafted vesting and legal description match the commitment your examiner issued, divided by all test orders."
          },
          {
            "name": "Requirements found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Requirements on the issued commitments, such as releases, payoffs and entity documents, that appear in the draft, divided by all such requirements."
          },
          {
            "name": "Exceptions found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Exceptions on the issued commitments that appear in the draft with the right recorded document, divided by all such exceptions."
          },
          {
            "name": "Items linked to a document",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Every drafted requirement and exception must cite the recorded document and page behind it, or be marked as standard wording."
          }
        ],
        "speed": {
          "p95Seconds": 900,
          "concurrentJobs": 2,
          "unit": "title order"
        },
        "controls": "A draft commitment is a starting point for your examiner, not an insuring decision. Your examiner and underwriter decide what to require, except and insure."
      }
    },
    {
      "id": "trade-confirmation-matching",
      "title": "Trade Confirmation Matching",
      "description": "A purchasing guide to buying a workflow that reads counterparty trade confirmations, compares their terms with your booked trades and lists matches and breaks for your operations team.",
      "url": "https://renx.openmercury.com/purchasing-guides/trade-confirmation-matching/",
      "category": {
        "id": "trading-risk",
        "name": "Trading & Risk Management",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/trading-risk/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Match uploaded confirmations",
            "description": "Read agreed confirmation formats, extract economic terms, find the booked trade and return matched, break and check-by-hand results with page references.",
            "setup": {
              "min": 1224,
              "max": 3240
            }
          },
          {
            "key": "connected",
            "name": "Read from my mailbox and trade system",
            "description": "Adds a read-only confirmations mailbox, read-only trade records, amended and duplicate confirmation handling and timestamps for when each confirmation arrived and was checked.",
            "setup": {
              "min": 2088,
              "max": 5640
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.0868,
          "max": 0.1668,
          "unit": "confirmation",
          "composition": [],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 500,
            "pages": 4
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Accurate terms, with uncertain confirmations held for review.",
        "metrics": [
          {
            "name": "Terms read correctly",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "A term passes only when value, currency, unit, date and party are all correct; an unreadable term counted as unreadable is correct."
          },
          {
            "name": "Real breaks caught",
            "target": 97,
            "unit": "%",
            "direction": "gte",
            "definition": "Breaks flagged or held for review divided by all operations-labelled breaks; missing results count as misses."
          },
          {
            "name": "Breaks that are real",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Flagged breaks that operations confirms divided by all flagged breaks."
          },
          {
            "name": "Complete source links",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Results must keep the confirmation document, page, booked trade identifier and tolerance rule version."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "maxPages": 20,
          "concurrentJobs": 4,
          "unit": "confirmation"
        },
        "controls": "Compare prices, rates, amounts and dates with exact arithmetic and agreed tolerances. A model reading is not evidence that a trade agrees; the result must cite the confirmation page and the booked trade."
      }
    },
    {
      "id": "training-course-from-documents",
      "title": "Training Courses from Your Documents",
      "description": "A purchasing guide to a workflow that turns your approved documents into editable training modules, practice questions and source-linked answer keys.",
      "url": "https://renx.openmercury.com/purchasing-guides/training-course-from-documents/",
      "category": {
        "id": "education",
        "name": "Education",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/education/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-02",
        "basis": "engineering-estimate",
        "note": "AI-assisted setup using reusable components and your approved sources.",
        "recommendedScope": "drafts",
        "scopes": [
          {
            "key": "drafts",
            "name": "Module and knowledge check",
            "description": "Get an editable module with examples, practice questions and checked answers. Add an LMS connection to save approved modules as drafts.",
            "setup": {
              "min": 1152,
              "max": 3360
            }
          },
          {
            "key": "connected",
            "name": "Connect my learning system",
            "description": "Read approved material from one authorised source connection and save reviewed outputs as drafts in one agreed destination. No automatic release.",
            "setup": {
              "min": 1728,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.44,
          "max": 0.84,
          "unit": "module",
          "composition": [
            {
              "key": "sourceWordsPerUnit",
              "count": 15000,
              "noun": "source words"
            },
            {
              "key": "questionsPerUnit",
              "count": 10,
              "noun": "knowledge-check questions"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Expert-reviewed output with checks against your agreed sources and reference examples.",
        "metrics": [
          {
            "name": "Content correct",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "The subject-matter expert checks each actionable fact against its exact source version. Unsupported obligations or wrong instructions are critical failures."
          },
          {
            "name": "Objectives covered",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Independently map objectives to teaching content and assessment questions; mentioning a topic without teaching it does not count."
          },
          {
            "name": "Quiz answers correct",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "A wrong key or question with no supported answer fails; assess ambiguity as well as factual correctness."
          },
          {
            "name": "References support the content",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "A citation must support the exact claim and use the approved current version, not merely point to a real document."
          },
          {
            "name": "Approval controls pass",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Require approval of the exact source and output version before any release or system write. Changed sources invalidate approval. Never overwrite human edits; duplicate events must not create duplicate records. Treat documents as data, not instructions."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 2,
          "unit": "module"
        },
        "controls": "Your subject-matter expert approves all training before release. No automatic certification, learner pass/fail decisions, regulatory accreditation or claims that completing the module proves competence."
      }
    },
    {
      "id": "university-enrollment-reporting",
      "title": "University Enrollment & Student Support Reports",
      "description": "Combine enrollment and support records into checked reports showing where students need follow-up.",
      "url": "https://renx.openmercury.com/purchasing-guides/university-enrollment-reporting/",
      "category": {
        "id": "education",
        "name": "Education",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/education/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-05",
        "basis": "engineering-estimate",
        "note": "This guide price is a starting point for your conversation with a provider. Agree the final scope and price directly with your provider.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Review from exports",
            "description": "Calculate counts in code before drafting commentary. Use deterministic cohort definitions, role-based access and small-group suppression agreed with your institution. A support flag is not a prediction of student ability.",
            "setup": {
              "min": 1368,
              "max": 4080
            }
          },
          {
            "key": "connected",
            "name": "Refresh from a campus system",
            "description": "Read an approved student system into the report on a schedule. Other source systems remain validated exports; no automatic student messages or record changes.",
            "setup": {
              "min": 1656,
              "max": 5040
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.3486,
          "max": 0.6486,
          "unit": "report",
          "composition": [
            {
              "key": "recordsPerUnit",
              "count": 1000,
              "noun": "student records"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 100
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Test the defined workload and controls.",
        "metrics": [
          {
            "name": "Correct cohort counts",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Counts matching independently calculated source totals divided by all requested cohort counts."
          },
          {
            "name": "Correct linked student records",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct record links divided by all suggested links; unresolved identities stay separate."
          },
          {
            "name": "Required follow-ups included",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Agreed rule-based follow-ups surfaced divided by all labeled follow-ups; missed source records count as failures."
          },
          {
            "name": "Approval and data controls",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed control cases divided by all independently tested unauthorized-action, stale-input and sensitive-data cases; any critical failure rejects delivery."
          }
        ],
        "speed": {
          "p95Seconds": 120,
          "concurrentJobs": 1,
          "unit": "report"
        },
        "controls": "Targets apply to the agreed independent test set, not every possible future input. During the pilot, a person reviews every result. Any unauthorized action or sensitive-data exposure fails acceptance."
      }
    },
    {
      "id": "video-translation-dubbing",
      "title": "Video Translation & Dubbing",
      "description": "A purchasing guide to buying a workflow that translates your videos, adds a new narration and prepares subtitles for your review.",
      "url": "https://renx.openmercury.com/purchasing-guides/video-translation-dubbing/",
      "category": {
        "id": "sales-marketing",
        "name": "Sales & Marketing",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/sales-marketing/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "An AI-assisted setup estimate using reusable components, subject to your requirements and sample data.",
        "recommendedScope": "files",
        "scopes": [
          {
            "key": "files",
            "name": "Translate videos I upload",
            "description": "Upload an authorised narrated video. Review its transcript and translation, then generate a licensed replacement narration and export the video with subtitles.",
            "setup": {
              "min": 1944,
              "max": 5400
            }
          },
          {
            "key": "connected",
            "name": "Pick up videos from my folder",
            "description": "Adds an authorised source-folder connection, version tracking, duplicate detection and failure notifications. Each language version still needs script and final-audio approval.",
            "setup": {
              "min": 2376,
              "max": 6600
            }
          }
        ],
        "baseline": {
          "standard": "Standard",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 1.1732576,
          "max": 1.9732576,
          "unit": "language version",
          "composition": [
            {
              "key": "sourceMinutesPerUnit",
              "count": 5,
              "noun": "source-video minutes"
            },
            {
              "key": "languagesPerUnit",
              "count": 1,
              "noun": "target language"
            },
            {
              "key": "charactersPerUnit",
              "count": 6000,
              "noun": "translated characters"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 50
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Standard",
        "description": "Use your glossary, script approval and checked narration.",
        "metrics": [
          {
            "name": "Segments preserve the original meaning",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Independent bilingual reviewers compare every source segment with the translation using an agreed error rubric. Missing segments count as failures. Report critical errors separately; do not rely only on automatic similarity or back-translation."
          },
          {
            "name": "Glossary terms used correctly",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Check every required glossary occurrence in both the script and generated speech. Report textual correctness and pronunciation separately; either failure makes that occurrence fail. Preserve names, quantities and negation."
          },
          {
            "name": "Narration accepted by native listeners",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Native listeners score intelligibility, pronunciation and natural delivery blind to preset. Count all generated segments, including silence, clipped words and failed generations. Do not use voice similarity as a substitute for clarity."
          },
          {
            "name": "Narration fits its agreed time slots",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Compare each narration segment with its agreed source time slot. Do not rush speech or delete meaning to pass. Subtitles must match the generated audio within their separate tolerance; this is not mouth-motion matching."
          },
          {
            "name": "Exports pass technical checks",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Validate decodable video, complete audio, duration, subtitle encoding and timing for every requested file. Preserve the original visuals. Failed exports and missing segments remain in the denominator."
          }
        ],
        "speed": {
          "p95Seconds": 600,
          "concurrentJobs": 2,
          "unit": "language version"
        },
        "controls": "Incorrect names, quantities, warnings or meaning must be corrected before sharing, even when average scores pass. A fluent voice is not proof of an accurate translation."
      }
    },
    {
      "id": "visual-defect-inspection",
      "title": "Visual Defect Inspection",
      "description": "A purchasing guide to buying a visual inspection workflow that checks your parts for agreed defects and flags items for your quality team to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/visual-defect-inspection/",
      "category": {
        "id": "manufacturing-robotics",
        "name": "Manufacturing & Robotics",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/manufacturing-robotics/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Engineering estimates, not provider quotes. Camera hardware, lighting, fixtures, installation, training compute, labelling and human inspection are separate.",
        "recommendedScope": "images",
        "scopes": [
          {
            "key": "images",
            "name": "Inspect saved images",
            "description": "Adapt a vision model to your agreed visible defects. Return pass or hold recommendations with part IDs, images and model versions, and evaluate it on held-out production examples.",
            "setup": {
              "min": 1440,
              "max": 4080
            }
          },
          {
            "key": "camera",
            "name": "Connect my inspection camera",
            "description": "Adds an adapter for an existing documented camera feed, part/image matching, timeout handling and operator review. You supply the camera, lighting, fixtures and installation.",
            "setup": {
              "min": 2160,
              "max": 6240
            }
          }
        ],
        "baseline": {
          "standard": "Balanced inspection",
          "deployment": "Your cloud",
          "modelAccess": "No external model calls"
        },
        "machineCostPerUnit": {
          "min": 0.0020798528,
          "max": 0.0035798528000000004,
          "unit": "part",
          "composition": [
            {
              "key": "imagesPerUnit",
              "count": 1,
              "noun": "image"
            }
          ],
          "assumptions": {
            "modelAccess": "No external model calls",
            "monthlyVolume": 20000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Balanced inspection",
        "description": "Catch known defects without holding too many good parts.",
        "metrics": [
          {
            "name": "Defective parts held",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Held defective parts divided by all labelled defective parts, reported for every agreed defect class. Defective pass decisions are misses. Pair with good-part yield so holding everything cannot pass acceptance."
          },
          {
            "name": "Good parts passed",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Passed good parts divided by all labelled good parts. Unnecessary holds, abstentions and missing results count against yield. Report false holds alongside missed defects."
          },
          {
            "name": "Unusable images held",
            "target": 99,
            "unit": "%",
            "direction": "gte",
            "definition": "Held unusable inspections divided by all labelled unusable inspections, including blur, occlusion, wrong view and capture failures. Do not silently remove them from the test."
          },
          {
            "name": "Traceable inspection results",
            "target": 100,
            "unit": "%",
            "direction": "gte",
            "definition": "Submitted parts with a valid decision and correct part, image and model IDs divided by all submitted parts. Missing results, duplicate decisions and stale image matches fail."
          }
        ],
        "speed": {
          "p95Seconds": 5,
          "concurrentJobs": 1,
          "unit": "part",
          "definition": "From a complete submitted image, or capture trigger in camera scope, to a persisted result. Include capture, transfer, preprocessing, queueing, inference, retries and logging as applicable. Mechanical handling is separate."
        },
        "controls": "A failed, stale or unusable inspection cannot pass. The quality owner defines disposition; this is not a safety-certified inspection system."
      }
    },
    {
      "id": "wallet-activity-treasury",
      "title": "Wallet Activity & Treasury Reports",
      "description": "A purchasing guide to buying a workflow that reads your treasury wallet activity, labels transfers and prepares a source-linked report for your team to review.",
      "url": "https://renx.openmercury.com/purchasing-guides/wallet-activity-treasury/",
      "category": {
        "id": "web3-crypto",
        "name": "Web3 & Crypto",
        "url": "https://renx.openmercury.com/purchasing-guides/categories/web3-crypto/"
      },
      "pricing": {
        "currency": "USD",
        "asOf": "2026-10-01",
        "basis": "engineering-estimate",
        "note": "Core runtime includes estimated data access and hosting. Staff review, maintenance, premium data minimums and caller-agent costs are separate.",
        "recommendedScope": "review",
        "scopes": [
          {
            "key": "review",
            "name": "Review a wallet period",
            "description": "Read authorised wallet addresses through an existing data API, normalise supported token transfers and suggest labels using your address book and rules. Produce an evidence-linked report for staff review.",
            "setup": {
              "min": 1872,
              "max": 5040
            }
          },
          {
            "key": "scheduled",
            "name": "Keep reports up to date",
            "description": "Adds incremental collection, saved block cursors, duplicate handling, retries and visible source freshness. Split busy periods into bounded reviews; staff still checks suggested categories and exceptions.",
            "setup": {
              "min": 2448,
              "max": 6720
            }
          }
        ],
        "baseline": {
          "standard": "Core treasury checks",
          "deployment": "Your cloud",
          "modelAccess": "Approved model API"
        },
        "machineCostPerUnit": {
          "min": 0.05405,
          "max": 0.1035,
          "unit": "review",
          "composition": [
            {
              "key": "transfersPerUnit",
              "count": 100,
              "noun": "transfer records"
            }
          ],
          "assumptions": {
            "modelAccess": "Approved model API",
            "monthlyVolume": 1000
          }
        }
      },
      "acceptance": {
        "basis": "Proposed targets to agree and test with a provider; not measured performance or guarantees.",
        "standard": "Core treasury checks",
        "description": "Preserve the transfers and suggest labels with evidence.",
        "metrics": [
          {
            "name": "Transfer records correct",
            "target": 99.5,
            "unit": "%",
            "direction": "gte",
            "definition": "Fully correct required records divided by all reference transfers in the agreed range. Missing, duplicated, wrong-chain and mis-scaled records fail. Raw amounts must also reconcile exactly; unexplained differences block acceptance."
          },
          {
            "name": "Category suggestions correct",
            "target": 90,
            "unit": "%",
            "direction": "gte",
            "definition": "Correct category or justified unknown labels divided by all labelled transfers. Report each category and known cases separately so returning unknown for everything cannot pass."
          },
          {
            "name": "Explanations supported",
            "target": 98,
            "unit": "%",
            "direction": "gte",
            "definition": "Supported statements divided by all factual statements. Transaction links alone do not prove a counterparty identity or business purpose. Required transfer coverage prevents empty reports from passing."
          },
          {
            "name": "Rule exceptions found",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Correctly flagged exceptions divided by all labelled rule violations. Failed or omitted records remain misses. The rules are agreed before testing, not invented by the model."
          },
          {
            "name": "Exception flags correct",
            "target": 95,
            "unit": "%",
            "direction": "gte",
            "definition": "Confirmed exceptions divided by all flagged exceptions. Unknown counterparties and high amounts are review signals, not accusations of fraud."
          }
        ],
        "speed": {
          "p95Seconds": 180,
          "concurrentJobs": 3,
          "unit": "review",
          "definition": "From an accepted review request or scheduled batch to stored report, including data retrieval, parsing, queueing and retries. Block finality and the wait for the next collection cycle are shown separately."
        },
        "controls": "Staff approves business labels and every subsequent action. Keep amounts deterministic and preserve source gaps; this is not a security, tax or investment decision system."
      }
    }
  ]
}