Skip to main content

CRM: Sales Forecasting

Problem Statement​

Generating a sales forecast aggregates pipeline data by period, stage, team, or product line. This is a read-only analytical operation with complex filter parameters.

Why Human-Only Semantics Fail​

  • Forecast dashboards display charts that agents cannot parse
  • Filter controls don't declare available dimensions or date ranges
  • "Export" buttons produce files in undeclared formats
  • Drill-down interactions are click-based with no declared navigation model

Why Scraping Fails Here​

  • Charts render as SVG/Canvas — no textual data in the DOM
  • Filters reload the page asynchronously
  • Data tables are paginated with lazy loading
  • Export downloads trigger browser file-save dialogs

How AXAG Eliminates Scraping​

forecast.generate declares the filter parameters, output format options, and scope boundaries. Agents get structured forecast data.

Annotated UI Example​

CRM — generate forecast
<button
axag-intent="forecast.generate"
axag-entity="forecast"
axag-action-type="read"
axag-required-parameters='["period"]'
axag-optional-parameters='["team_id","product_line","stage_filter","format"]'
axag-scope="tenant"
axag-risk-level="none"
axag-idempotent="true"
axag-description="Generate a sales forecast for the specified period"
>Generate Forecast</button>

Semantic Manifest Excerpt​

Manifest — forecast.generate
{
"intent": "forecast.generate",
"entity": "forecast",
"action_type": "read",
"operation_id": "forecast_generate",
"description": "Generate a sales forecast for the specified period",
"required_parameters": [
{
"name": "period",
"type": "string",
"enum": ["current_quarter", "next_quarter", "current_year", "custom"]
}
],
"optional_parameters": [
{ "name": "team_id", "type": "string" },
{ "name": "product_line", "type": "string" },
{
"name": "stage_filter",
"type": "array",
"items": {
"type": "string",
"enum": ["prospecting", "qualification", "proposal", "negotiation", "closed_won"]
}
},
{ "name": "format", "type": "string", "enum": ["json", "csv", "pdf"], "default": "json" }
],
"risk_level": "none",
"idempotent": true,
"scope": "tenant"
}

Generated Tool Example​

{
"name": "forecast_generate",
"description": "Generate a sales forecast for the specified period",
"input_schema": {
"type": "object",
"properties": {
"period": {
"type": "string",
"enum": ["current_quarter", "next_quarter", "current_year", "custom"]
},
"team_id": { "type": "string" },
"product_line": { "type": "string" },
"stage_filter": {
"type": "array",
"items": {
"type": "string",
"enum": ["prospecting", "qualification", "proposal", "negotiation", "closed_won"]
}
},
"format": { "type": "string", "enum": ["json", "csv", "pdf"], "default": "json" }
},
"required": ["period"]
},
"metadata": {
"action_type": "read",
"risk_level": "none",
"idempotent": true,
"confirmation_required": false,
"approval_required": false,
"source_intent": "forecast.generate",
"source_entity": "forecast"
}
}

Constraints & Safety Notes​

  • Read-only, no side-effects
  • Scoped to tenant — cannot access other organizations' pipeline data
  • custom period type would require additional start_date/end_date parameters
  • CSV/PDF formats are for human consumption; JSON is the agent-preferred format