ApexCloud Retention Operations Board Skill
Overview
Build a high-touch retention action board by reconciling account profiles, billing snapshots, support health, NPS, receivables, product usage, and expansion opportunities from the ApexCloud Retention Operations API.
API Base URL
Read environment_access.md in the solver directory and use GDPEVO_ENV_BASE_URL as the operative API base URL. Do not hard-code localhost or 127.0.0.1. The task text may mention a local URL; always override with the environment variable.
Known Endpoints
| Endpoint |
Method |
Description |
/api/health |
GET |
Service health and row counts of backing data files |
/api/accounts |
GET |
List all account profiles (44 accounts) |
/api/accounts/{account_id} |
GET |
Single account profile |
/api/opportunities |
GET |
List all opportunities (114 records) |
/api/accounts/{account_id}/metrics |
GET |
Monthly account metrics (12 months per account) |
/api/accounts/{account_id}/nps |
GET |
NPS responses for an account (may also appear as /api/accounts/{account_id}/nps_responses) |
/api/accounts/{account_id}/billing_snapshots |
GET |
Monthly billing data per account |
/api/accounts/{account_id}/ar_aging |
GET |
A/R aging entries per account |
/api/accounts/{account_id}/support_tickets |
GET |
Support tickets per account |
Endpoint Discovery Note: If a sub-endpoint returns not_found, also try the top-level form (e.g., /api/billing_snapshots, /api/ar_aging, /api/nps_responses, /api/support_tickets). The API may expose data both ways.
Account Profile Fields
Key fields from /api/accounts and /api/accounts/{id}:
account_id — stable identifier
display_name / legal_name / account_aliases
segment — Strategic, Enterprise, Mid-Market, SMB
region — North America, EMEA, APAC, LATAM
product_plan — e.g., Enterprise, Scale, Strategic, Growth
lifecycle_status — active, renewal_risk, implementation, etc.
renewal_date — ISO date string
contract_tenure_months — integer
csm_owner — assigned CSM name
billing_arr_current — current ARR from billing system
crm_arr — ARR recorded in CRM
Monthly Metrics Fields
From /api/accounts/{id}/metrics:
month — YYYY-MM
quarter — YYYY-QN
active_seats — integer
product_usage — percentage (0–100)
recognized_revenue — currency
sla_compliance — percentage
support_ticket_count — integer
nps_score — integer 0–10, or null
survey_status — completed or missing
Opportunity Fields
From /api/opportunities:
opportunity_id
account_id
amount — currency
close_date — ISO date
created_date — ISO date
stage — e.g., Discovery, Proposal, Prospecting, Closed Won, Closed Lost
state — open or closed
product_line
NPS Response Fields
From /api/accounts/{id}/nps:
response_id
score — integer 0–10
response_date — ISO date
survey_channel — e.g., email, csm_call, in_app
retracted — boolean; exclude retracted responses from NPS calculations
Workflow Steps
Read task parameters
- Board as-of date (e.g.,
2026-06-30)
- Activity period start and end dates
- Month identifiers (e.g.,
2026-04, 2026-05, 2026-06)
- List of
account_ids to include
- Follow-up due dates per action type
Fetch account profiles
GET /api/accounts and filter to the requested account_ids
- Or call
GET /api/accounts/{id} for each
Fetch opportunities
GET /api/opportunities
- Filter to
state == "open" and close_date within the activity period
- Sum
amount per account as expansion_pipeline
Fetch monthly metrics
GET /api/accounts/{id}/metrics
- Filter to months within the activity period
- Aggregate: average
product_usage, average sla_compliance, total support_ticket_count, latest active_seats, latest NPS (non-retracted)
Fetch NPS responses
GET /api/accounts/{id}/nps
- Filter out
retracted: true
- Compute latest NPS within or before the period if needed
Fetch billing & A/R data
GET /api/accounts/{id}/billing_snapshots or /api/billing_snapshots
GET /api/accounts/{id}/ar_aging or /api/ar_aging
- For A/R aging, sum amounts with
days_overdue > 0 as overdue_balance as of the board date
- If the billing_snapshots endpoint is unavailable, fall back to
billing_arr_current from the account profile for current_arr.
Fetch support tickets (if available)
GET /api/accounts/{id}/support_tickets or /api/support_tickets
- Count tickets created within the activity period, or with status
open as of board date
Compute per-account board entries
- Determine
current_arr: use billing_arr_current from the account profile as the primary source. If the task explicitly asks to reconcile with billing snapshots, fetch the latest billing snapshot for the period and use its arr field. If the two sources differ materially, prefer the billing snapshot ARR when the task uses the word "reconcile".
- Determine
risk_level based on heuristics (see Risk Model section)
- Determine
primary_action based on risk level and dominant reason (see Action Assignment section)
- Compute
reason_codes array
- Set
next_touch_due_date from the task-provided follow-up calendar
- Compute
overdue_balance: sum amount from all A/R aging entries for the account where days_overdue > 0 as of the board date. If A/R aging is unavailable, set to 0.00.
- Compute
expansion_pipeline: sum amount of all opportunities where account_id matches, state == "open", and close_date falls within the activity period (inclusive).
Sort the action board
- Use the standard retention board order: sort primarily by
risk_level severity (critical > high > medium > low), secondarily by current_arr descending, then by account_id ascending for stability
- Assign
rank sequentially starting at 1
Compute segment summary
strategic_accounts: count of accounts with segment == "Strategic"
enterprise_accounts: count of accounts with segment == "Enterprise"
arr_at_risk: sum of current_arr across all board accounts
open_expansion_pipeline: sum of expansion_pipeline
net_revenue_exposure: typically arr_at_risk + open_expansion_pipeline (confirm against task-specific formula if implied)
Populate follow-up calendar
- Use the exact dates provided in the task prompt for each action key
Select policy codes
- The answer template shows pipe-separated options like
RS-2|RS-6|RS-9
- Select one code from each option set based on the risk model, ARR source, support hygiene, action priority, board sort, exposure formula, and calendar policy used
- Document the rationale for the selected code in reasoning
Emit JSON only
- Output must match
answer_template.json structure exactly
- No markdown, no extra text
Risk Model Rules
Risk levels are controlled enums. Typical levels: critical, high, medium, low.
Critical indicators (any one triggers critical):
overdue_balance > 0 and significant relative to ARR
lifecycle_status == "renewal_risk" and renewal date within 90 days of board date
- NPS ≤ 3 (detractor) and declining usage or high support volume
- Multiple severe factors simultaneously
High indicators:
overdue_balance > 0 but smaller relative to ARR
- NPS 4–6 (passive) combined with elevated support tickets or usage decline
- Renewal within 180 days with risk signals
Medium indicators:
- Moderate support volume without other severe signals
- Slight usage decline or missing NPS surveys
- Renewal within 365 days with minor concerns
Low indicators:
- Healthy NPS (≥ 7), stable usage, no overdue balance, low support volume
- Recent positive survey completions
Exact thresholds are task-specific. Use deterministic heuristics: start with the most severe condition that applies and do not downgrade unless the task explicitly overrides.
Action Assignment Rules
Controlled enum for primary_action:
| Action |
Trigger Condition |
collections_followup |
overdue_balance > 0 is the dominant reason |
technical_recovery |
Low usage, high support volume, or SLA compliance issues dominate |
renewal_save |
Renewal date near or lifecycle_status == "renewal_risk" dominates |
executive_qbr |
Strategic/Enterprise account with moderate risk; use when no more specific action applies to high-value accounts |
nurture_monitor |
Low risk, healthy metrics; monitor and maintain |
Priority: collections_followup > technical_recovery > renewal_save > executive_qbr > nurture_monitor. Assign the highest-priority action whose trigger condition is met.
Reason Codes
Common controlled reason codes to include in the reason_codes array:
overdue_receivable — when overdue_balance > 0
low_nps — when latest valid NPS is in detractor or passive range
high_support_volume — when support ticket count is elevated for the segment
declining_usage — when product_usage trend is negative over the period
renewal_at_risk — when renewal date is near or status is renewal_risk
missing_survey — when survey_status is missing for the latest month
sla_breach — when sla_compliance is below threshold
low_adoption — when active_seats or product_usage is low relative to plan
Include all reason codes that apply to the account; do not cap the array length.
Board Sort Code (Standard Retention Board Order)
- Primary:
risk_level in severity order (critical, high, medium, low)
- Secondary:
current_arr descending (highest ARR first within same risk level)
- Tertiary:
account_id ascending (for deterministic tie-breaking)
Data Precision Rules
- Currency values (
current_arr, expansion_pipeline, overdue_balance, arr_at_risk, etc.): exactly 2 decimal places
- Percentages: 1 decimal place if any are included in output
- Counts (
strategic_accounts, enterprise_accounts, rank, ticket counts, seat counts): integers
- Dates:
YYYY-MM-DD format
- Enum values: exact controlled strings (lowercase with underscores)
Pitfalls & Edge Cases
- Null NPS scores: Treat
null / missing NPS as a risk signal (include missing_survey reason). Do not assume 0.
- Retracted NPS: Always filter out responses where
retracted: true before computing latest/average NPS.
- ARR source mismatch:
billing_arr_current and crm_arr can differ. Use billing_arr_current unless the task explicitly asks to reconcile with billing snapshots.
- Opportunity state vs stage: Only
state == "open" opportunities count toward expansion_pipeline, regardless of stage.
- Close date filtering: Opportunities must have
close_date within the activity period (inclusive) to be included.
- A/R aging as-of date: Use the exact board date provided in the prompt, not the period end date.
- Metrics month alignment: Monthly metrics use
YYYY-MM identifiers. Ensure the correct months are selected for the period.
- Overdue balance precision: Sum all
amount values from A/R aging where days_overdue > 0 as of the board date.
- Empty boards: If no accounts meet inclusion criteria, emit an empty
action_board array with zeros in segment_summary and the provided follow-up dates.
- Endpoint availability: Some endpoints (
billing_snapshots, ar_aging, support_tickets) may intermittently return not_found. Retry the account-scoped form (/api/accounts/{id}/...) if the top-level form fails, and vice versa.
Policy Code Selection Guide
The answer template requires selecting one code from each pipe-separated option set. Typical mapping:
risk_model_code: Map to the primary risk heuristic used (e.g., multi-factor with ARR-weighting, NPS-first, etc.)
arr_source_code: Map to whether billing_arr_current, crm_arr, or reconciled billing snapshot ARR was used
support_hygiene_code: Map to whether support health was evaluated by ticket count, SLA compliance, or open ticket status
action_priority_code: Map to the action priority ordering applied
board_sort_code: Map to the sort keys used (risk + ARR + account_id)
exposure_formula_code: Map to how net_revenue_exposure was computed
calendar_policy_code: Map to whether follow-up dates were taken directly from the prompt or adjusted
Selection rule: Choose the code that corresponds to the actual method used. If uncertain, prefer the most conservative/default option in the set.
Example Output Structure
{
"action_board": [
{
"rank": 1,
"account_id": "acct_example",
"risk_level": "critical",
"primary_action": "collections_followup",
"current_arr": 1150000.00,
"expansion_pipeline": 0.00,
"overdue_balance": 125000.00,
"next_touch_due_date": "2026-07-15",
"reason_codes": ["overdue_receivable", "renewal_at_risk"]
}
],
"segment_summary": {
"strategic_accounts": 2,
"enterprise_accounts": 3,
"arr_at_risk": 2500000.00,
"open_expansion_pipeline": 500000.00,
"net_revenue_exposure": 3000000.00
},
"followup_calendar": {
"collections_followup": "2026-07-15",
"technical_recovery": "2026-07-18",
"renewal_save": "2026-07-22",
"executive_qbr": "2026-07-29",
"nurture_monitor": "2026-08-05"
},
"policy_codes": {
"risk_model_code": "RS-6",
"arr_source_code": "REV-1",
"support_hygiene_code": "SUP-3",
"action_priority_code": "ACT-1",
"board_sort_code": "BORD-1",
"exposure_formula_code": "EXP-2",
"calendar_policy_code": "CAL-3"
}
}
1---2name: self-attempt-03-303description: ApexCloud Retention Operations Board Skill4---5# ApexCloud Retention Operations Board Skill67## Overview89Build a high-touch retention action board by reconciling account profiles, billing snapshots, support health, NPS, receivables, product usage, and expansion opportunities from the ApexCloud Retention Operations API.1011## API Base URL1213Read `environment_access.md` in the solver directory and use `GDPEVO_ENV_BASE_URL` as the operative API base URL. Do not hard-code `localhost` or `127.0.0.1`. The task text may mention a local URL; always override with the environment variable.1415## Known Endpoints1617| Endpoint | Method | Description |18|----------|--------|-------------|19| `/api/health` | GET | Service health and row counts of backing data files |20| `/api/accounts` | GET | List all account profiles (44 accounts) |21| `/api/accounts/{account_id}` | GET | Single account profile |22| `/api/opportunities` | GET | List all opportunities (114 records) |23| `/api/accounts/{account_id}/metrics` | GET | Monthly account metrics (12 months per account) |24| `/api/accounts/{account_id}/nps` | GET | NPS responses for an account (may also appear as `/api/accounts/{account_id}/nps_responses`) |25| `/api/accounts/{account_id}/billing_snapshots` | GET | Monthly billing data per account |26| `/api/accounts/{account_id}/ar_aging` | GET | A/R aging entries per account |27| `/api/accounts/{account_id}/support_tickets` | GET | Support tickets per account |2829> **Endpoint Discovery Note:** If a sub-endpoint returns `not_found`, also try the top-level form (e.g., `/api/billing_snapshots`, `/api/ar_aging`, `/api/nps_responses`, `/api/support_tickets`). The API may expose data both ways.3031## Account Profile Fields3233Key fields from `/api/accounts` and `/api/accounts/{id}`:3435- `account_id` — stable identifier36- `display_name` / `legal_name` / `account_aliases`37- `segment` — `Strategic`, `Enterprise`, `Mid-Market`, `SMB`38- `region` — `North America`, `EMEA`, `APAC`, `LATAM`39- `product_plan` — e.g., `Enterprise`, `Scale`, `Strategic`, `Growth`40- `lifecycle_status` — `active`, `renewal_risk`, `implementation`, etc.41- `renewal_date` — ISO date string42- `contract_tenure_months` — integer43- `csm_owner` — assigned CSM name44- `billing_arr_current` — current ARR from billing system45- `crm_arr` — ARR recorded in CRM4647## Monthly Metrics Fields4849From `/api/accounts/{id}/metrics`:5051- `month` — `YYYY-MM`52- `quarter` — `YYYY-QN`53- `active_seats` — integer54- `product_usage` — percentage (0–100)55- `recognized_revenue` — currency56- `sla_compliance` — percentage57- `support_ticket_count` — integer58- `nps_score` — integer 0–10, or `null`59- `survey_status` — `completed` or `missing`6061## Opportunity Fields6263From `/api/opportunities`:6465- `opportunity_id`66- `account_id`67- `amount` — currency68- `close_date` — ISO date69- `created_date` — ISO date70- `stage` — e.g., `Discovery`, `Proposal`, `Prospecting`, `Closed Won`, `Closed Lost`71- `state` — `open` or `closed`72- `product_line`7374## NPS Response Fields7576From `/api/accounts/{id}/nps`:7778- `response_id`79- `score` — integer 0–1080- `response_date` — ISO date81- `survey_channel` — e.g., `email`, `csm_call`, `in_app`82- `retracted` — boolean; **exclude retracted responses from NPS calculations**8384## Workflow Steps85861. **Read task parameters**87 - Board as-of date (e.g., `2026-06-30`)88 - Activity period start and end dates89 - Month identifiers (e.g., `2026-04`, `2026-05`, `2026-06`)90 - List of `account_id`s to include91 - Follow-up due dates per action type92932. **Fetch account profiles**94 - `GET /api/accounts` and filter to the requested `account_id`s95 - Or call `GET /api/accounts/{id}` for each96973. **Fetch opportunities**98 - `GET /api/opportunities`99 - Filter to `state == "open"` and `close_date` within the activity period100 - Sum `amount` per account as `expansion_pipeline`1011024. **Fetch monthly metrics**103 - `GET /api/accounts/{id}/metrics`104 - Filter to months within the activity period105 - Aggregate: average `product_usage`, average `sla_compliance`, total `support_ticket_count`, latest `active_seats`, latest NPS (non-retracted)1061075. **Fetch NPS responses**108 - `GET /api/accounts/{id}/nps`109 - Filter out `retracted: true`110 - Compute latest NPS within or before the period if needed1111126. **Fetch billing & A/R data**113 - `GET /api/accounts/{id}/billing_snapshots` or `/api/billing_snapshots`114 - `GET /api/accounts/{id}/ar_aging` or `/api/ar_aging`115 - For A/R aging, sum amounts with `days_overdue > 0` as `overdue_balance` as of the board date116 - If the billing_snapshots endpoint is unavailable, fall back to `billing_arr_current` from the account profile for `current_arr`.1171187. **Fetch support tickets (if available)**119 - `GET /api/accounts/{id}/support_tickets` or `/api/support_tickets`120 - Count tickets created within the activity period, or with status `open` as of board date1211228. **Compute per-account board entries**123 - Determine `current_arr`: use `billing_arr_current` from the account profile as the primary source. If the task explicitly asks to reconcile with billing snapshots, fetch the latest billing snapshot for the period and use its `arr` field. If the two sources differ materially, prefer the billing snapshot ARR when the task uses the word "reconcile".124 - Determine `risk_level` based on heuristics (see Risk Model section)125 - Determine `primary_action` based on risk level and dominant reason (see Action Assignment section)126 - Compute `reason_codes` array127 - Set `next_touch_due_date` from the task-provided follow-up calendar128 - Compute `overdue_balance`: sum `amount` from all A/R aging entries for the account where `days_overdue > 0` as of the board date. If A/R aging is unavailable, set to `0.00`.129 - Compute `expansion_pipeline`: sum `amount` of all opportunities where `account_id` matches, `state == "open"`, and `close_date` falls within the activity period (inclusive).1301319. **Sort the action board**132 - Use the **standard retention board order**: sort primarily by `risk_level` severity (`critical` > `high` > `medium` > `low`), secondarily by `current_arr` descending, then by `account_id` ascending for stability133 - Assign `rank` sequentially starting at 113413510. **Compute segment summary**136 - `strategic_accounts`: count of accounts with `segment == "Strategic"`137 - `enterprise_accounts`: count of accounts with `segment == "Enterprise"`138 - `arr_at_risk`: sum of `current_arr` across all board accounts139 - `open_expansion_pipeline`: sum of `expansion_pipeline`140 - `net_revenue_exposure`: typically `arr_at_risk + open_expansion_pipeline` (confirm against task-specific formula if implied)14114211. **Populate follow-up calendar**143 - Use the exact dates provided in the task prompt for each action key14414512. **Select policy codes**146 - The answer template shows pipe-separated options like `RS-2|RS-6|RS-9`147 - Select **one** code from each option set based on the risk model, ARR source, support hygiene, action priority, board sort, exposure formula, and calendar policy used148 - Document the rationale for the selected code in reasoning14915013. **Emit JSON only**151 - Output must match `answer_template.json` structure exactly152 - No markdown, no extra text153154## Risk Model Rules155156Risk levels are controlled enums. Typical levels: `critical`, `high`, `medium`, `low`.157158**Critical indicators (any one triggers critical):**159- `overdue_balance > 0` and significant relative to ARR160- `lifecycle_status == "renewal_risk"` and renewal date within 90 days of board date161- NPS ≤ 3 (detractor) and declining usage or high support volume162- Multiple severe factors simultaneously163164**High indicators:**165- `overdue_balance > 0` but smaller relative to ARR166- NPS 4–6 (passive) combined with elevated support tickets or usage decline167- Renewal within 180 days with risk signals168169**Medium indicators:**170- Moderate support volume without other severe signals171- Slight usage decline or missing NPS surveys172- Renewal within 365 days with minor concerns173174**Low indicators:**175- Healthy NPS (≥ 7), stable usage, no overdue balance, low support volume176- Recent positive survey completions177178> **Exact thresholds are task-specific.** Use deterministic heuristics: start with the most severe condition that applies and do not downgrade unless the task explicitly overrides.179180## Action Assignment Rules181182Controlled enum for `primary_action`:183184| Action | Trigger Condition |185|--------|-------------------|186| `collections_followup` | `overdue_balance > 0` is the dominant reason |187| `technical_recovery` | Low usage, high support volume, or SLA compliance issues dominate |188| `renewal_save` | Renewal date near or `lifecycle_status == "renewal_risk"` dominates |189| `executive_qbr` | Strategic/Enterprise account with moderate risk; use when no more specific action applies to high-value accounts |190| `nurture_monitor` | Low risk, healthy metrics; monitor and maintain |191192Priority: `collections_followup` > `technical_recovery` > `renewal_save` > `executive_qbr` > `nurture_monitor`. Assign the highest-priority action whose trigger condition is met.193194## Reason Codes195196Common controlled reason codes to include in the `reason_codes` array:197198- `overdue_receivable` — when `overdue_balance > 0`199- `low_nps` — when latest valid NPS is in detractor or passive range200- `high_support_volume` — when support ticket count is elevated for the segment201- `declining_usage` — when `product_usage` trend is negative over the period202- `renewal_at_risk` — when renewal date is near or status is `renewal_risk`203- `missing_survey` — when `survey_status` is `missing` for the latest month204- `sla_breach` — when `sla_compliance` is below threshold205- `low_adoption` — when `active_seats` or `product_usage` is low relative to plan206207Include all reason codes that apply to the account; do not cap the array length.208209## Board Sort Code (Standard Retention Board Order)2102111. Primary: `risk_level` in severity order (`critical`, `high`, `medium`, `low`)2122. Secondary: `current_arr` descending (highest ARR first within same risk level)2133. Tertiary: `account_id` ascending (for deterministic tie-breaking)214215## Data Precision Rules216217- Currency values (`current_arr`, `expansion_pipeline`, `overdue_balance`, `arr_at_risk`, etc.): exactly 2 decimal places218- Percentages: 1 decimal place if any are included in output219- Counts (`strategic_accounts`, `enterprise_accounts`, `rank`, ticket counts, seat counts): integers220- Dates: `YYYY-MM-DD` format221- Enum values: exact controlled strings (lowercase with underscores)222223## Pitfalls & Edge Cases224225- **Null NPS scores:** Treat `null` / missing NPS as a risk signal (include `missing_survey` reason). Do not assume 0.226- **Retracted NPS:** Always filter out responses where `retracted: true` before computing latest/average NPS.227- **ARR source mismatch:** `billing_arr_current` and `crm_arr` can differ. Use `billing_arr_current` unless the task explicitly asks to reconcile with billing snapshots.228- **Opportunity state vs stage:** Only `state == "open"` opportunities count toward `expansion_pipeline`, regardless of `stage`.229- **Close date filtering:** Opportunities must have `close_date` within the activity period (inclusive) to be included.230- **A/R aging as-of date:** Use the exact board date provided in the prompt, not the period end date.231- **Metrics month alignment:** Monthly metrics use `YYYY-MM` identifiers. Ensure the correct months are selected for the period.232- **Overdue balance precision:** Sum all `amount` values from A/R aging where `days_overdue > 0` as of the board date.233- **Empty boards:** If no accounts meet inclusion criteria, emit an empty `action_board` array with zeros in `segment_summary` and the provided follow-up dates.234- **Endpoint availability:** Some endpoints (`billing_snapshots`, `ar_aging`, `support_tickets`) may intermittently return `not_found`. Retry the account-scoped form (`/api/accounts/{id}/...`) if the top-level form fails, and vice versa.235236## Policy Code Selection Guide237238The answer template requires selecting one code from each pipe-separated option set. Typical mapping:239240- `risk_model_code`: Map to the primary risk heuristic used (e.g., multi-factor with ARR-weighting, NPS-first, etc.)241- `arr_source_code`: Map to whether `billing_arr_current`, `crm_arr`, or reconciled billing snapshot ARR was used242- `support_hygiene_code`: Map to whether support health was evaluated by ticket count, SLA compliance, or open ticket status243- `action_priority_code`: Map to the action priority ordering applied244- `board_sort_code`: Map to the sort keys used (risk + ARR + account_id)245- `exposure_formula_code`: Map to how `net_revenue_exposure` was computed246- `calendar_policy_code`: Map to whether follow-up dates were taken directly from the prompt or adjusted247248> **Selection rule:** Choose the code that corresponds to the actual method used. If uncertain, prefer the most conservative/default option in the set.249250## Example Output Structure251252```json253{254 "action_board": [255 {256 "rank": 1,257 "account_id": "acct_example",258 "risk_level": "critical",259 "primary_action": "collections_followup",260 "current_arr": 1150000.00,261 "expansion_pipeline": 0.00,262 "overdue_balance": 125000.00,263 "next_touch_due_date": "2026-07-15",264 "reason_codes": ["overdue_receivable", "renewal_at_risk"]265 }266 ],267 "segment_summary": {268 "strategic_accounts": 2,269 "enterprise_accounts": 3,270 "arr_at_risk": 2500000.00,271 "open_expansion_pipeline": 500000.00,272 "net_revenue_exposure": 3000000.00273 },274 "followup_calendar": {275 "collections_followup": "2026-07-15",276 "technical_recovery": "2026-07-18",277 "renewal_save": "2026-07-22",278 "executive_qbr": "2026-07-29",279 "nurture_monitor": "2026-08-05"280 },281 "policy_codes": {282 "risk_model_code": "RS-6",283 "arr_source_code": "REV-1",284 "support_hygiene_code": "SUP-3",285 "action_priority_code": "ACT-1",286 "board_sort_code": "BORD-1",287 "exposure_formula_code": "EXP-2",288 "calendar_policy_code": "CAL-3"289 }290}291```