Skip to content

[Fee · #464 · Urgent] 6-Month Ownership Boundary + Retained-Only + Drop floor #508

Closed

Description

@owlstonbusiness-svg

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

Engine

  1. Resolve counterparty (centre_id or parent_id)
  2. If now > intro_window_start + 180d → fee $0 / flag OFF_PLATFORM_OWNED (do not require logging)
  3. Else count retained matches only (drop_verification != DROPPED_AFTER_L1_VERIFIED or lessons_completed >= 2) → tier 1.5 / 1.0 / 0.5 / 0
  4. On verified L1 drop → apply floor rule above
  5. 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_id where now > 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

Out of scope

Salary/shift track until EA licence · parent cash refund · V1 fine UI · materials (#521)

Activity

  1. owlstonbusiness-svg commented on Oct 28, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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.

    • Do not put salary-track copy on ToS, Fee Agreement, /guide/tutors, Help Centre, or public FAQ.
    • Ship only: private = 1.5 each + B2B per-student centre ladder 1.5 / 1 / 1 · cap 3.
    • Ops may keep salary track in internal notes only; no product UI until EA is live.

    Update AC: remove salary-track from public surfaces until unparked.

  2. changed the title [-][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[/+] on Oct 28, 2026
  3. owlstonbusiness-svg commented on Oct 28, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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).

    • Supersedes earlier drafts of 1.5 / 1 / 1 (max ≈ 3.5) and 1.5 / 0.75 / 0.75.
    • Round numbers for Tim/Austin invoices; same max ≈ 3.0 lessons per centre intro.
    • Private (B2C) stays full 1.5 per enrolled student/case (no sibling discount).
    • Salary / shift “10% of first 4 weeks” track remains parked until EA licence (internal notes only).
  4. owlstonbusiness-svg commented on Oct 28, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    Refinement — CEO 2026-10-29 (fee framing + single SoT)

    How to say the 1.5

    Single fee-table SoT (do not drift)

    Track Fee
    Private (each student) 1.5 (tutor pays)
    Short ≤5 20% of package
    Centre intro (≤6 mo, same centre) 1.5 → 1.0 → 0.5 → $0
    Salary/shift 10% M1 Hidden until EA

    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.

  5. added 2 commits that reference this issue on Oct 29, 2026
  6. changed the title [-][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)[/+] on Oct 29, 2026
  7. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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.

  8. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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.

  9. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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 × R for 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

    Private household rule unchanged: full 1.5 per kid; Drop-Protection still per case on verified single-lesson drops.

  10. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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.

  11. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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.

  12. changed the title [-][Fee · #464] B2B centre spin-off fee (1.5 / 1 / 0.5)[/-] [+][Fee · #464 · Urgent] B2B centre lifetime ladder + Retained-Only + Drop floor[/+] on Oct 29, 2026
  13. 4 remaining items

  14. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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).

  15. changed the title [-][Fee · #464 · Urgent] B2B: 6-month paid ladder then $0 ongoing[/-] [+][Fee · #464 · Urgent] 6-Month Ownership Boundary + Retained-Only + Drop floor[/+] on Oct 29, 2026
  16. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    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.

  17. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    CEO lock — first paid L1 clock + centre dispatch filter

    • Window = 180 days from first paid Lesson 1 (not match date). Pre-L1 reject → clock never started.
    • Past window with that centre → do not re-ship that tutor on MatchMax (hide from suggest; named ask → “contact them directly” + pitch 3 fresh). Admin hard warning on manual assign.
  18. owlstonbusiness-svg commented on Oct 29, 2026

    @owlstonbusiness-svg
    CollaboratorAuthor

    Shared SoT: Ownership Boundary rows live in Fee & Drop state machine #536.

  19. added 3 commits that reference this issue on Oct 30, 2026
  20. keyframesfound commented on Oct 30, 2026

    @keyframesfound
    Owner

    Shipped — dispatch filter + hard warning (main c61aef2, live)

    Closes the two open AC items on this issue:

    • Centre suggest/assign excludes post-window tutors for that centre
    • Admin manual assign past window → hard warning with the verbatim copy

    How it works

    • match-dispatch.functions.ts — searchCaseTutorsForMatch resolves each search hit's first paid L1 with the case's counterparty (centre organisation_id / parent parent_id, the same column the [Fee] Shared Drop/Fee state machine SoT #536 fee engine's loadPriorCases reads, so both paths agree on history). Tutors past 180 d are dropped from the primary shortlist and returned flagged instead.
    • matchCaseTutor re-checks server-side on assign. Past-window → needs_ack with the exact Out of Window: … copy (outOfWindowWarning); only an explicit acknowledgeOutOfWindow: true proceeds, 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 in ownership-window.ts + tests.

    Also fixed while verifying: tests/cases/fit-tags.test.ts (#528) and tests/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.

  21. added a commit that references this issue on Oct 30, 2026
  22. keyframesfound commented on Oct 30, 2026

    @keyframesfound
    Owner

    Follow-up per CEO decision (flag, don't block) — main 6145bf6: 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.

  23. added a commit that references this issue on Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesturgentGood for newcomers

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions