admin-mvp-1-pricing-base-override.html · model = Base + Override cascade (SubjectLevel ?? Subject ?? Base) · Stack: React 19 + TanStack Start (SPA) · shadcn amber b1MJ9vRwY6
FIX v2: has_levels (shape) ≠ applicability (Tingkat mana ditawarin) = 2 axis INDEPENDENT. Common case (pelajaran sekolah no-levels SD-SMA) sekarang tercover.
Axis 1 — has_levels (nentuin SHAPE matrix): subject punya tingkatan internal gak? · Axis 2 — Applicability (nentuin Tingkat mana ditawarin): subject buat jenjang apa? Dua-duanya bebas — no-levels BUKAN berarti adult-only.
| has_levels = TRUE (Type A · row=Level) | has_levels = FALSE (Type B · row=Segmentasi) | |
|---|---|---|
| Applies SD-SMA |
Mandarin (HSK 1-6), Piano (Grade 1-8), English (CEFR) les bertingkat buat anak sekolah |
PALING COMMON Matematika, Biologi, Fisika, Kimia, B.Indonesia, B.Inggris-sekolah mapel sekolah reguler — no level internal, ikut Tingkat sekolah (SD 1 - SMA 12) |
| Applies Umum/Prof |
English CEFR buat profesional, sertifikasi bertingkat jarang |
CPNS, IELTS prep, BUMN test exam dewasa — no level, adult-only (edge) |
has_levelsis_offered per combo.effective_until=NULL (berlaku terus). Edit inline/bulk + dirty-guard.