mcpField
F
fill-icmje-coi

fill-icmje-coi

github.com/aperivue文档处理353113 次安装1 天前更新
代码仓库

关于 fill-icmje-coi

用于根据标准 ICMJE COI 模板生成个性化表单的文档技能。它仅替换种子文件中已有的日期、姓名和标题,并通过审批与验证步骤保护披露项及作者隐私。

主要功能

  1. 01填写日期、姓名和标题
  2. 02使用预填的合成种子文件
  3. 03保留披露项和认证框
  4. 04设置审批与验证关卡
  5. 05提供作者分发表单指引

适用场景

  1. 01为合作者生成个人 ICMJE COI 表单
  2. 02分享前检查生成的表单
  3. 03协调作者审阅并收回签署表单

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aperivue/medsci-skills --skill fill-icmje-coi

安装后在 Claude Code 中输入/fill-icmje-coi确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

skill.yml
references/
seeds.md
scripts/
fill_icmje_coi.py
templates/
icmje_coi_seed_synthetic.docx
tests/
test_fill_icmje_coi.sh

详细介绍

填写 ICMJE COI 技能

官方 ICMJE coi_disclosure.docx 将每个字段都放在 Word 内容控件(SDT)中, python-docx 的 cell.text 会静默忽略这些内容。因此,脚本会在 word/document.xml 中进行字面字符串 替换,而这只有在目标字符串已存在时才有效——这就是随附预填充合成种子文件的原因。

核心原则(不得违反)

  1. 绝不从头编写 SDT XML。 只能替换已填充种子文件中已有的字符串,因为以编程方式创建内容控件很脆弱,且受 Word 版本影响。如果某个错误似乎需要修改种子文件结构,请停止并上报用户。
  2. 绝不使用或提交包含真实作者数据的种子文件。 随附的 templates/icmje_coi_seed_synthetic.docx 已清除个人身份信息(合成姓名、职称、日期;元数据为 ICMJE / Anonymous);真实人物的种子文件会通过 document.xml 和 docProps 泄露个人身份信息。 请将包含真实姓名的自定义种子文件保存在各项目的私有目录中;在启用任何种子文件前,请检查 unzip -p seed.docx docProps/core.xml 中是否包含真实姓名。
  3. 绝不修改 13 项披露内容或认证复选框。 脚本只替换日期、姓名和职称;☒ None 条目原样保留自种子文件。绝不要说脚本“处理了披露内容”:它只是克隆了种子文件,并未进行任何针对作者的披露判断。有实际披露内容的作者应在 Word 中自行编辑表格。
  4. 种子文件必须预先填好(☒ 全部选 None + 文本)。脚本不能用于空白的 ICMJE 模板。

如果目标期刊使用自己的声明表(例如 Elsevier Declaration of Interest、BMJ 的 ICMJE 衍生表格等),而非标准 ICMJE 表格,请跳过此技能——先查看作者指南。

执行

阶段 1 — 收集信息

向用户询问(或从对话中提取):

  1. 稿件标题(与标题页完全一致)
  2. 投稿日期(例如,“April 20, 2026”)
  3. 作者列表——按顺序排列,每个名额对应一个姓名:[(1, "Author One"), (2, "Author Two"), ...], 必须逐字取自稿件标题页或用户提供的列表
  4. 输出目录——通常为 submission/{journal}/icmje_forms/

关卡 1 — 用户批准。 生成任何内容前,先向用户展示收集到的信息。说明哪些作者会收到全部选 None 的表格,并提醒用户:有实际披露内容的作者必须改为在 Word 中自行填写表格。

阶段 2 — 生成
python3 ${CLAUDE_SKILL_DIR}/scripts/fill_icmje_coi.py \
  --seed ${CLAUDE_SKILL_DIR}/templates/icmje_coi_seed_synthetic.docx \
  --seed-name "Placeholder Author" \
  --seed-title "Placeholder Manuscript Title" \
  --seed-date "January 1, 2000" \
  --new-title "{exact manuscript title}" \
  --new-date "{submission date}" \
  --out-dir {out_dir} \
  --authors '[[1,"Author One"],[2,"Author Two"],...]'

脚本会为每位作者写入一个 ICMJE_COI_{NN}_{Name}.docx,如果未找到任何种子字符串,则以非零状态码退出。如果任何 --seed-* 或 --new-* 值或作者姓名为空,脚本会在写入任何内容前以状态码 2 退出:空种子字符串不会匹配任何内容,导致每份表格都保留种子文件中的值。

阶段 3 — 验证

对每个生成的 docx 确认:☒ 的数量 = 14(13 项披露内容 + 最终认证);“None”披露项 = 13;“Your Name:” 后的姓名和“Manuscript Title:” 后的标题正确;没有残留种子字符串。SEED 必须与阶段 2 中使用的 --seed-name、--seed-title 和 --seed-date 值完全一致(以下随附占位值,或自定义种子文件中的原始字符串);TITLE 必须是 --new-title 的值。

python3 - {out_dir}/*.docx <<'PY'
import sys, zipfile
SEED = ("Placeholder Author", "Placeholder Manuscript Title", "January 1, 2000")  # = --seed-* values
TITLE = "{exact manuscript title}"                                                 # = --new-title
assert all(s.strip() for s in SEED) and TITLE.strip(), "empty SEED/TITLE value"
for f in sys.argv[1:]:
    xml = zipfile.ZipFile(f).read("word/document.xml").decode("utf-8")
    assert xml.count("☒") == 14, f"{f}: bad ☒ count"
    assert xml.count(">None<") + xml.count(">None ") == 13, f"{f}: bad None count"
    for ph in SEED:
        assert ph not in xml, f"{f}: seed leak {ph!r}"
    t = TITLE.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
    assert t in xml, f"{f}: title missing"
    print("✓", f)
PY

此代码片段无法定位 “Your Name:” 字段中的姓名;请打开每份表格确认姓名。

关卡 2 — 用户审核。 将验证结果展示给用户,然后再移交文件。

阶段 4 — 发送指引

将以下内容提供给用户,供其随个性化表格一并发送;内容应使用各位合著者的语言:

请查看随附的 ICMJE COI 表格。

  • 如果内容正确,请签名并回复 PDF。
  • 如果需要修改,请编辑/勾选相关项目、签名并回复。
  • 如果完全无需修改,请回复“no changes”,并另行返回已签名的 PDF。

所有作者都可以通过一封草稿邮件批量发送(例如,gws gmail draft)。关卡 3 — 用户 须先批准此批量邮件,之后才能发送任何内容。

自定义种子和种子来源

当用户需要自定义种子(使用不同于默认的措辞,或在第 2/3 项中预填常见补助金),或询问随附种子是如何制作的,请阅读 ${CLAUDE_SKILL_DIR}/references/seeds.md。

评论

支持 Markdown