a207-nutrition-assessment-mcp
# a207-nutrition-assessment-mcp-nfyy(M3 · 营养评估)
儿童 CKD 营养评估 MCP。对应 PCP 契约 `nutrition_assessment` 输出位,是 Wave 2 首个交付包。
> **PRNT 目标唯一权威引擎**:M5 的目标计算工具已去重并入本包(Schofield 交叉校验 / 水肿理想体重校正 / 腹透葡萄糖供能扣减),全项目只有一把"尺子"。
> 权威标尺:**PRNT 2020**(Shaw V, et al. *Pediatr Nephrol* 35:519-531)——与用户提供的《PRNT指南:能量与蛋白质需求及营养处方实操》一致。
## 工具清单
| 工具 | 类型 | 权限 | 说明 |
|---|---|---|---|
| `calc_prnt_targets` | 读 | 全 caller | **PRNT 唯一权威引擎**。按年龄×性别分段 SDI 计算每日能量/蛋白质目标(含 CKD 分期/透析/素食/生长状态);并吸收 M5 特性:`is_edema` 水肿理想体重校正、`pd_glucose_kcal_per_day` 腹透葡萄糖供能扣减、Schofield 交叉校验 |
| `assess_intake_vs_target` | 读 | 全 caller | 对照 PRNT 目标评估 3 日饮食日记均值,给达成率、缺口、PEW 风险 |
| `upsert_food_diary` | 写 | parent_assistant / child_companion(MX-3) | 写入饮食条目并聚合 `diet_diary_3d`;条目养分由调用方经 M5 计算后填入 |
| `get_food_diary_summary` | 读 | 全 caller | 读取并聚合某患者饮食日记 |
| `assess_pew_risk` | 读 | 全 caller | 独立 PEW(蛋白质-能量消耗)风险筛查 |
| `calc_growth_zscore` | 读 | 全 caller | **增长 Z 评分(中国卫健委标准,非 WHO)**。按 WS/T 423-2022(7 岁以下 体重/身高/BMI 年龄别 SD)+ WS/T 612-2018(7-18 岁身高年龄别)计算 HAZ/WAZ/BAZ:Z=(实测-中位数)/SD,SD 由标准附录给出。HAZ 0-18 岁全覆盖;WAZ/BAZ 仅 <7 岁(7-18 体重/BMI 标准未提供则跳过并 warning)。返回 5 等级 + 营养状况分类,并给 PRNT `growth_status` 建议(failure/overweight/normal,供 `calc_prnt_targets` 输入) |
| `record_pew_risk` | 写 | 编排层(orchestrator/医生/营养) | **PEW 历史落库(ADR-007)**。每次 `assess_pew_risk` 后由编排层调用,按患者持久化一个历史点(date/score/level)。存储归属 M3,M4 仅作 facade 读取 |
| `get_pew_history` | 读 | 全 caller | **读取 PEW 历史(ADR-007)**。返回按日期升序的历史点 + 趋势(improving/worsening/stable/no_data),供 M9 报告与 M4 聚合时间线 |
> **PEW 历史归属(ADR-007)**:`assess_pew_risk` 是 M3 的产出,其历史时间线由 M3 拥有并落库(`data/pew_history_store.json`,按 patient_id 追加);M4 的 `get_pew_history` 仅作聚合 facade,从 M3 读取,**零跨包 import**。详见 `docs/decisions/ADR-007.md`。
## 关键口径(与 contracts/pcp-schema.json 一致)
- 能量 kcal、蛋白 g、体重 kg、身高 cm;无跨包调用。
- 能量初始 = SDI 100%:生长不良取上限、超重取下限、正常取中点。
- 蛋白质:目标取 SDI **上限**;绝对下限取 SDI **下限**(绝不可低于);透析额外补充(PD 0.15–0.30 / HD 0.10 g/kg/day)叠加于目标与下限;素食按倍数上调(蛋奶素 1.2 / 纯素 1.3)。
- PE 比:理想 7–12%,CKD 可接受 5.3–6.4%(需总蛋白 ≥100% 需求)。
## 验证
```bash
python -m py_compile src/a207_nutrition_assessment_mcp/*.py
python tests/test_tools.py # 83 断言全过
```
## 运行与部署
### 本地开发(最快验证)
```bash
fastmcp dev src/a207_nutrition_assessment_mcp/server.py
```
无需打包,直接起 stdio 服务,适合本地联调。
### 发布到 PyPI(与 his / lis / calc / router 完全同流程)
本项目 5 个 MCP **全部发布到 PyPI**(维护者 NFYY)。发布后裸 `uvx <包名>` 即可拉取,
GitHub Codespace / ModelScope 部署同理。报 `uvx ... was not found in the package registry`
**唯一原因就是该版本还没发到 PyPI**——把包构建并上传即可,和其他 4 个包一模一样。
> **命名说明**:本包 PyPI 发行名是 `a207-nutrition-assessment-mcp-nfyy`(带 `-nfyy` 后缀),
> 不是 `a207-nutrition-assessment-mcp`——后者在 PyPI 上已被他人占用(极小概率撞名),故加 `-nfyy` 规避。
> **Python 导入名仍为 `a207_nutrition_assessment_mcp`(不变)**,仅发行名 / 控制台脚本名带后缀。
> 其余 4 个包名未被占用,故无后缀。
```bash
# 1. 构建 sdist + wheel(产物落 dist/)
python -m build
# 2. 校验产物可上传(应 PASSED)
python -m twine check dist/*
# 3. 上传到 PyPI(需 NFYY 凭据:环境变量 PYPI_API_TOKEN 或 ~/.pypirc)
python -m twine upload dist/*
```
### 用 uvx 运行(已发布后 —— 与另外 4 个一致)
```bash
uvx a207-nutrition-assessment-mcp-nfyy # 裸名,和 his/lis/calc/router 一样
uvx --refresh a207-nutrition-assessment-mcp-nfyy # 强制刷新、重拉最新版
```
### 本地 / 离线开发(不发布也能跑,仅开发用)
- 包目录内直接跑:
```bash
uvx --from . a207-nutrition-assessment-mcp-nfyy
```
- 或装成本地工具后裸名可用:
```bash
uv tool install --from . a207-nutrition-assessment-mcp-nfyy
```
### GitHub / ModelScope 等远程部署
远程环境用**已发布的 PyPI 包**最直接(裸 `uvx a207-nutrition-assessment-mcp-nfyy`);
若想锁定 git 源,可用:
```bash
uvx --from "git+https://github.com/<owner>/<repo>.git" a207-nutrition-assessment-mcp-nfyy
```
确保 `<repo>` 指向**本包仓库**(根目录含 `pyproject.toml`),不要指向 A207 大仓根目录。
## 已知缺口(非阻断)
- 增长 Z 评分已按**中国卫健委标准**实现(WS/T 423-2022 + WS/T 612-2018,数据资产 `data/growth_ref_cn.json` 由 PDF 抽取生成)。**未采用 WHO 2007**(用户判定偏旧)——若未来需 WHO 口径,再补 LMS 参考表。
- WAZ/BAZ 仅覆盖 7 岁以下:WS/T 423 随附 7 岁以下体重/BMI 年龄别 SD 值;7-18 岁体重/BMI 标准未提供,故 7 岁以上跳过并给出 warning(未编造数据)。
- 本机未安装 fastmcp,`server.py` 仅 `py_compile` 静态校验,未实跑 stdio 服务。
TDQS
Scored across 5 tools
Each tool has a distinct primary role (target calculation, intake assessment, diary write, diary read, PEW screening), but assess_intake_vs_target and assess_pew_risk both address PEW risk, which could cause minor confusion.
Names use a mix of verbs (calc, assess, upsert, get) and two tools share the 'assess' prefix, so there's no single consistent pattern, though the names remain readable and descriptive.
Five tools is well-scoped for a nutrition assessment server, covering core calculations, assessments, and diary management without unnecessary bloat.
The tool set covers the main workflow: target calculation, intake-to-target assessment, diary input/retrieval, and independent PEW risk screening. Minor gaps like a dedicated patient-context tool or diary deletion are not critical for the stated purpose.