#!/usr/bin/env python3 """NFC药品检索脚本 - 通过NFC芯片ID查询对应药品信息""" import argparse import json import sys # NFC ID 与药品对应表 NFC_MEDICINE_DB = { "1DCDC90D0D1080": { "name": "阿莫西林胶囊", "category": "抗生素", "description": "用于治疗细菌感染,如呼吸道感染、泌尿道感染、皮肤软组织感染等。", "dosage": "成人一次0.5g(1粒),每6-8小时一次,一日3-4次。饭后服用,用温水整粒吞服。", "caution": "对青霉素过敏者禁用。需按疗程服用,不要自行停药。" }, "1DC8C90D0D1080": { "name": "硝苯地平控释片", "category": "降压药", "description": "用于治疗高血压,帮助控制血压,预防心脑血管意外。", "dosage": "成人一次30mg(1片),一日1次。每天固定时间服用,整片吞服,不可掰开或嚼碎。", "caution": "不可突然停药,需遵医嘱逐渐减量。服药期间避免吃柚子。" }, "1DC9C90D0D1080": { "name": "二甲双胍片", "category": "降糖药", "description": "用于治疗2型糖尿病,帮助控制血糖水平。", "dosage": "成人起始剂量一次0.25g(1片),一日2-3次,随餐服用。可根据血糖情况遵医嘱调整用量。", "caution": "肾功能不全者慎用。服药期间需定期监测血糖。" }, "1DCCC90D0D1080": { "name": "阿司匹林肠溶片", "category": "抗血小板药", "description": "用于预防心脑血管血栓形成,降低心梗和脑梗的风险。", "dosage": "成人一次100mg(1片),一日1次。每天固定时间服用,饭前用温水整片吞服,不可嚼碎。", "caution": "有胃溃疡病史者慎用。服药期间如有异常出血请及时就医。" }, "1DC7C90D0D1080": { "name": "辛伐他汀片", "category": "降脂药", "description": "用于降低血液中的胆固醇,预防动脉硬化和心血管疾病。", "dosage": "成人一次20mg(1片),一日1次,晚间服用效果最佳。", "caution": "服药期间避免大量饮用柚子汁。如出现肌肉疼痛请及时就医。" }, "100005": { "name": "氨氯地平片", "category": "降压药", "description": "用于治疗高血压和心绞痛,帮助平稳降低血压。", "dosage": "成人一次5mg(1片),一日1次。每天同一时间服用即可,不受进食影响。", "caution": "首次服用可能出现头晕,起身时请缓慢。不可突然停药。" }, "100006": { "name": "美托洛尔缓释片", "category": "降压药/心率控制", "description": "用于治疗高血压、心绞痛和心律不齐,帮助减慢心率、降低血压。", "dosage": "成人一次47.5mg(1片),一日1次,早晨服用。整片吞服,不可掰开或嚼碎。", "caution": "不可突然停药,需遵医嘱逐渐减量。心率过慢时请咨询医生。" }, "100007": { "name": "奥美拉唑肠溶胶囊", "category": "胃药", "description": "用于治疗胃酸过多、胃溃疡、反流性食管炎,保护胃黏膜。", "dosage": "成人一次20mg(1粒),一日1次,早晨饭前服用。整粒吞服,不可打开胶囊。", "caution": "不宜长期服用,一般疗程4-8周。长期使用需定期复查。" }, "100008": { "name": "氯吡格雷片", "category": "抗血小板药", "description": "用于预防血栓形成,常用于放过支架或有心梗脑梗风险的患者。", "dosage": "成人一次75mg(1片),一日1次。每天固定时间服用,不受进食影响。", "caution": "服药期间注意观察有无异常出血。手术前需提前告知医生正在服用此药。" }, "100009": { "name": "螺内酯片", "category": "利尿药", "description": "用于治疗水肿和高血压,帮助排出体内多余水分,减轻心脏负担。", "dosage": "成人一次20mg(1片),一日1-2次,早晨服用为宜。", "caution": "服药期间需注意监测血钾,避免食用过多含钾高的食物如香蕉、橙子。" }, "100010": { "name": "复方丹参滴丸", "category": "心血管中成药", "description": "用于活血化瘀,理气止痛。常用于冠心病、心绞痛的日常预防和缓解。", "dosage": "一次10丸,一日3次。舌下含服效果更好,也可用温水吞服。", "caution": "孕妇禁用。如胸痛持续不缓解,请立即就医。" }, "100011": { "name": "蒙脱石散", "category": "止泻药", "description": "用于治疗腹泻,保护肠道黏膜,吸附肠道内的毒素和细菌。", "dosage": "成人一次1袋(3g),一日3次。倒入半杯温水中搅匀后服用,建议空腹服用。", "caution": "服用后可能引起便秘,症状缓解后可停药。与其他药物需间隔2小时服用。" }, "B55CB052": { "name": "布洛芬缓释胶囊", "category": "解热镇痛药", "description": "用于缓解头痛、牙痛、关节痛、肌肉痛以及感冒引起的发热。", "dosage": "成人一次1粒(300mg),一日2次,早晚各一次。饭后服用,用温水整粒吞服。", "caution": "有胃溃疡病史者慎用。连续使用不超过5天,如疼痛持续请就医。" }, "100013": { "name": "碳酸钙D3片", "category": "补钙药", "description": "用于补充钙质和维生素D,预防和治疗骨质疏松。", "dosage": "成人一次1片,一日1-2次。嚼碎后吞服或整片吞服均可,建议随餐服用。", "caution": "肾结石患者慎用。每日补钙不宜超过医生建议量。" }, "100014": { "name": "甲钴胺片", "category": "营养神经药", "description": "用于治疗周围神经病变,如手脚麻木、刺痛,常见于糖尿病引起的神经损伤。", "dosage": "成人一次0.5mg(1片),一日3次,饭后服用。", "caution": "避光保存。如服用一个月后症状无改善,请咨询医生。" }, } def lookup_by_nfc_id(nfc_id: str) -> dict | None: """通过NFC ID查询药品信息""" return NFC_MEDICINE_DB.get(nfc_id) def lookup_by_name(name: str) -> list[dict]: """通过药品名称模糊查询,返回匹配的药品列表(含nfc_id)""" results = [] for nfc_id, medicine in NFC_MEDICINE_DB.items(): if name in medicine["name"]: results.append({"nfc_id": nfc_id, **medicine}) return results def format_voice_response(medicine: dict, nfc_id: str | None = None) -> str: """格式化为语音助手风格的回复""" lines = [ f"## 药品识别结果\n", ] if nfc_id: lines.append(f"**NFC ID**:{nfc_id}\n") lines.extend([ f"**药品名称**:{medicine['name']}\n", f"**药品类别**:{medicine['category']}\n", f"### 这个药是做什么的\n", f"{medicine['description']}\n", f"### 用法用量\n", f"{medicine['dosage']}\n", f"### 注意事项\n", f"{medicine['caution']}", ]) return "\n".join(lines) def main(): parser = argparse.ArgumentParser(description="NFC药品检索 - 通过NFC芯片ID或药品名称查询药品信息") parser.add_argument("--nfc-id", "-n", help="NFC芯片ID") parser.add_argument("--name", "-m", help="药品名称(支持模糊匹配)") args = parser.parse_args() if not args.nfc_id and not args.name: print("错误:请提供 --nfc-id 或 --name 参数。") sys.exit(1) if args.nfc_id: medicine = lookup_by_nfc_id(args.nfc_id) if medicine is None: print(f"NOT_FOUND: 未找到NFC ID为 {args.nfc_id} 对应的药品记录。") sys.exit(1) print(format_voice_response(medicine, nfc_id=args.nfc_id)) else: results = lookup_by_name(args.name) if not results: print(f"NOT_FOUND: 本地药品库中未找到包含「{args.name}」的药品。") sys.exit(1) for r in results: nfc_id = r.pop("nfc_id") print(format_voice_response(r, nfc_id=nfc_id)) print("\n---\n") if __name__ == "__main__": main()