# Lesson Pack（课时包管家）v1.0 交付说明

对应需求：`~/workspace/app-demand-shortlist-v1.md` 第 5 名「课时包管家（创意库 i104）」。

## 产物

- APK：`~/workspace/your_files/LessonPack-v1.0.apk`（15.6 MB，debug 签名，可直接安装）
- 源码：`~/workspace/lesson-pack-android/`
- 包名：`com.lessonpack.app`；versionCode 1 / versionName 1.0；minSdk 24 / targetSdk 34
- 技术栈：Kotlin + Jetpack Compose 纯原生（无 WebView），SQLite 本地存储，英文 UI 优先
- aapt 校验：仅 POST_NOTIFICATIONS + RECEIVE_BOOT_COMPLETED 两个权限，**未申请 INTERNET**，零联网、无账号属实

## 需求复核结论（开工前已做）

**空位判断未反转，照计划开工，但如实标注一个新竞品。**

- 机构端 SaaS 依然是市场主体（Jackrabbit、iClassPro、Class Manager、ProgramChamp 等）：家长看到的只是机构系统的附属门户，只能查这一家机构的账，跨机构、无机构系统的小培训班都覆盖不到——这正是清单原来的判断。
- 新发现一个家长端独立产品 **Recur**（getrecur.app，免费，iOS/Android）：多孩子、课程日程、出勤、剩余节数、双人共享都做，定位偏「课程日程与付款周期管理」。另有 Cadence 是更宽的家庭活动/费用中枢。也就是说家长端不再是完全空白，但仍属「竞品稀少」：直接以「预付课时包余额 + 到期作废预警」为核心的极简账本仍未见成型产品。
- 本版差异化据此押在：**机构无关的课时包账本**（不管机构有没有系统都能记）、**到期日一等公民**（课時包过期作废是 Recur 这类日程型产品不强调的痛点）、三路提醒（核销即时低量提醒 + 到期前 30 天提醒 + 每日汇总）、完全离线无账号。

## 第一版 2 个功能（按需求文档原样落地）

1. **课时包登记与一键核销**：登记字段含机构名、课程名、总课时、有效期、孩子名（可选）；首页卡片大字显示剩余课时（X of Y left）+ 进度条 + 状态徽标（正常/剩余不足/即将过期/已过期/已用完），卡片上直接有 Check in 按钮，一键核销一节；详情页可看完整信息、核销、撤销上一次核销（防误点）、核销历史（逐条带时间）、编辑、删除（带确认）。需要关注的包自动排在列表前面。
2. **双提醒（本地通知）**：① 剩余不足——核销后剩余 ≤3 节立即发一条通知（剩余 0 时提示已用完）；② 临近过期——到期前 30 天上午 9:00 发提醒；另有每日 9:00 汇总提醒兜底（剩余 ≤3、7 天内到期、已过期但还有课没上的包合并成一条）。全部用 AlarmManager 非精确闹钟实现（不申请精确闹钟权限），开机自动重排、每次打开 App 自愈重排。Android 13+ 首次打开有权限请求，首页横幅 + 设置页双入口引导（含跳转系统通知设置）。

## 未做（按 v1 范围砍掉）

付费墙/会员、广告、云同步与双人共享、机构端任何功能、课程日程/日历、续费购买入口、多语言 UI、release 签名包。后续迭代候选：多孩子视图筛选、数据导出备份、续费时一键新建包。

## 已知问题（如实）

- 未做真机/模拟器实测（环境无模拟器），仅完成编译打包 + APK 结构校验。建议真机首验一条链：「新增课时包 → 核销到剩 3 节看即时通知 → 把有效期改到 30 天内看次日 9 点汇总提醒」。
- 提醒为非精确闹钟 + 每日汇总模式，可能有分钟级漂移；强省电 ROM 可能延迟，打开 App 会自愈重排。
- 每日汇总提醒在问题包存在期间每天都会发（有意设计，防遗忘），包处理完（用完/删除/续新包）即停。
- 与机构系统的课时数若有出入，以本 App 的核销历史为家长侧凭证去和机构核对——这是产品定位，不是缺陷，但文案上已在设置页 About 里说明。
