---
name: business-profitability-planning
description: Model contribution after direct costs and marketing, break-even targets and explicit what-if scenarios for ecommerce, lead generation or SaaS. Use when data is missing, partial, or available for forward planning. Keep historical reporting, cash and forecasts separate; does not execute campaigns or certify net business profit.
metadata:
  version: "1.0.0"
---

# Business profitability planning

Select the active client Workspace and read live Workspace Context, tenant bindings, financial definitions, evidence and authority. This neutral Skill supplies no client facts. The OLLIE Operator and bootstrapper Runtime Contract own permissions, scheduling and completion. Consume ask-ollie-authority-core for authority, outloop-access-fallback for resource verification and recovery, and email-lifecycle-core for external delivery. Do not install runtime owners, activate schedules or change ad budgets through this Skill.

## Select the basis

- No actual data: use explicitly labelled assumptions; defaults are synthetic examples, not benchmarks.
- Partial data: retain each observed/client-reported input and record each missing assumption separately.
- Observed data: use reconciled source snapshots as inputs; a forecast derived from them is still a scenario.
- Historical aggregates/cohorts: use cross-channel-performance-reporting first. Never populate historical verified-cost fields with estimates. Read [cohort handoff](references/cohort-handoff.md) before reusing a window.

Ask for material missing facts when needed, or show a bounded labelled assumption. Unknown values are not zero. Record source, evidence kind, period/window, currency, tax basis and included costs for every required value. Keep data and output in the client's Workspace, never in Global Skills or another client's context.

## Calculate and inspect

Read [the calculation contract](references/calculation-contract.md), choose the relevant model and use its template. Requires a supported shell with Node.js 18+; no external dependencies. Check the active engine, not a website claim. Outloop-started Claude Code runs without a shell cannot execute these scripts. Use an authorized supported runtime or verified artifacts; never substitute invented arithmetic.

```sh
node --test scripts/profitability.test.mjs
node scripts/run.mjs templates/ecommerce.json NEW_PRIVATE_OUTPUT_DIRECTORY
```

Use `templates/leads.json` or `templates/saas.json` for those models. Read report.html, report.json, scenarios.csv and input.json. Verify findings against source evidence, mappings, sums, period basis and scenarios; narrative is a separate interpretation of computed output. The engine returns incomplete on invalid input. Inspect every issue before reporting results.

## Explain the decision

Lead with contribution after direct costs and marketing, before Opex. Show the revenue/direct-cost/marketing bridge, break-even target, baseline/downside/upside, sensitivity and evidence ledger. Explain which costs are excluded. Positive contribution is not proof of net profit, causal marketing lift, liquidity or permission to scale. Fixed direct costs in itemized mode require scenario overrides when volume changes. Sensitivity holds other inputs fixed; it is not an elasticity model.

Do not label total business revenue/media as attributed ROAS. Do not call revenue less media ROMI. Do not multiply cohort lifetime value into calendar-month profit. Do not apply churn twice to observed MRR. Separate monthly cash from cohort value and recurring run-rate. See the contract for unsupported targets and null ratios.

When appropriate, ask OLLIE to compare the next actual report with the saved, timestamped scenario. Preserve both versions and explain deviations. Existing Routines may schedule authorized drafts; this Skill does not create its own scheduler. Client delivery follows the live Workspace policy and explicit authorization.
