# 04 — C 端资产信息统一展示预计最终到期

**What to build:** 客户在 C 端查看卡或设备资产信息时，可以看到与后台一致的“预计套餐到期时间”、剩余自然日、推算状态和临期标记。C 端继续在套餐明细中保留当前套餐自身到期时间，但资产摘要只使用统一 Query 给出的最终到期口径，前端不自行推算。

**Blocked by:** `.scratch/ur46-estimated-final-expiry/issues/01-admin-asset-detail-estimated-final-expiry.md` — 01 — 后台资产详情统一展示预计最终到期

**Status:** done（后端）

- [x] 架构主通道为 Query，辅助通道为 C 端接口投影；复用 01 的单资产入口和纯计算核心，完整收口 C 端资产信息展示，不迁移购买、实名、续费、退款或套餐激活写逻辑。
- [x] C 端卡和设备资产信息明确返回预计日期、剩余自然日、推算状态、状态中文名称和临期标记；字段语义、RFC3339 序列化及 nullable 行为与后台完全一致。
- [x] 同一资产、同一时刻和同一套餐队列下，C 端与后台详情返回相同的预计结果；不得在 C 端 Service、Handler 或前端建立另一套套餐时长累加规则。
- [ ] C 端资产摘要统一显示“预计套餐到期时间”，四种状态分别展示精确日期、待激活后起算、—、数据异常；异常不得伪装成无套餐或空白日期。（前端任务，不纳入后端交付）
- [ ] 套餐明细中的当前套餐到期时间继续保留用于解释当前周期，但不得与预计最终到期并列为两个资产汇总口径。（前端任务，不纳入后端交付）
- [ ] `is_expiring=true` 时仅应用约定临期颜色；本票不增加 UR#33 的续费入口、临期列表、通知或其他临期业务行为。（前端任务，不纳入后端交付）
- [x] 使用真实开发 PostgreSQL、Redis、JWT 和进程内 Fiber App 完成 C 端卡、设备集成测试，覆盖四种状态、nullable 字段、后台一致性以及套餐新增、退款或失效后下一次查询实时变化。
- [ ] 前端验收确认 C 端不叠加套餐时长、不自行计算剩余天数，并保持现有套餐明细信息可见。（前端任务，不纳入后端交付）
