QRIS Plus — Variable Cost Analysis
Working document to differentiate costs that scale with volume (per merchant onboarded / per active merchant per period / per transaction) from fixed team & office OpEx. Inputs from:
qrisplus-device-landed-cost-estimation.md— device COGSqrisplus-selling-strategy-analysis.md— Option C subscription model, baseline OpEx, sales rep commission
Goal: answer "what is Kesles's incremental cost for each additional merchant / transaction" — input to break-even, contribution margin, payback, and unit economics in the Growth Projection panel.
Scope: final business model = Subscription Service (Option C), all numbers aligned with the locked baseline (Tier 2 Regular, PKP, Form D).
1. Cost Classification: Variable vs Fixed
| Category | Nature | Counted as VC? | Notes |
|---|---|---|---|
| Device COGS + landed cost | Per merchant onboarded | ✅ | Year 1 expense at activation (Option C) |
| Actual shipping to merchant | Per merchant onboarded | ✅ | Tier 1/2/3 → blended weighted avg |
| Activation kit (cable, QR sticker, manual, box) | Per merchant onboarded | ✅ | Conservative estimate Rp 25k/unit |
| Sales rep upfront commission (Model D) | Per merchant acquired via rep | ✅ | 40% Year 1 penetration (see strategy §4.2) |
| Sales rep trailing commission (5% × daily fee × 6 mo) | Per active merchant Y1 | ✅ | Only merchants who came in via rep |
| IoT GSM data plan device | Per active merchant/month | ✅ | M2M SIM from Telkomsel/Indosat |
| Marginal cloud/compute per merchant | Per active merchant/month | ✅ | Proportional to API calls + DB writes |
| Push notification gateway | Per transaction | ✅ | FCM free + ~1% SMS fallback |
| Device replacement reserve | Per active merchant/yr | ✅ | 3% × COGS/yr — revisit after Y1 |
| Marginal CS cost (per ticket) | Per active merchant/yr | ✅ | ~0.5 ticket × Rp 5,000/ticket |
| MDR pass-through to bank | Pass-through (revenue, not cost) | ❌ | 0.3% received, not paid |
| OpEx 5-person team (HR Rp 378M/yr) | Step-fixed | ❌ | Steps up when scaling to Y2/Y3 |
| Office & warehouse Makassar | Fixed | ❌ | Rp 54M/yr |
| Marketing & sales budget | Fixed (semi) | ❌ | Rp 80M/yr Y1 |
| Tech infra + SaaS tools (base) | Fixed (semi) | ❌ | Rp 54M/yr — only excess above baseline is variable |
| Professional fees (accountant/legal) | Fixed | ❌ | Rp 48M/yr |
| Compliance & licensing | Fixed | ❌ | Rp 12M/yr |
2. Variable Cost Per Merchant — Onboarding (One-Time)
| Component | Source | Rp/merchant |
|---|---|---|
| Device COGS | landed cost §3.1 | 732,978 |
| Actual shipping (Y1 blended: 70%/25%/5%) | strategy §3.4 | 70,000 |
| Activation kit (cable, QR sticker, manual, box) | estimate | 25,000 |
| Sales rep upfront commission (40% acquired via rep × Rp 100k) | strategy §4.2 | 40,000 |
| Total VC onboarding/merchant | Rp 867,978 |
Sensitivity:
- Pure baseline without sales rep: Rp 827,978
- Full sales rep penetration (100%): Rp 957,978
- Tier 3 Far (actual shipping Rp 200k): Rp 997,978
3. Variable Cost Per Active Merchant Per Year (Recurring)
Assumes 255 billable days/year (op_days 300 × active_base 85%) — aligned with strategy §2.
| Component | Calculation | Rp/merchant/year |
|---|---|---|
| IoT GSM data plan (~Rp 3,000/month, M2M plan) | 3,000 × 12 | 36,000 |
| Marginal cloud/compute (~Rp 1,500/month) | 1,500 × 12 | 18,000 |
| Push notification gateway (FCM free + 1% SMS fallback × Rp 350) | 0.01 × 350 × 255 | ~893 |
| Device replacement reserve (3% × COGS) | 0.03 × 732,978 | 21,989 |
| Marginal CS cost (~0.5 ticket/yr × Rp 5,000) | estimate | 2,500 |
| Sales rep trailing commission (5% × Rp 1,802 × 180 days × 40% via rep) | Y1 only | 6,487 |
| Total recurring VC/merchant/year (Y1) | Rp 85,869 | |
| Y2+ (no trailing rep, only first 6 months) | Rp 79,382 |
4. Variable Cost Per Transaction
Per merchant ~255 transactions/year (1 txn/billable day).
| Component | Rp/txn |
|---|---|
| Compute (DB write + webhook + audit log) | ~5 |
| Push notification (FCM amortized + 1% SMS fallback) | ~3 |
| Settlement reconciliation ops | ~2 |
| VC per transaction | ~Rp 10 |
Per merchant per year via VC/txn route: 255 × Rp 10 = Rp 2,550 — already subsumed in Cloud/compute + Push notification in §3 (avoid double-counting).
5. Lifetime Variable Cost Per Merchant (5 Years)
Assumption: 1 new merchant in Year 1, churn rate 20%/yr → expected active years ≈ 3.36 years.
| Year | Active prob | VC onboard | VC recurring/yr | VC this year | Cumulative VC |
|---|---|---|---|---|---|
| Y1 | 1.00 | 867,978 | 85,869 | 953,847 | 953,847 |
| Y2 | 0.80 | — | 79,382 | 63,506 | 1,017,353 |
| Y3 | 0.64 | — | 79,382 | 50,805 | 1,068,158 |
| Y4 | 0.51 | — | 79,382 | 40,485 | 1,108,643 |
| Y5 | 0.41 | — | 79,382 | 32,547 | 1,141,190 |
Lifetime VC per merchant (probability-weighted): Rp ~1,141,190
6. Variable Cost vs Revenue (Contribution Margin)
| Metric | Per merchant lifetime | Source |
|---|---|---|
| Lifetime revenue ex-VAT (Tier 2) | 5,954,205 | strategy §2.1 |
| Lifetime variable cost | (1,141,190) | §5 |
| Contribution margin per merchant | Rp 4,813,015 | |
| Contribution margin % | 80.8% |
VC ratio against lifetime revenue: ~19.2% — healthy for subscription fintech (benchmark <30%).
Definition: Contribution margin = revenue − variable cost. This delta is what is available to cover fixed OpEx + profit.
7. Break-Even Analysis (Fixed OpEx Coverage)
Year 1 baseline fixed OpEx: Rp 654,000,000 (strategy §3.4).
Average contribution margin per active merchant per year (steady state, Y2+):
- Daily fee revenue: 255 × Rp 1,802 = Rp 459,510
- MDR share: 255 × Rp 2,550 = Rp 650,250
- Total recurring revenue/yr: Rp 1,109,760
- Recurring variable cost/yr: Rp 79,382
- CM/active merchant/yr: Rp 1,030,378
Break-even active base = Rp 654,000,000 ÷ Rp 1,030,378 ≈ 635 active merchants
Compare with the trajectory:
- Y1 avgActive 128 → not yet break-even (as expected, Y1 loss ~Rp 614M)
- Y2 avgActive 550 → near break-even (small deficit)
- Y3 avgActive 1,700 → comfortably break-even (significant surplus)
Aligned with strategy §3.4 projection ("starts breakeven Year 3").
8. 5-Year Aggregate Variable Cost (Panel Projection)
Using cumulative new onboarded 10,000 merchants + panel active base (strategy §3.2):
| Year | New | avgActive | VC Onboard (new × 867,978) | VC Recurring (avgActive × ~85k) | Total VC/year |
|---|---|---|---|---|---|
| Y1 | 300 | 128 | 260,393,400 | 10,991,232 | 271,384,632 |
| Y2 | 700 | 550 | 607,584,600 | 43,660,100 | 651,244,700 |
| Y3 | 2,000 | 1,700 | 1,735,956,000 | 134,949,400 | 1,870,905,400 |
| Y4 | 3,000 | 3,900 | 2,603,934,000 | 309,589,800 | 2,913,523,800 |
| Y5 | 4,000 | 6,800 | 3,471,912,000 | 539,797,600 | 4,011,709,600 |
| 5Y Cum | 10,000 | — | 8,679,780,000 | 1,038,988,132 | ~Rp 9.72 B |
5Y VC ratio against Revenue (~Rp 13.8 B from strategy §3.2): ~70.4%.
⚠️ Why is the aggregate VC ratio (70%) much higher than the per-merchant lifetime ratio (19%)?
- Most new merchants have limited earning time before the Y5 cut-off — Y4-Y5 onboards only earn 1-2 years
- Device COGS is fully expensed at onboard (Y1 burden), revenue is spread until churn (3.36 expected years)
- The 5Y aggregate captures the investment-heavy period; the per-merchant lifetime captures steady-state unit economics
- Decision rule: for margin/profitability, use per-merchant lifetime. For cashflow/funding, use the 5Y aggregate.
9. Sensitivity — Stress Test Scenarios
| Scenario | VC onboard/merchant | VC recurring/yr | CM/merchant lifetime | CM% |
|---|---|---|---|---|
| Baseline | 867,978 | 79,382 | 4,813,015 | 80.8% |
| COGS +20% (FX/landed cost) | 1,014,574 | 79,382 | 4,666,419 | 78.4% |
| IoT data 2× (Rp 6k/month) | 867,978 | 115,382 | 4,693,915 | 78.8% |
| Replacement rate 5% (vs 3%) | 867,978 | 94,041 | 4,763,795 | 80.0% |
| Sales rep penetration 100% | 957,978 | 95,604 | 4,668,029 | 78.4% |
| Worst case (combined +20% COGS + 5% repl + 100% rep) | 1,104,574 | 110,263 | 4,422,687 | 74.3% |
Even in the worst case, CM% remains >74% — the subscription model is resilient against variability of the major cost drivers.
10. Assumptions to Validate
- IoT GSM data plan rate Telkomsel/Indosat M2M → written quote (currently Rp 3k/month conservative estimate; could be as low as Rp 1.5k for 50MB/month plan)
- Cloud cost per merchant → derive from actual GCP/AWS billing after 1,000 active merchants. Currently Rp 18k/yr estimate
- Replacement rate 3%/yr → revisit after Y1 warranty claim data. Plausible range 1–5% depending on Coherent Plus quality
- Sales rep penetration 40% Y1 → tracking via
partner.partner_reps(live in db_kesles_merchant_partner); commission tracking table not yet implemented - Push notification fallback rate 1% SMS → check actual FCM delivery rate after notification flow implementation
- Activation kit Rp 25k/unit → quote from a Makassar packaging vendor (USB-C cable, vinyl QR sticker, A5 4-page manual, carton box)
- CS ticket rate 0.5/merchant/yr → measure after 6 months of ops from helpdesk logs
11. Implications for the Growth Projection Panel
The existing panel does not yet have a Variable Cost field — all costs are assumed to fall under Unit Cost + Landed Cost (COGS) or OpEx (fixed).
11.1 Panel enhancement recommendations (future work)
Add input fields:
variable_cost_recurring_per_merchant_yr— default 79,382 (or break down to 4 sub-fields: data, cloud, replacement, CS)activation_kit_cost_per_merchant— default 25,000sales_rep_penetration_pct— default 40sales_rep_upfront_per_merchant— default 100,000
Add computed outputs:
contribution_margin_per_merchant_lifetimecontribution_margin_pctbreakeven_active_base(= fixed OpEx ÷ CM/active merchant/yr)
11.2 In the meantime (before panel is updated)
Use the cumulative VC from §8 as a sanity check against the panel aggregate output. If the panel Total Revenue is higher than Total VC + Total OpEx → consistent with the profitability projection.
12. References
- Selling strategy & business model:
qrisplus-selling-strategy-analysis.md - COGS & landed cost:
qrisplus-device-landed-cost-estimation.md - Smart financial review (per-merchant cost analysis):
smart-financial-review-formula.md - Merchant financial analytics:
merchant-financial-analytics-spec.md - Growth Projection panel:
report_growth_projection_panel.dart - partner_reps schema (live in db_kesles_merchant_partner, schema
partner); commission tracking table not yet implemented