Repository navigation
[Fee · #464 · Urgent] 6-Month Ownership Boundary + Retained-Only + Drop floor #508
Description
CEO lock — 2026-10-30 · 6-Month Ownership Boundary (final for Ryan)
Parent: #464 · Drop-Protection ops: #525 · Product: #520 · Copy: #515 / #512 · Hours: #459
Pitch (tutor-friendly)
MatchMax introduced you. For 6 months, new students from this centre or siblings from this parent stay under MatchMax’s intro window on a discounted ladder. After 6 months, the relationship is yours — we step away. New cases they give you are $0, off-platform, not required to be logged.
Traditional agencies claim the relationship forever. This cut-off is the USP.
CRITICAL legal / copy
Tutors = independent operators.
- USE: Platform Administrative Fee · Matching Fee · Independent Tutor
- NEVER: Employment Fee · Agency Deduction · MatchMax Employee
Parent/centre still pays the tutor’s rate; MatchMax fee = tutor’s owed slice of intro tuition.
1. 6-Month Ownership Boundary
Window opens on the first paid Regular Lesson 1 between tutor_id and centre_id or parent_id (not match date — see trigger section below) (B2C siblings / secondary household students).
| Phase | Rule |
|---|---|
| Day 0–180 | Any new student from that centre/parent = MatchMax case; retained-only ladder applies |
| Day 181+ | Window closed. New students from that centre/parent → not MatchMax cases; platform fee $0; no logging required |
Reject: lifetime tier counting. Reject: after 6 months reset to 1.5. Adopt: paid intro window, then ownership to the tutor.
2. Commission & Drop-Protection (inside 6 months only)
Let R = standard 1.0 full regular lesson fee.
| Secondary student (retained tier) | Base admin fee | Verified drop after L1 (no clear tutor fault) | Drop-Protection |
|---|---|---|---|
| 1st successful | 1.5 × R | 0.5 × R | Yes |
| 2nd successful | 1.0 × R | 0.5 × R | Yes |
| 3rd successful | 0.5 × R | 0.5 × R | No — already at platform minimum floor |
| 4th+ inside window | $0 | $0 | N/A |
| Any after day 181 | $0 / not a MatchMax case | — | — |
Floor: final = MAX(0.5×R, standard_base_fee × 0.5) → Tier 3 never goes to 0.25.
First private student for a new parent (primary match) stays the normal 1.5 case (#520). This ladder is for secondary cases (centre assignments + parent siblings) inside the window.
Ops (#525): ask why once; no tutor double-confirm by default; no parent refund; clear fault voids protection while a fee is due.
3. Retained-Only tier progression
Increment tier only when a case passes Lesson 2.
DROPPED_AFTER_L1_VERIFIED does not advance tier.
Example: Tier 1 case drops after L1 → collect 0.5×R. Next student from same centre/parent (still in window) is still Tier 1 (1.5×R) until one case is retained past L2.
4. Backend
Schema
intro_window_start_date— timestamp of first paid L1 tutor↔centre or tutor↔parent (null until L1 completes)secondary_tier_applied— 1 | 2 | 3 | 4+- Drop fields aligned with [Fee · #464 · Urgent] First-lesson drop protection + trial/discount badges #520 / [Fee · #520 follow-up] Drop-Protection full rules: centre cases, tutor-fault void, same-client ladder, no extra form #525
Engine
- Resolve counterparty (
centre_idorparent_id) - If
now > intro_window_start + 180d→ fee $0 / flagOFF_PLATFORM_OWNED(do not require logging) - Else count retained matches only (
drop_verification != DROPPED_AFTER_L1_VERIFIEDorlessons_completed >= 2) → tier 1.5 / 1.0 / 0.5 / 0 - On verified L1 drop → apply floor rule above
- Clear tutor-fault / bypass → void Drop-Protection ([Fee · #520 follow-up] Drop-Protection full rules: centre cases, tutor-fault void, same-client ladder, no extra form #525)
5. Admin UI (/admin/cases/[case_id])
Banner #E3ECF6, e.g.:
[ B2B Match: 2nd Student (Base Fee: 1.0) — 45 days left in Intro Window ][ B2C sibling: 1st secondary (Base Fee: 1.5) — … ][ Past intro window — Fee $0 · tutor-owned ]
Verify Drop modal: parent/centre confirm; Tier 1–2 → 0.5×R; Tier 3 stays 0.5×R + floor tooltip; tutor-fault void per #525.
CEO add — 2026-10-30 · Window trigger + dispatch filter (revenue)
1. Clock starts on first paid Lesson 1 (not match date)
intro_window_start_date = timestamp of first completed paid Regular Lesson 1 between that tutor_id and centre_id (same idea for parent_id secondary / sibling window).
| Edge case | What happens |
|---|---|
| Match rejected / cancelled / never taught L1 | Window never starts. Centre comes back later → new try → clock starts on that L1; charge full ladder from Tier 1 (1.5). |
| Taught L1, chemistry failed, Drop-Protection applied | Window started on that L1 date. Retained-Only: tier does not advance; days still count from that L1. |
| Had L1 ≥6 months ago, centre wants them again | Window closed. Fee would be $0 — do not re-dispatch (see filter below). |
Reject: starting the 180 days on match / intro / schedule date (delays would burn the window unpaid).
2. Dispatch filter — do not work for free (B2B centres)
MatchMax does not facilitate centre matches that generate $0.
- Search / AI / Tim-Austin shortlist: exclude any
tutor_idwherenow > first_paid_L1_with_that_centre + 180 days. - Centre asks for that expired tutor by name: do not set them up again. Reply pattern: you matched with [Name] in [Month]; agency window closed — contact them directly; here are 3 fresh tutors (new 1.5 possible).
- Admin manual assign past window → hard warning:
Out of Window: this tutor passed the 6-month mark with this centre on YYYY-MM-DD. Route a new tutor to earn a fee, or advise centre to contact them directly.
Why: centre already has the contact; we assume they tried them; shipping them again is free admin labor.
AC add
-
intro_window_start= first paid L1 only; pre-L1 reject never opens window - Centre suggest/assign excludes post-window tutors for that centre
- Named expired-tutor request → redirect direct + pitch fresh tutors (no free setup)
- Admin hard warning on past-window assign
Acceptance criteria
- 180-day window from first paid L1 tutor↔centre/parent; outside → $0, not a fee-generating MatchMax case, logging not required
- Inside window: retained-only ladder 1.5 / 1.0 / 0.5 / $0 (4th+)
- L1 Drop-Protection drops do not advance tier
- Admin shows tier, base fee, days left (or past-window)
- Tier 1–2 verified drop → 0.5×R; Tier 3 → stays 0.5×R
- Applies to B2B centres and B2C parent siblings (secondary cases)
- ToS / Guide / Help / [Ops · WA · #511] Business WhatsApp enquiry agent #512 match Ownership Boundary copy; Platform Administrative Fee only
- Aligned with [Fee · #520 follow-up] Drop-Protection full rules: centre cases, tutor-fault void, same-client ladder, no extra form #525 ops + [Fee · #464 · Urgent] First-lesson drop protection + trial/discount badges #520 product
Out of scope
Salary/shift track until EA licence · parent cash refund · V1 fine UI · materials (#521)
Activity
owlstonbusiness-svg commentedon Oct 28, 2026
Amendment — CEO 2026-10-28 (EA)
Hide / park Track B (long-term centre salary / shift · 10% of first 4 weeks) until MatchMax holds an Employment Agency (EA) licence.
/guide/tutors, Help Centre, or public FAQ.Update AC: remove salary-track from public surfaces until unparked.
[-][Fee · Track #464] B2B centre spin-off: 1.5 / 1 / 1 cap-3; private stays 1.5 each[/-][+][Fee · Track #464] B2B centre spin-off: 1.5 / 1 / 0.5 (max 3.0); private stays 1.5 each[/+]owlstonbusiness-svg commentedon Oct 28, 2026
Amendment — CEO 2026-10-28 (ladder)
Locked centre intro admin-fee ladder to 1.5 / 1 / 0.5 (then $0 on 4th+ within 6 months at the same centre).
owlstonbusiness-svg commentedon Oct 28, 2026
Refinement — CEO 2026-10-29 (fee framing + single SoT)
How to say the 1.5
Single fee-table SoT (do not drift)
Mirrors: ToS §15 · Fee Agreement · Guide tutors/partners · Help fee article · public FAQ (#515) · WA FOH (#512). PR #510 = website/copy slice — do not merge without CEO ask.
Ops note (Tatum-class)
Fee confusion → desk tag
BILLING-1.5(#514); restate framing; one-case goodwill only if CEO offers — do not rewrite the ladder.feat(#508): tutor-intake centre spin-off reportable note + fee-guide …
Merge PR #510: fee(#508): centre intro ladder 1.5 / 1 / 0.5 (max 3.0)
[-][Fee · Track #464] B2B centre spin-off: 1.5 / 1 / 0.5 (max 3.0); private stays 1.5 each[/-][+][Fee · #464] B2B centre spin-off fee (1.5 / 1 / 0.5)[/+]owlstonbusiness-svg commentedon Oct 29, 2026
Drop-Protection × this ladder → #526
Same-client 1.5 / 1 / 0.5 base rates stay. Drop-Protection (parent/centre verified drop after exactly one paid lesson) halves that case’s first-lesson fee only — does not cascade into later students’ base rates. Centre cases included. See #526.
owlstonbusiness-svg commentedon Oct 29, 2026
Drop-Protection × this ladder → use #525 (not #526). Same-client 1.5 / 1 / 0.5 base rates stay; protection only halves that case’s first paid lesson when verified. Always ask why once on stop.
owlstonbusiness-svg commentedon Oct 29, 2026
CEO add — 2026-10-29 · ToS §15 / Fee Agreement — Drop-Protection (#525)
When counsel updates ToS §15 + Fee Agreement for the centre ladder, also add First-Lesson Drop-Protection. Product/ops SoT: #520 + #525.
Counsel-ready outline (tighten $ / defined terms)
First-Lesson Drop-Protection. If, after exactly one paid lesson under a MatchMax introduction, the parent or partner centre confirms to MatchMax that the engagement will not continue, and MatchMax accepts that confirmation, the Platform Administrative Fee for that introduction is reduced to fifty percent (50%) of one standard lesson fee (
0.5 × R) for that case, instead of the full amount otherwise due for Lesson 1 (and Lesson 2 is not charged). The tutor retains the other fifty percent as compensation for the lesson delivered.Verification. Reduction applies only after MatchMax obtains confirmation from the parent or centre coordinator (written message sufficient). The tutor’s statement alone does not reduce the fee.
Tutor fault — no reduction. If the parent or centre states that the tutor was late, failed to attend, was rude or unprofessional, was wholly unprepared, or refused to teach the agreed subject (or MatchMax otherwise finds clear tutor fault or suspected/confirmed off-platform bypass), Drop-Protection does not apply and the fee for the first paid lesson remains due in full (
1.0 × Rfor that lesson, or full amount otherwise due under these Terms).Centre / same-client ladder. Where the stepped centre introduction fees in this §15 apply (1.5 / 1.0 / 0.5 / $0), Drop-Protection — if it applies — reduces only the fee for that student’s first paid lesson to half of the fee that would otherwise have been due for that lesson. It does not alter the base rate applicable to later students under the same introduction.
No new survey required. MatchMax may rely on the verification message; no separate feedback form is required for the fee decision.
Bypass / scare (already in #520): keep ban + fee owed + liquidated-damages deterrent; no V1 in-app fine UI. Parents are not fined.
AC add for #508
TERMS_VERSION/FEE_TERMS_VERSIONbump when this lands with the centre ladderPrivate household rule unchanged: full 1.5 per kid; Drop-Protection still per case on verified single-lesson drops.
owlstonbusiness-svg commentedon Oct 29, 2026
CEO lock — 2026-10-29 · ToS: no parent refund policy
ToS §15 / Fee Agreement / FAQ must not include any parent refund percentage for tutor fault or early stop.
Serious misconduct: MatchMax may terminate the tutor’s account and assist with a replacement introduction. No obligation to refund amounts the parent paid the tutor. Any goodwill = discretionary, not a contractual %.
Align with #525.
owlstonbusiness-svg commentedon Oct 29, 2026
CEO add — ToS: fee decision final on parent/centre verification (#525)
Fee reduction / void for first-lesson Drop-Protection is based on MatchMax’s verification with parent or centre. No contractual duty to obtain tutor confirmation before deciding. Tutor dispute does not reopen that case’s fee. Align with #525.
[-][Fee · #464] B2B centre spin-off fee (1.5 / 1 / 0.5)[/-][+][Fee · #464 · Urgent] B2B centre lifetime ladder + Retained-Only + Drop floor[/+]4 remaining items
owlstonbusiness-svg commentedon Oct 29, 2026
CEO clarify — 2026-10-30
Not “after 6 months restart at 1.5.”
Not “lifetime tier counting forever.”
Yes: 6-month paid intro (1.5→1→0.5→$0 on retained). After 6 months, centre internally gives that tutor more cases → we charge $0 (intro already done).
[-][Fee · #464 · Urgent] B2B: 6-month paid ladder then $0 ongoing[/-][+][Fee · #464 · Urgent] 6-Month Ownership Boundary + Retained-Only + Drop floor[/+]owlstonbusiness-svg commentedon Oct 29, 2026
Paste source locked 2026-10-30: 6-Month Ownership Boundary (centre and parent siblings); after day 181 tutor-owned / $0 / no log required; Retained-Only; Drop floor at Tier 3.
owlstonbusiness-svg commentedon Oct 29, 2026
CEO lock — first paid L1 clock + centre dispatch filter
owlstonbusiness-svg commentedon Oct 29, 2026
Shared SoT: Ownership Boundary rows live in Fee & Drop state machine #536.
feat(#537): Fee · Drop · Trust engine — #536 SoT, #520/#525 Drop-Prot…
Merge feat/537-fee-drop-trust: Fee · Drop · Trust engine (#536 #520 #525
feat(#508): ownership dispatch filter — desk shortlist excludes post-…
keyframesfound commentedon Oct 30, 2026
Shipped — dispatch filter + hard warning (
mainc61aef2, live)Closes the two open AC items on this issue:
How it works
match-dispatch.functions.ts—searchCaseTutorsForMatchresolves each search hit's first paid L1 with the case's counterparty (centreorganisation_id/ parentparent_id, the same column the [Fee] Shared Drop/Fee state machine SoT #536 fee engine'sloadPriorCasesreads, so both paths agree on history). Tutors past 180 d are dropped from the primary shortlist and returned flagged instead.matchCaseTutorre-checks server-side on assign. Past-window →needs_ackwith the exactOut of Window: …copy (outOfWindowWarning); only an explicitacknowledgeOutOfWindow: trueproceeds, and the override is written to the case audit ([#508 override] …).MatchFeePanel(desk case view) renders flagged tutors in a muted section with the warning inline and routes assignment through an Out of window dialog → Assign anyway. No counterparty on the case (first private match) → no filtering, normal 1.5.Window trigger rule already honoured: clock = first completed paid L1 only (
windowStartFrom/isPastOwnershipWindow), pre-L1 rejects never open it — verified inownership-window.ts+ tests.Also fixed while verifying:
tests/cases/fit-tags.test.ts(#528) andtests/academy/attendance.test.ts(#533) shipped with@/alias imports and had been failing to load on main — converted to the relative-only rule; full suite now 73 files / 1026 tests green.Still open on this issue: the centre-by-name reply pattern is ops/WA copy (#512 / #515) — not code.
feat(#508): out-of-window flag on board applications — flag, don't block
keyframesfound commentedon Oct 30, 2026
Follow-up per CEO decision (flag, don't block) —
main6145bf6: the staff Applications card now flags applicants whose 6-month window with this case's counterparty has closed (muted chip + window-close date + rationale tooltip). Approval stays allowed — the fee engine prices those matches at $0 (OWNERSHIP_EXPIRED) either way; the desk just sees it before green-lighting. Best-effort lookup, fail-open.content(#528): pre-L1 playbook + WA macros, end-L1 tutor help article…