一、实际应用场景描述
在宠物医疗场景中,宠物主通常面临以下情况:
- 宠物在不同医院就诊
- 过往病史、用药记录不连续
- 新医生无法全面了解历史治疗方案
- 出现重复检查、重复用药或过度医疗
典型流程包括:
- 初诊、检查、开药
- 复诊、换药、调整剂量
- 转诊至其他医院
由于缺乏统一、可信的医疗档案,宠物主往往处于信息弱势。
本示例程序旨在构建一个教学级、可验证的宠物医疗记录上链系统,通过 Python 将病史与关键用药信息上链,为跨机构诊疗提供可信参考数据,辅助降低误诊与过度医疗风险。
二、引入痛点(Why Blockchain)
传统方式 存在问题
纸质病历 易丢失、难跨院共享
医院内部系统 数据孤岛、不互通
口头描述 不准确、不完整
重复检查 增加负担与风险
区块链在该场景中的核心价值不是“去中心化医疗”,而是:
- 病史不可篡改:就诊即上链
- 跨机构可核验:授权后可查询
- 用药连续性:避免重复/冲突用药
- 责任清晰:医生、医院、时间均可追溯
三、核心逻辑讲解(简化模型)
1️⃣ 基本对象
- Pet(宠物)
- 宠物ID
- MedicalRecord(就诊记录)
- 诊断结果
- 用药清单
- 医生ID
- Medication(用药)
- 药品名称
- 剂量
- 频次
2️⃣ 上链内容
宠物ID
就诊时间
诊断摘要
用药摘要
医生ID
哈希值
3️⃣ 业务流程
宠物就诊 → 医生录入病史与用药 → 上链存储 → 下次就诊授权查询 → 辅助决策
四、代码模块化设计
📁 项目结构
pet_medical_chain/
│
├── blockchain.py # 区块链结构
├── models.py # 数据模型
├── medical_service.py # 医疗记录
├── medication_checker.py # 用药冲突检测
├── verification.py # 记录核验
├── cli.py # 命令行入口
├── utils.py # 工具函数
└── README.md
五、核心代码示例(Python)
✅ 仅用于教学与原型验证
✅ 不上链完整隐私数据,仅上链摘要与哈希
✅ 注释清晰,便于理解
1️⃣ models.py(数据模型)
from dataclasses import dataclass
from datetime import datetime
import hashlib
@dataclass
class Medication:
drug_name: str
dosage: str
frequency: str
@dataclass
class MedicalRecord:
pet_id: str
diagnosis: str
medications: list[Medication]
doctor_id: str
visit_time: datetime
def medication_summary(self) -> str:
return ",".join(
f"{m.drug_name}({m.dosage},{m.frequency})"
for m in self.medications
)
def compute_hash(self) -> str:
content = (
f"{self.pet_id}"
f"{self.diagnosis}"
f"{self.medication_summary()}"
f"{self.doctor_id}"
f"{self.visit_time.isoformat()}"
)
return hashlib.sha256(content.encode()).hexdigest()
2️⃣ blockchain.py(简化区块链)
from typing import List
import hashlib
import json
class Block:
def __init__(self, index: int, record: dict, previous_hash: str):
self.index = index
self.record = record
self.previous_hash = previous_hash
self.timestamp = None
self.hash = self.compute_hash()
def compute_hash(self) -> str:
block_string = json.dumps(self.record, sort_keys=True)
return hashlib.sha256(block_string.encode()).hexdigest()
class MedicalChain:
def __init__(self):
self.chain: List[Block] = []
self.create_genesis_block()
def create_genesis_block(self):
genesis = Block(0, {"info": "genesis"}, "0")
self.chain.append(genesis)
def add_record(self, record: dict):
last_block = self.chain[-1]
new_block = Block(
index=last_block.index + 1,
record=record,
previous_hash=last_block.hash
)
self.chain.append(new_block)
3️⃣ medical_service.py(医疗记录)
from blockchain import MedicalChain
from models import MedicalRecord
class MedicalService:
def __init__(self):
self.chain = MedicalChain()
def record_visit(self, record: MedicalRecord):
data = {
"pet_id": record.pet_id,
"diagnosis": record.diagnosis,
"medications": record.medication_summary(),
"doctor_id": record.doctor_id,
"visit_time": record.visit_time.isoformat(),
"hash": record.compute_hash()
}
self.chain.add_record(data)
return data["hash"]
4️⃣ medication_checker.py(用药冲突检测)
from models import Medication
class MedicationChecker:
def check_duplication(self, existing: list[Medication], new: Medication) -> bool:
"""
简化示例:检测是否重复开具相同药物
"""
return any(e.drug_name == new.drug_name for e in existing)
5️⃣ cli.py(命令行入口)
from models import MedicalRecord, Medication
from medical_service import MedicalService
from medication_checker import MedicationChecker
from datetime import datetime
medical_service = MedicalService()
checker = MedicationChecker()
record = MedicalRecord(
pet_id="PET001",
diagnosis="皮肤过敏",
medications=[
Medication("氯雷他定", "5mg", "每日一次")
],
doctor_id="DOC003",
visit_time=datetime.now()
)
tx = medical_service.record_visit(record)
print("就诊记录上链哈希:", tx)
new_med = Medication("氯雷他定", "5mg", "每日一次")
is_duplicate = checker.check_duplication(record.medications, new_med)
print("是否重复用药:", "是" if is_duplicate else "否")
六、README 文件(示例)
# 宠物医疗记录上链系统(教学原型)
## 项目简介
本项目为课程示例,展示如何利用 Python 构建简化区块链结构,实现宠物病史与用药记录的上链与核验。
## 运行环境
- Python 3.9+
## 运行方式
bash
python cli.py
## 注意事项
- 本系统仅用于教学与实验
- 不涉及真实医疗诊断与治疗
- 不上链完整病历隐私数据
七、使用说明(面向学生/开发者)
1. 阅读
"models.py" 理解医疗记录结构
2. 修改
"cli.py" 模拟不同宠物与就诊记录
3. 可扩展:
- 增加“跨机构授权查询”
- 增加“过敏史提示”
- 改为 Web API 供医院系统调用
八、核心知识点卡片(课程向)
模块 关键知识点
区块链 哈希锚定、不可篡改
医疗信息 病史连续性、用药安全
隐私保护 摘要存证 vs 原始病历
软件工程 模块化、单一职责
Python 实践 dataclass、CLI、列表处理
九、总结
本方案从宠物医疗中“信息孤岛与过度医疗”问题出发,剥离商业与营销色彩,仅从技术视角展示:
- 区块链如何作为“跨机构可信病历见证人”
- 如何通过“摘要 + 哈希”兼顾隐私与安全
- 如何在课程中讨论技术与医疗伦理的平衡
它不是一个完整的医疗系统,而是一个可用于课堂讨论、兽医教育、创新实验的教学原型。
如果你愿意,下一步可以:
- 改造成 Web API(FastAPI)
- 设计 宠物主授权与隐私控制
- 或结合 智能合约 + 权限管理
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!