{"slug":"fill-icmje-coi","title":"fill-icmje-coi","summary":"Batch-generate per-author ICMJE Conflict of Interest Disclosure Forms (`coi_disclosure.docx`) for manuscript submission. Pre-fills all 13 disclosure items as \"☒ None\" + final certification ☒ using a synthetic seed template shipped with the skill, then clones the seed per author w","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-14T20:48:16.199089Z","repo":{"url":"https://github.com/Aperivue/medsci-skills","stars":318,"forks":75,"license":"MIT","updatedAt":"2026-09-27T05:05:17Z"},"bodyHtml":"<hr>\n<h2>name: fill-icmje-coi\ndescription: &gt;\nBatch-generate per-author ICMJE Conflict of Interest Disclosure Forms\n(<code>coi_disclosure.docx</code>) for manuscript submission. Pre-fills all 13 disclosure\nitems as \"☒ None\" + final certification ☒ using a synthetic seed template\nshipped with the skill, then clones the seed per author with Date, Name, and\nManuscript Title replaced. Designed for the common case of hospital-based\nobservational research where no author has real financial conflicts; the\ncirculated forms become \"reply 'no changes' + sign\" for most authors and only\nflag those who need to amend.\ntriggers: ICMJE, COI form, conflict of interest form, disclosure form, coi_disclosure.docx, 이해상충, 이해상충 폼, icmje 폼, 저자 동의서, submission forms\ntools: Read, Write, Edit, Bash, Grep, Glob\nmodel: inherit</h2>\n<h1>Fill-ICMJE-COI Skill</h1>\n<p>You are helping a researcher prepare ICMJE Conflict of Interest Disclosure Forms\nfor every co-author on a manuscript about to be submitted to an ICMJE member\njournal (CHEST, NEJM, JAMA, Lancet, Radiology, etc.). This skill batch-generates\none personalized <code>.docx</code> per author from a synthetic all-None seed shipped with\nthe skill, avoiding 10–20 minutes of repetitive Word clicking per author.</p>\n<h2>Why This Skill Exists</h2>\n<p>The official ICMJE <code>coi_disclosure.docx</code> puts every field inside Word Content\nControls (Structured Document Tags, a.k.a. SDTs). Naive <code>python-docx</code>\nmanipulation of <code>cell.text</code> silently ignores SDT content, so the straightforward\nprogrammatic approach does not work. The historical workaround was to open the\ntemplate in Word and manually fill each author's form (21 authors × 13\ncheckboxes × 2 clicks = ~500 clicks). This skill replaces that by operating\ndirectly on <code>word/document.xml</code> inside the docx zip and doing literal-string\nreplacement — but that requires the target strings to already exist in the\nseed, so the skill ships a pre-filled synthetic seed.</p>\n<p><strong>Effect:</strong> a full author roster auto-fills in seconds from the synthetic seed, with\nzero Word clicks.</p>\n<h2>Core Principles (Do Not Violate)</h2>\n<ol>\n<li><strong>Never author SDT XML from scratch.</strong> Only replace existing strings in an\nalready-populated seed. Creating Content Controls programmatically is\nfragile and Word-version-dependent.</li>\n<li><strong>Never ship a real author's filled form as the seed.</strong> The template\ndirectory contains <code>icmje_coi_seed_synthetic.docx</code> with all PII scrubbed\n(synthetic name, title, date; metadata reset to <code>ICMJE</code> / <code>Anonymous</code>).\nReal-person seeds leak PII through both document.xml and docProps.</li>\n<li><strong>Never modify the 13 disclosure items or certification checkbox.</strong> The\nscript only replaces Date/Name/Title. If any author has a real disclosure,\nthey must edit in Word manually — the skill's purpose is the common\nall-None case.</li>\n<li><strong>Always verify before circulation.</strong> Each output must have 14 × ☒ and\n13 × \"None\" in document.xml. The script runs this check implicitly by\npreserving the seed structure; a post-generation grep is cheap insurance.</li>\n</ol>\n<h2>When to Use This Skill</h2>\n<ul>\n<li>Manuscript accepted for submission to an ICMJE member journal</li>\n<li>3+ co-authors with no real financial conflicts</li>\n<li>Editorial Manager / submission portal requires per-author ICMJE disclosure docx</li>\n<li>About to hand-fill the same form 6–21 times</li>\n</ul>\n<p>Skip this skill when:</p>\n<ul>\n<li>Any author has a real financial disclosure to list (they fill their own form\nin Word; this skill does not help)</li>\n<li>Target journal uses its own declaration form (not ICMJE) — check author\nguidelines first</li>\n<li>Only 1 author (not worth the setup)</li>\n</ul>\n<h2>Execution</h2>\n<h3>Phase 1 — Intake</h3>\n<p>Ask the user (or extract from conversation):</p>\n<ol>\n<li><strong>Manuscript title</strong> (exact, as it will appear on title page)</li>\n<li><strong>Submission date</strong> (e.g., \"April 20, 2026\")</li>\n<li><strong>Author list</strong> — ordered, one name per slot: <code>[(1, \"Author One\"), (2, \"Author Two\"), ...]</code></li>\n<li><strong>Output directory</strong> — typically <code>submission/{journal}/icmje_forms/</code></li>\n</ol>\n<p>Present the intake back to the user for confirmation (<strong>Gate 1 — user approval</strong>)\nbefore generating anything. Explicitly name which authors will get all-None\nforms and remind that anyone with a real disclosure must instead fill their own\nform in Word.</p>\n<h3>Phase 2 — Generate</h3>\n<p>Invoke the script with the synthetic seed that ships with this skill:</p>\n<pre><code>python3 ${SKILL_DIR}/scripts/fill_icmje_coi.py \\\n  --seed ${SKILL_DIR}/templates/icmje_coi_seed_synthetic.docx \\\n  --seed-name \"Placeholder Author\" \\\n  --seed-title \"Placeholder Manuscript Title\" \\\n  --seed-date \"January 1, 2000\" \\\n  --new-title \"{exact manuscript title}\" \\\n  --new-date \"{submission date}\" \\\n  --out-dir {out_dir} \\\n  --authors '[[1,\"Author One\"],[2,\"Author Two\"],...]'\n</code></pre>\n<p>The script exits nonzero if any seed string is not found, preventing silent\nfailures.</p>\n<h3>Phase 3 — Verify</h3>\n<p>For each generated docx, confirm:</p>\n<ul>\n<li>☒ count = 14 (13 disclosure items + 1 final certification)</li>\n<li>\"None\" count = 13</li>\n<li>Correct name appears after \"Your Name:\"</li>\n<li>Correct title appears after \"Manuscript Title:\"</li>\n<li>No leakage of seed placeholder strings (<code>Placeholder Author</code>, <code>Placeholder Manuscript Title</code>, <code>January 1, 2000</code>)</li>\n</ul>\n<p>Verification one-liner:</p>\n<pre><code>for f in {out_dir}/*.docx; do\n  python3 -c \"\nimport zipfile, sys\nxml = zipfile.ZipFile('$f').read('word/document.xml').decode()\nassert xml.count('☒') == 14, 'bad ☒ count'\nassert xml.count('None') == 13, 'bad None count'\nassert 'Placeholder' not in xml, 'seed leak'\nprint('✓ $f')\n\"\ndone\n</code></pre>\n<p>Present verification results to user (<strong>Gate 2 — user review</strong>) before handing\noff files.</p>\n<h3>Phase 4 — Circulation Guidance</h3>\n<p>Provide the user with circulation copy to send with each personalized form (write it in the co-authors' preferred language — Korean is common for Korean co-authors):</p>\n<blockquote>\n<p>Please review the attached ICMJE COI form.</p>\n<ul>\n<li>If the contents are correct, sign and reply with a PDF.</li>\n<li>If a change is needed, edit/check the relevant item, sign, and reply.</li>\n<li>If there are no changes at all, reply \"no changes\" and return the signed PDF separately.</li>\n</ul>\n</blockquote>\n<p>All 6–21 authors can be emailed in one <code>gws gmail draft</code> batch (<strong>Gate 3 — user\napproves batch send</strong> before actually dispatching).</p>\n<h2>Custom Seeds</h2>\n<p>If the user wants a custom seed (e.g., different default wording, pre-filled\nitems 2/3 with a common grant), generate it once as follows:</p>\n<ol>\n<li>Open <code>templates/icmje_coi_seed_synthetic.docx</code> in Word</li>\n<li>Edit the desired fields</li>\n<li>Save as a new file under <code>{project}/submission/{journal}/</code> or a\nlocal private seeds directory (outside this repo)</li>\n<li>Pass <code>--seed /path/to/custom.docx</code> to the script along with the new seed\nvalues for <code>--seed-name</code>, <code>--seed-title</code>, <code>--seed-date</code></li>\n</ol>\n<p>Do NOT commit custom seeds that contain real author names to the public\nmedsci-skills repo. Keep them in private per-project directories or a\nlocal private seeds directory (outside this repo).</p>\n<h2>Seed Provenance (how the shipped synthetic seed was created)</h2>\n<p>The shipped <code>templates/icmje_coi_seed_synthetic.docx</code> was derived from the\nofficial ICMJE <code>coi_disclosure.docx</code> through the following steps:</p>\n<ol>\n<li>Downloaded the official ICMJE template (<code>https://www.icmje.org/downloads/coi_disclosure.docx</code>)</li>\n<li>Opened in Word, typed placeholder values:\n<ul>\n<li>Date: <code>January 1, 2000</code></li>\n<li>Your Name: <code>Placeholder Author</code></li>\n<li>Manuscript Title: <code>Placeholder Manuscript Title</code></li>\n</ul>\n</li>\n<li>Checked each of the 13 disclosure items' \"None\" option (14 checkboxes total including final certification)</li>\n<li>Typed \"None\" in the \"Name all entities\" column for each item</li>\n<li>Scrubbed <code>docProps/core.xml</code> metadata: creator=<code>ICMJE</code>, lastModifiedBy=<code>Anonymous</code>, dates=<code>2000-01-01</code></li>\n<li>Scrubbed <code>docProps/app.xml</code> Company/Manager fields</li>\n</ol>\n<p>No real author's disclosure data is embedded. The file is safe to redistribute.</p>\n<h2>Anti-Hallucination</h2>\n<ul>\n<li><strong>Never invent author names, email addresses, or ORCIDs.</strong> Pull them\nverbatim from the manuscript's title page or the user's author list.</li>\n<li><strong>Never claim to have filled the 13 disclosure items</strong> — they come from the\nseed unchanged. If the user asks whether the script \"handled the\ndisclosures,\" the honest answer is \"it cloned the seed's ☒ None entries;\nno author-specific disclosure reasoning happened.\"</li>\n<li><strong>Never promise the script works on a blank ICMJE template.</strong> It does not —\nthe seed must be pre-filled with all-None ☒ + text.</li>\n<li><strong>Never edit seed XML by authoring new SDT elements.</strong> If an error requires\naltering the seed structure, stop and escalate to the user; Word-generated\nSDT XML is the ground truth.</li>\n<li><strong>Never push private seed files to public repos.</strong> If the user asks to\npromote a custom seed, verify by <code>unzip -p seed.docx docProps/core.xml</code> that\nno real names remain in metadata before committing.</li>\n</ul>\n<h2>References</h2>\n<ul>\n<li>ICMJE Disclosure of Interest page: <a href=\"https://www.icmje.org/disclosure-of-interest/\">https://www.icmje.org/disclosure-of-interest/</a></li>\n<li>ICMJE COI form download: <a href=\"https://www.icmje.org/downloads/coi_disclosure.docx\">https://www.icmje.org/downloads/coi_disclosure.docx</a></li>\n<li>ICMJE FAQ on disclosure forms: <a href=\"https://www.icmje.org/about-icmje/faqs/conflict-of-interest-disclosure-forms/\">https://www.icmje.org/about-icmje/faqs/conflict-of-interest-disclosure-forms/</a></li>\n<li>$/scripts/fill_icmje_coi.py — generator CLI + Python API</li>\n<li>$/templates/icmje_coi_seed_synthetic.docx — shipped synthetic seed (PII-free)</li>\n</ul>\n<h2>Related Skills</h2>\n<table>\n<thead>\n<tr>\n<th>Skill</th>\n<th>Relationship</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>write-paper</code></td>\n<td>Completes the manuscript whose title is used as input</td>\n</tr>\n<tr>\n<td><code>find-journal</code></td>\n<td>Identifies whether the target journal requires ICMJE form</td>\n</tr>\n<tr>\n<td><code>add-journal</code></td>\n<td>Journal profile records whether ICMJE form is required</td>\n</tr>\n<tr>\n<td><code>revise</code></td>\n<td>After revision, updated title may require re-generating forms</td>\n</tr>\n</tbody>\n</table>\n<h2>Non-Goals</h2>\n<ul>\n<li>Filling journal-specific disclosure forms (Elsevier Declaration of Interest,\nBMJ ICMJE derivative, etc.) — only the canonical ICMJE form</li>\n<li>Handling authors with real disclosures — those authors fill their own forms</li>\n<li>Signing the forms — authors sign manually after receiving their personalized docx</li>\n<li>Uploading to Editorial Manager — that remains manual, post-signature</li>\n</ul>\n","files":[{"path":"scripts/fill_icmje_coi.py","sizeBytes":5346,"isText":true},{"path":"SKILL.md","sizeBytes":9954,"isText":true},{"path":"skill.yml","sizeBytes":1413,"isText":true},{"path":"templates/icmje_coi_seed_synthetic.docx","sizeBytes":30263,"isText":false},{"path":"tests/test_fill_icmje_coi.sh","sizeBytes":2982,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-14T20:49:33.898686Z","sha256":"56268D31CA6C8EAE999D6CE9ED3945D67C9F8EC1A6A08E70BA13B71AD2F7AC75","sizeBytes":36667},"review":null,"source":{"repositoryUrl":"https://github.com/Aperivue/medsci-skills","path":"skills/fill-icmje-coi","license":"MIT","commit":"5599b724675a1d788e03cd58dabd3db7c68ca86b","subtreeSha":"643B5A2B3B1D8D102E31F8DBAB98ED374FB4D5216B51A904A95C8D0EB62EBD77","lastSyncedAt":"2026-09-27T19:46:33.449845Z"},"reviewedAt":"2026-09-14T20:55:54.64433Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/Aperivue/medsci-skills/tree/main/skills/fill-icmje-coi"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install aperivue-medsci-skills@llmmart"},{"target":"git","command":"git clone https://github.com/Aperivue/medsci-skills.git"}]}