“全结构化录入+牙位可视化标记”人工智能化python编程路径探析
1. 目标与使用场景
- 将所有关键信息结构化:主诉/现病史、龋/充/根管/牙周/修复/种植、影像读片所见、处置与术式、医嘱、收费关联等。
- 通过牙位图可视化标注与表单联动,做到“点哪颗牙、哪一面,就写哪一项”,杜绝游离文本。
- 用 AI 做三件事:①录入提效(自动补全/术语标准化/编码建议);②质控(规则与模型双验);③影像辅助(龋、残髓、根尖周、牙周骨丧失等初筛)。
- 与医院信息平台/医保/第三方影像顺畅对接(HL7/FHIR、DICOM)。
2. 标准与术语(建议落地用)
- 牙位编码:FDI 两位码(11–48,51–85),保留美制/牙位字母兼容映射。
- 结构化术语/编码:SNOMED CT(诊断/处置)、ICD-10(病案)、LOINC(检验)、UCUM(单位)。
- FHIR 资源映射:Patient/Encounter/Condition/Observation/Procedure/DiagnosticReport/ImagingStudy/ServiceRequest/MedicationRequest/Consent。
- 影像:DICOM(pydicom 读片),报告走 DiagnosticReport + ImagingStudy 关联。
3. 总体架构(Python 为主)
-
前端(牙位图 + 表单):React/TypeScript + SVG 牙位图(32/20 牙,含 5 面:M/D/O/B(P/L)/I©)。与后端通过 WebSocket/REST 同步。
-
API 层:FastAPI(Pydantic v2 模型校验,Uvicorn),JWT/OAuth2。
-
业务与数据:PostgreSQL(结构化 + JSONB 存每牙面状态),SQLAlchemy + Alembic。
-
AI 服务:
- NLP:术语标准化、编码建议(PyTorch/Transformers),RAG(FAISS/SQLite-vec)。
- CV:X 光/口扫(OpenCV + MONAI/nnU-Net/YOLOv8),ONNX Runtime 推理。
- 队列:Celery + Redis,批量影像异步处理。
-
集成:fhir.resources 组装 FHIR Bundle;pydicom/DICOMweb 取片;HL7/FHIR 接口对接院内。
-
审计与合规:审计日志(append-only)、字段级加密(pgcrypto/应用层)、RBAC/ABAC。
4. 数据建模(核心表与模型)
A. 患者/就诊
patient(id, mrn, name, sex, dob, …)
encounter(id, patient_id, start_time, type, …)
B. 每牙结构化记录
tooth_record(id, encounter_id, fdi_code, present BOOLEAN, mobility, percussion, …)
tooth_surface(id, tooth_record_id, surface ENUM[M,D,O,B,P,L,I,C], caries_grade, restoration, fracture, pocket_depth_mm, bleeding BOOLEAN, furcation, …)
diagnosis(code, system, display)
/procedure(code, system, display, tooth_fdi?, surface?)
C. 影像与报告
imaging_study(id, encounter_id, dicom_uid, modality, taken_at, …)
observation(id, type, value, unit, tooth_fdi?, surface?, source)
diagnostic_report(id, study_id, summary_text, json_struct)
Pydantic 片段(示例)
from pydantic import BaseModel, Field
from typing import Literal, Optional, ListSurface = Literal["M","D","O","B","P","L","I","C"]class ToothSurface(BaseModel):surface: Surfacecaries_grade: Optional[int] = Field(None, ge=0, le=5)restoration: Optional[str] = Nonepocket_depth_mm: Optional[float] = Field(None, ge=0, le=12)bleeding: bool = Falseclass ToothRecord(BaseModel):fdi: int = Field(..., ge=11, le=85)present: bool = Truesurfaces: List[ToothSurface] = []
5. “全结构化录入”设计要点
- 模板驱动:主诉/现病史/专科检查/牙周/影像所见/诊断/处置,多段式表单,随选择动态展开(FastAPI 提供元数据 JSON,前端渲染)。
- 牙位联动:点击 16-O 面 ⇒ 自动定位到 “16 咬合面”字段;勾选“充填体Ⅱ类”⇒ 牙位图相应着色+图标。
- 术语选择器:受控词表 + 智能搜索(同义词/拼写容错),选中即绑定 SNOMED/ICD 代码。
- 强校验:跨字段规则(例:缺失牙不可记录龋;深龋应提示活髓试验/冷测记录)。
- 版本化:同一牙位的纵向时间轴,支持回溯与对比。
6. 牙位可视化标记(SVG 实现思路)
- 几何:每颗牙一个
g
,内部 5 个path
对应牙面;绑定data-fdi
与data-surface
。 - 着色与图标:状态→颜色/图标(例:龋=红,充填=蓝,根管完成=紫,缺失=灰斜线)。
- 交互:点击/框选/涂抹(Shift+Drag)批量标记;hover 弹出该牙的结构化快照。
- 后端映射:一张
FDI → SVG 坐标
表;返回/接收结构化 JSON。
FDI 映射字典(Python 伪代码)
FDI_TO_INDEX = {11:0,12: