药品有效期提醒应用


欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

守护家庭用药安全

扫码录入 · 分类管理 · 过期预警 · 用药提醒


一、应用概述

运行效果图

image-20260409182425940

image-20260409182431578

image-20260409182436034

image-20260409182440794

image-20260409182444914

1.1 产品定位

药品有效期提醒是一款专注于家庭药品管理的健康应用。通过扫码录入药品信息,实现药品分类管理、过期预警、用药提醒等功能,帮助家庭科学管理药品,保障用药安全。

1.2 核心价值

药品有效期提醒

药品录入

扫码录入

手动添加

批量导入

信息完善

分类管理

药品分类

存放位置

家庭成员

使用记录

过期预警

临期提醒

过期标记

批量处理

安全提示

用药提醒

定时提醒

用药记录

剂量管理

注意事项

1.3 功能架构

药品有效期提醒

药品管理

过期预警

用药提醒

统计分析

扫码录入

手动添加

分类管理

库存管理

临期提醒

过期标记

处理建议

定时提醒

用药记录

剂量跟踪

用药统计

费用统计

健康报告


二、数据模型设计

2.1 药品分类枚举

应用支持多种药品分类:

分类 图标 颜色 描述 常见药品
感冒发烧 🤒 #F44336 感冒、退烧类药物 感冒灵、布洛芬
肠胃消化 💊 #FF9800 肠胃、消化类药物 胃舒平、健胃消食片
外用药品 🩹 #4CAF50 外用、消毒类药物 创可贴、碘伏
慢性病药 💉 #9C27B0 慢性病长期用药 降压药、降糖药
维生素类 💊 #2196F3 维生素、保健品 维生素C、钙片
儿童用药 👶 #E91E63 儿童专用药品 小儿感冒颗粒
妇科用药 🌸 #E91E63 妇科专用药品 益母草颗粒
五官用药 👁️ #00BCD4 眼耳鼻喉用药 眼药水、滴耳液
急救药品 🚑 #F44336 急救备用药品 速效救心丸
其他药品 📦 #607D8B 其他类型药品 -

2.2 药品状态枚举

状态 图标 颜色 描述 处理建议
正常 #4CAF50 在有效期内 正常使用
临期 ⚠️ #FFC107 30天内过期 优先使用
即将过期 🔶 #FF9800 7天内过期 尽快使用
已过期 #F44336 已过有效期 立即处理
已用完 📭 #9E9E9E 库存为零 及时补充

2.3 核心数据模型

class Medicine {
  final String id;
  final String name;
  final MedicineCategory category;
  final String? barcode;
  final String? specification;
  final String? manufacturer;
  final DateTime productionDate;
  final DateTime expiryDate;
  final int quantity;
  final int remaining;
  final String? location;
  final String? notes;
  final List<UsageRecord> usageRecords;
  final List<Reminder> reminders;
}

class UsageRecord {
  final String id;
  final DateTime time;
  final double dosage;
  final String? notes;
  final String? member;
}

class Reminder {
  final String id;
  final ReminderType type;
  final TimeOfDay time;
  final List<int> repeatDays;
  final double dosage;
  final bool enabled;
  final String? notes;
}

class ExpiryAlert {
  final String medicineId;
  final String medicineName;
  final ExpiryStatus status;
  final int daysRemaining;
  final DateTime expiryDate;
}

2.4 提醒类型

提醒类型 图标 触发条件 提醒内容
用药提醒 💊 定时触发 该吃药了
临期提醒 ⚠️ 30天内过期 药品即将过期
过期提醒 已过期 药品已过期,请处理
库存提醒 📦 库存不足 药品库存不足
补货提醒 🛒 库存为零 需要购买药品

三、界面设计

3.1 页面结构

药品首页

药品列表

过期预警

用药提醒

统计分析

3.2 药品首页

首页布局

状态概览

临期药品

今日提醒

快速操作

最近添加

核心组件:

组件 功能 交互
状态概览 显示药品总数、临期数、过期数 点击查看详情
临期药品 显示即将过期的药品列表 点击查看详情
今日提醒 显示今日用药提醒 点击确认用药
快速操作 扫码录入、手动添加 弹出操作面板
最近添加 显示最近添加的药品 点击查看详情

3.3 药品录入流程

数据库 应用 用户 数据库 应用 用户 alt [扫码录入] [手动添加] 点击扫码/手动添加 打开摄像头 扫描条形码 解析药品信息 输入药品信息 确认信息 确认保存 保存药品信息 返回保存结果 添加成功

