{
  "schema": "leumas.docs.page/1",
  "id": "adapter:domain/offer-calculator",
  "slug": "adapters/domain/offer-calculator",
  "kind": "capabilities",
  "bucket": "package",
  "title": "offer-calculator",
  "name": "Offer Calculator",
  "eyebrow": null,
  "chip": null,
  "summary": "Job offer, compensation and total-comp capability pack for recruiters, hiring managers and candidates negotiating salary: compute total compensation (totalComp) from base salary, target bonus...",
  "keywords": [
    "offer-calculator",
    "compensation",
    "salary",
    "totalcomp",
    "equity",
    "vesting",
    "cliff",
    "annualized"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "# offer-calculator\n\nJob offer & compensation intelligence pack. Deterministic comp math for recruiters, hiring managers\nand candidates, with an optional AI negotiation-advice layer that activates only when a model is\nreachable (and silently falls back to the heuristic core otherwise).\n\n**Not financial, tax or legal advice.** Cost-of-living and band figures are estimates for negotiation\nframing.\n\n## Tools\n\n| Tool | Args | Does |\n|---|---|---|\n| `totalComp` | `{base, bonus, equity, benefits, options?}` | Sum annual comp; `bonus`/`equity`/`benefits` accept numbers or objects (`{percent}`, `{shares,price,vesting}`, `{health:…}`). `options.advise:true` adds AI tips when a model is up. |\n| `equityValue` | `{shares, price, vesting}` | Value a grant; `vesting` is years or `{years,cliffMonths,frequency}`. Returns per-year/per-month + a vesting schedule. |\n| `compBand` | `{role, level, options?}` | Salary range for a role at a level (intern→director). `options.city` returns a COL-adjusted band too. |\n| `colAdjust` | `{salary, fromCity, toCity}` | Cost-of-living-equivalent salary between two cities + purchasing-power ratio. |\n| `compare` | `{offers:[…], options?}` | Rank 2+ offers by total comp; `options.baselineCity` ranks by COL-adjusted comp; `options.advise` adds an AI recommendation. |\n| `listCities` | `{}` | The built-in COL index (100 = US national average). |\n| `listRoles` | `{}` | The known role bands + the level-multiplier ladder. |\n\nEvery result of a tool with an AI path is tagged `{ mode: 'heuristic' | 'llm' }`.\n\n## Example\n\n```js\nimport pack from './index.js';\nawait pack.adapters.totalComp({ base: 150000, bonus: { percent: 15 }, equity: { shares: 4000, price: 40, vesting: 4 }, benefits: { health: 12000 } });\n// { mode:'heuristic', base:150000, bonus:22500, equityAnnualized:40000, benefits:12000, cashComp:172500, totalComp:224500, breakdown:{…} }\n\nawait pack.adapters.colAdjust({ salary: 150000, fromCity: 'austin', toCity: 'san francisco' });\n// equivalentSalary ≈ 242017, deltaPct, purchasingPowerRatio, verdict\n```\n\n## DRY boundaries\n\n- **`numbers`** owns generic scalar math and unit conversion; **`finance`** owns NPV/loan/interest;\n  **`tax`** owns income-tax withholding. This pack does compensation-domain *composition* (band lookup,\n  offer comparison, cost-of-living relocation) that none of those own.\n- Self-contained: the only cross-pack import is `../_shared/llm.js` for the optional AI layer.\n\n## Hybrid intelligence\n\nDeterministic cores run offline with no model. `totalComp` and `compare` accept `options.advise:true`\nto request LLM-generated negotiation advice; if no model is configured/reachable they return the exact\nsame numbers with `mode:'heuristic'`. A down model never throws.\n",
  "source": {
    "path": "shared/engines/adapters/domain/offer-calculator/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 2939,
    "hash": "dc6ac2c26b41e70805d8e2a310db6a79c19ab944"
  },
  "urls": {
    "html": "/p/adapters/domain/offer-calculator",
    "json": "/docs/adapters/domain/offer-calculator.json",
    "md": "/docs/adapters/domain/offer-calculator.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  }
}
