diff --git a/components/control/PaymentsModePanel.tsx b/components/control/PaymentsModePanel.tsx
index 8539834..de4cc5b 100644
--- a/components/control/PaymentsModePanel.tsx
+++ b/components/control/PaymentsModePanel.tsx
@@ -1,6 +1,8 @@
import { getTranslations } from "next-intl/server";
import { eur } from "@/lib/format";
import {
+ COMMISSION_FLOOR_CENTS,
+ COMMISSION_MODE_SAVING_CENTS,
ONLINE_PAYMENTS_PRICE_CENTS,
crossoverCentsPerMonth,
formatCommissionPercent,
@@ -69,7 +71,10 @@ export default async function PaymentsModePanel({
// `effectivePaymentsMode` itself falls back to the intent when the registry
// cannot be read at all, so this can never disagree with `effective.mode`.
const effectiveBps = registryReadable ? (registryTenant?.payments_commission_bps ?? 0) : billingBps;
- const crossover = crossoverCentsPerMonth(effectiveBps, ONLINE_PAYMENTS_PRICE_CENTS);
+ // No price argument: the break-even is driven by what `commission` SAVES on
+ // the module (€19 - €9 = €10), never by its full list price — the default
+ // (COMMISSION_MODE_SAVING_CENTS) is the only basis that is ever correct here.
+ const crossover = crossoverCentsPerMonth(effectiveBps);
const eligibility = commissionEligibility({ registryReadable, tenant: registryTenant });
return (
@@ -77,8 +82,11 @@ export default async function PaymentsModePanel({
{effective.mode === "commission"
- ? t("commissionSummary", { percent: formatCommissionPercent(effectiveBps) })
- : t("flatSummary")}
+ ? t("commissionSummary", {
+ percent: formatCommissionPercent(effectiveBps),
+ floor: eur(COMMISSION_FLOOR_CENTS),
+ })
+ : t("flatSummary", { price: eur(ONLINE_PAYMENTS_PRICE_CENTS) })}