3.4 过期预警页

预警等级展示:

┌─────────────────────────────────────┐
│  ⚠️ 临期预警 (30天内)               │
│  ─────────────────────────────────  │
│  感冒灵颗粒    剩余15天    [优先使用] │
│  布洛芬胶囊    剩余23天    [优先使用] │
│                                     │
│  🔶 即将过期 (7天内)                │
│  ─────────────────────────────────  │
│  维生素C片     剩余3天     [尽快使用] │
│  眼药水        剩余5天     [尽快使用] │
│                                     │
│  ❌ 已过期                          │
│  ─────────────────────────────────  │
│  创可贴        过期2天     [立即处理] │
│  碘伏          过期15天    [立即处理] │
└─────────────────────────────────────┘

四、核心功能实现

4.1 药品录入功能

class MedicineService {
  Future<Medicine?> scanBarcode() async {
    final barcode = await _barcodeScanner.scan();
    if (barcode != null) {
      final info = await _fetchMedicineInfo(barcode);
      return info;
    }
    return null;
  }
  
  Future<void> addMedicine(Medicine medicine) async {
    await _database.insert(medicine);
    _scheduleExpiryAlerts(medicine);
    _scheduleReminders(medicine);
  }
}

4.2 过期预警算法

过期状态判断:

Status={正常if D>30临期if 7<D≤30即将过期if 0<D≤7已过期if D≤0 \text{Status} = \begin{cases} \text{正常} & \text{if } D > 30 \\ \text{临期} & \text{if } 7 < D \leq 30 \\ \text{即将过期} & \text{if } 0 < D \leq 7 \\ \text{已过期} & \text{if } D \leq 0 \end{cases} Status= 正常临期即将过期已过期if D>30if 7<D30if 0<D7if D0

其中 DDD 为距离过期天数。

预警优先级计算:

Priority=1D+1×Wc \text{Priority} = \frac{1}{D + 1} \times W_c Priority=D+11×Wc

其中 WcW_cWc 为药品分类权重(急救药品权重更高)。

4.3 用药提醒功能

class ReminderService {
  void scheduleReminder(Reminder reminder) {
    for (var day in reminder.repeatDays) {
      _scheduler.schedule(
        day: day,
        time: reminder.time,
        callback: () => _showNotification(reminder),
      );
    }
  }
  
  void _showNotification(Reminder reminder) {
    _notification.show(
      title: '用药提醒',
      body: '请按时服用 ${reminder.medicineName},剂量:${reminder.dosage}',
    );
  }
}

4.4 库存管理

库存计算:

Remaining=Initial−∑i=1nUsagei \text{Remaining} = \text{Initial} - \sum_{i=1}^{n} \text{Usage}_i Remaining=Initiali=1nUsagei

补货提醒触发:

Alert={库存不足if R≤Tl需要补货if R=0 \text{Alert} = \begin{cases} \text{库存不足} & \text{if } R \leq T_l \\ \text{需要补货} & \text{if } R = 0 \end{cases} Alert={库存不足需要补货if RTlif R=0

其中 RRR 为剩余数量,TlT_lTl 为库存阈值。


五、数据可视化

5.1 药品分类分布

25% 20% 18% 15% 12% 10% 药品分类分布 感冒发烧 肠胃消化 外用药品 慢性病药 维生素类 其他

5.2 有效期分布

正常 (30天以上)  ████████████████░░░░  75%
临期 (30天内)    ████░░░░░░░░░░░░░░░░  15%
即将过期 (7天内) ██░░░░░░░░░░░░░░░░░░  7%
已过期           █░░░░░░░░░░░░░░░░░░░  3%

5.3 用药记录统计

2024-01-15 2024-01-15 2024-01-16 2024-01-16 2024-01-17 2024-01-17 2024-01-18 2024-01-18 2024-01-19 2024-01-19 2024-01-20 2024-01-20 2024-01-21 2024-01-21 2024-01-22 降压药 降糖药 维生素C 钙片 慢性病药 维生素 本周用药记录

六、安全与隐私

6.1 数据安全

药品数据

本地加密存储

访问密码保护

数据备份

安全删除

6.2 隐私保护

措施 说明
本地存储 所有数据存储在用户设备
数据加密 敏感信息加密存储
权限最小化 仅申请必要权限
数据导出 支持数据导出备份
安全删除 支持数据彻底删除

七、技术实现细节

7.1 状态管理

class MedicineState extends ChangeNotifier {
  List<Medicine> _medicines = [];
  List<ExpiryAlert> _alerts = [];
  List<Reminder> _reminders = [];
  
  Map<ExpiryStatus, List<Medicine>> get medicinesByStatus {
    return {
      ExpiryStatus.normal: _medicines.where((m) => m.status == ExpiryStatus.normal).toList(),
      ExpiryStatus.expiringSoon: _medicines.where((m) => m.status == ExpiryStatus.expiringSoon).toList(),
      ExpiryStatus.expired: _medicines.where((m) => m.status == ExpiryStatus.expired).toList(),
    };
  }
  
  void addMedicine(Medicine medicine) {
    _medicines.add(medicine);
    _updateAlerts();
    notifyListeners();
  }
  
  void _updateAlerts() {
    _alerts = _medicines
      .where((m) => m.status != ExpiryStatus.normal)
      .map((m) => ExpiryAlert.fromMedicine(m))
      .toList();
  }
}

7.2 过期检测

class ExpiryChecker {
  static ExpiryStatus checkStatus(DateTime expiryDate) {
    final now = DateTime.now();
    final days = expiryDate.difference(now).inDays;
    
    if (days <= 0) return ExpiryStatus.expired;
    if (days <= 7) return ExpiryStatus.aboutToExpire;
    if (days <= 30) return ExpiryStatus.expiringSoon;
    return ExpiryStatus.normal;
  }
  
  static int daysRemaining(DateTime expiryDate) {
    return expiryDate.difference(DateTime.now()).inDays;
  }
}

八、应用截图示意

8.1 首页

┌─────────────────────────────────────┐
│  药品有效期提醒            📷 ⚙️    │
├─────────────────────────────────────┤
│  ┌─────────────────────────────┐   │
│  │  📦 药品概览                │   │
│  │  总计: 28  临期: 3  过期: 1 │   │
│  └─────────────────────────────┘   │
│                                     │
│  ⚠️ 临期预警                       │
│  ┌─────────────────────────────┐   │
│  │ 🤒 感冒灵颗粒   剩余15天    │   │
│  │ 💊 布洛芬胶囊   剩余23天    │   │
│  │ 💊 维生素C片    剩余28天    │   │
│  └─────────────────────────────┘   │
│                                     │
│  💊 今日提醒                       │
│  ┌─────────────────────────────┐   │
│  │ 08:00 降压药 1片    [确认]  │   │
│  │ 12:00 维生素C 1片   [确认]  │   │
│  │ 20:00 降压药 1片    [待服用]│   │
│  └─────────────────────────────┘   │
│                                     │
│  [📷 扫码录入]  [➕ 手动添加]      │
└─────────────────────────────────────┘
│  📋药品  ⚠️预警  ⏰提醒  📊统计    │
└─────────────────────────────────────┘

8.2 添加药品页

┌─────────────────────────────────────┐
│  ← 添加药品                         │
├─────────────────────────────────────┤
│  药品名称                          │
│  ┌─────────────────────────────┐   │
│  │ 感冒灵颗粒                  │   │
│  └─────────────────────────────┘   │
│                                     │
│  药品分类                          │
│  🤒感冒  💊肠胃  🩹外用  💉慢性    │
│                                     │
│  规格                              │
│  ┌─────────────────────────────┐   │
│  │ 10g × 9袋                   │   │
│  └─────────────────────────────┘   │
│                                     │
│  有效期                            │
│  ┌─────────────────────────────┐   │
│  │ 2025-06-30        📅        │   │
│  └─────────────────────────────┘   │
│                                     │
│  数量          存放位置             │
│  ┌───────┐    ┌───────────┐       │
│  │  2 盒 │    │ 药箱-上层 │       │
│  └───────┘    └───────────┘       │
│                                     │
│  备注                              │
│  ┌─────────────────────────────┐   │
│  │ 饭后服用,一日三次          │   │
│  └─────────────────────────────┘   │
│                                     │
│  ┌─────────────────────────────┐   │
│  │         保 存               │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘

九、后续规划

9.1 功能迭代

版本 功能 状态
v1.0 基础药品管理、过期预警 ✅ 已完成
v1.1 用药提醒、记录统计 🚧 开发中
v1.2 扫码录入、药品信息库 📋 计划中
v1.3 多设备同步 📋 计划中
v2.0 家庭共享、智能推荐 📋 计划中

9.2 技术优化

  • 接入真实扫码功能
  • 药品信息数据库对接
  • 后台提醒推送
  • 数据云端备份
  • 多语言支持

守护家庭用药安全


Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