71 lines
3.1 KiB
Markdown
71 lines
3.1 KiB
Markdown
# revenue-recovery-agent
|
|
|
|
A deterministic, dry-run A2A agent that identifies recoverable subscription revenue and prepares respectful, policy-compliant recovery actions without autonomously charging, refunding, changing subscriptions, sending messages, or updating CRM.
|
|
|
|
## Public skills
|
|
|
|
The Agent Card exposes exactly five typed skills:
|
|
|
|
1. `analyze_revenue_leakage` — ingests authorized billing/subscription/usage/CRM/support snapshots or deterministic synthetic fixtures, reconciles records, classifies leakage, estimates recoverable amount and confidence intervals, and writes `leakage.json`.
|
|
2. `prioritize_accounts` — prioritizes tokenized accounts by value, likelihood, customer risk, and policy blockers, and writes `prioritized-accounts.json`.
|
|
3. `propose_recovery` — prepares remediation recommendations and respectful message drafts, each with immutable plan digest and explicit approval boundary, and writes `recovery-plans.json`.
|
|
4. `validate_recovery` — validates plans against consent, suppression, jurisdiction, dispute, brand, and prohibited-action rules, and writes `compliance-report.json`.
|
|
5. `generate_campaign_pack` — generates an approval-ready campaign pack and measurement plan, and writes `campaign-pack.md` plus `measurement-plan.json`.
|
|
|
|
## Safety and policy boundary
|
|
|
|
- `dry_run=true` is enforced by schema validation.
|
|
- No LLM calls are made; caller LLM credentials are not required.
|
|
- No external HTTP calls are made. Egress is denied by default.
|
|
- Consumer integration setup fields are declared for future read-only adapters, but synthetic/provided snapshots are used by this implementation.
|
|
- All customer identifiers are tokenized; outputs must not include emails, phone numbers, card data, bank details, or raw CRM notes.
|
|
- Protected trait metadata keys are rejected.
|
|
- Prompt-injection-like and SSRF-like values are rejected or reported as critical safety findings.
|
|
- Any future external action must require `I_APPROVE_THE_LISTED_STEPS:<immutable_plan_digest>`; this version only prepares plans.
|
|
|
|
## Outputs
|
|
|
|
The agent persists redacted artifacts under:
|
|
|
|
```text
|
|
outputs/revenue-recovery/{run_id}/
|
|
```
|
|
|
|
The synthetic full workflow produces:
|
|
|
|
- `leakage.json`
|
|
- `prioritized-accounts.json`
|
|
- `recovery-plans.json`
|
|
- `compliance-report.json`
|
|
- `campaign-pack.md`
|
|
- `measurement-plan.json`
|
|
|
|
Individual skills write their own stage output; `generate_campaign_pack` runs the deterministic synthetic pipeline when intermediate inputs are not supplied and writes the campaign/measurement artifacts.
|
|
|
|
## Example smoke payload
|
|
|
|
```json
|
|
{
|
|
"request": {
|
|
"tenant_id": "tenant-acme",
|
|
"use_synthetic_data": true,
|
|
"policy": {"dry_run": true}
|
|
}
|
|
}
|
|
```
|
|
|
|
Call it against `analyze_revenue_leakage` or provide the analogous `request` object to any of the five skills.
|
|
|
|
## Tests
|
|
|
|
Focused tests cover:
|
|
|
|
- Agent Card skill/schema contract
|
|
- Reconciliation and duplicate-invoice double-count prevention
|
|
- Suppression and dispute blockers
|
|
- Confidence scoring bounds and intervals
|
|
- Fairness/privacy rejection of protected trait and malicious inputs
|
|
- SSRF-style endpoint blocking
|
|
- Idempotent deterministic analysis
|
|
- Synthetic campaign pack artifact generation
|