Skip to content
Back to skills

Fill Icmje Coi

ASecurity

Use when each author needs an ICMJE Conflict of Interest disclosure form (coi_disclosure.docx) for submission. Clones a pre-filled synthetic seed with every item marked None and replaces only date, name and manuscript title, so most authors just confirm or amend.

  • 327 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
data-aipythonbash

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 2, 2026

npx -y skills add Aperivue/medsci-skills --skill fill-icmje-coi --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fill Icmje Coi?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fill Icmje Coi
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aperivue-fill-icmje-coi/badge)](https://www.skillsdirectory.com/skills/aperivue-fill-icmje-coi)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fill-icmje-coi
description: Use when each author needs an ICMJE Conflict of Interest disclosure form (coi_disclosure.docx) for submission. Clones a pre-filled synthetic seed with every item marked None and replaces only date, name and manuscript title, so most authors just confirm or amend.
metadata:
  triggers: "ICMJE, COI form, conflict of interest form, disclosure form, coi_disclosure.docx, 이해상충, 이해상충 폼, icmje 폼, 저자 동의서, submission forms"
---

# Fill-ICMJE-COI Skill

The official ICMJE `coi_disclosure.docx` keeps every field inside Word Content Controls (SDTs),
which `python-docx` `cell.text` silently ignores. The script therefore does literal-string
replacement in `word/document.xml`, which only works when the target strings already exist — hence
the shipped pre-filled synthetic seed.

## Core Principles (Do Not Violate)

1. **Never author SDT XML from scratch.** Only replace existing strings in an already-populated
   seed, because programmatic Content Controls are fragile and Word-version-dependent. If an error
   seems to require altering the seed structure, stop and escalate to the user.
2. **Never use or commit a seed that contains a real author's data.** The shipped
   `templates/icmje_coi_seed_synthetic.docx` is PII-scrubbed (synthetic name, title, date; metadata
   `ICMJE` / `Anonymous`); real-person seeds leak PII through both `document.xml` and `docProps`.
   Keep custom seeds with real names in private per-project directories, and before promoting any
   seed check `unzip -p seed.docx docProps/core.xml` for real names.
3. **Never modify the 13 disclosure items or the certification checkbox.** The script replaces only
   Date, Name and Title; the ☒ None entries come from the seed unchanged. Never say the script
   "handled the disclosures": it cloned the seed, and no author-specific disclosure reasoning
   happened. An author with a real disclosure edits their own form in Word.
4. **The seed must be pre-filled** (all-None ☒ + text). The script does not work on a blank ICMJE
   template.

Skip this skill when the target journal uses its own declaration form (Elsevier Declaration of
Interest, a BMJ ICMJE derivative, etc.) rather than the canonical ICMJE form — check the author
guidelines first.

## Execution

### Phase 1 — Intake

Ask the user (or extract from the conversation):
1. **Manuscript title** (exact, as on the title page)
2. **Submission date** (e.g., "April 20, 2026")
3. **Author list** — ordered, one name per slot: `[(1, "Author One"), (2, "Author Two"), ...]`,
   taken verbatim from the manuscript title page or the user's list
4. **Output directory** — typically `submission/{journal}/icmje_forms/`

**Gate 1 — user approval.** Present the intake back before generating anything. Name which authors
will get all-None forms and remind the user that anyone with a real disclosure must fill their own
form in Word instead.

### Phase 2 — Generate

```bash
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"],...]'
```

It writes one `ICMJE_COI_{NN}_{Name}.docx` per author and exits nonzero if any seed string is not
found. It exits 2, before writing anything, if any `--seed-*` or `--new-*` value or author name is
empty: an empty seed string would match nothing and leave the seed's value in every form.

### Phase 3 — Verify

For each generated docx confirm: ☒ count = 14 (13 disclosure items + final certification);
"None" disclosures = 13; the correct name after "Your Name:" and title after "Manuscript Title:";
no seed strings left. `SEED` must be the exact `--seed-name`, `--seed-title` and `--seed-date`
values used in Phase 2 (the shipped placeholders below, or a custom seed's own strings); `TITLE`
must be the `--new-title` value.

```bash
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
```

This snippet does not locate the name inside the "Your Name:" field; confirm the name by opening
each form.

**Gate 2 — user review.** Present the verification results before handing off the files.

### Phase 4 — Circulation Guidance

Give the user this copy to send with each personalized form, written in the co-authors' language:

> Please review the attached ICMJE COI form.
> - If the contents are correct, sign and reply with a PDF.
> - If a change is needed, edit/check the relevant item, sign, and reply.
> - If there are no changes at all, reply "no changes" and return the signed PDF separately.

All authors can be emailed in one draft batch (e.g., `gws gmail draft`). **Gate 3 — the user
approves the batch** before anything is sent.

## Custom Seeds and Seed Provenance

Read `${CLAUDE_SKILL_DIR}/references/seeds.md` when the user wants a custom seed (different default wording, a common
grant pre-filled in items 2/3) or asks how the shipped seed was made.

Files in this skill

  • SKILL.md9.6 KB
  • scripts/fill_icmje_coi.py5.2 KB
  • templates/icmje_coi_seed_synthetic.docx29.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.