# Packet checklist and index generator

> Produce the evidence-bundle manifest for a denial-appeal or prior-authorization packet: required vs. optional attachments by denial category, service setting, and specialty; which items are attached; which are missing; and the structured manifest persisted to the workspace. Enforces inpatient-specific rules (complete medical records for acute inpatient appeals) and DMEPOS documentation lists. Consumes the normalized case record plus the drafted LOMN/appeal letter and their evidence map; produces the checklist, the packet-manifest JSON, and the human-readable packet index.



Tags: Healthcare, Prior Authorization, Denial Appeals, Packet Assembly


## Example Prompts

- Generate the required-attachments checklist for this step-therapy denial
- Write the packet manifest for my appeal and tell me what's missing
- What attachments do I need for an inpatient DRG level-of-care appeal to Anthem?
- Build the packet index for the case I just drafted

URL: https://rakenne.app/skills/packet-checklist-and-index-generator/index.md

Try this skill: https://rakenne.app/a/?skill=packet-checklist-and-index-generator



## Overview

Produce the evidence-bundle manifest for a denial-appeal or prior-authorization packet: required vs. optional attachments by denial category, service setting, and specialty; which items are attached; which are missing; and the structured manifest persisted to the workspace. Enforces inpatient-specific rules (complete medical records for acute inpatient appeals) and DMEPOS documentation lists. Consumes the normalized case record plus the drafted LOMN/appeal letter and their evidence map; produces the checklist, the packet-manifest JSON, and the human-readable packet index.

## What it covers

- **Denial-category-driven checklist.** The required set is driven by the denial category, not by specialty. A step-therapy denial, a DRG/level-of-care denial, and a coding edit produce three different packets even at the same clinic.
- **Anthem inpatient-records rule.** When `service_setting='inpatient'`, the complete inpatient medical record (H&P, daily progress notes, operative notes, discharge summary) is added to the required set. Anthem makes this explicit; most commercial payers follow.
- **DMEPOS overlay.** When `specialty='dmepos'`, the face-to-face encounter note, detailed written order, proof of delivery, condition-specific medical-necessity documentation, and the LCD/NCD excerpt are added as required items.
- **Missing-required gating.** `attachment_manifest_writer` returns `isError: true` while any required item is unmatched — the packet cannot be exported until the gap is closed or the item is explicitly acknowledged and replaced.
- **Audit-ready manifest JSON.** Every packet writes `./packet/packet-manifest-{case_id}.json` with the checklist, attachments, missing-required list, and warnings — the record a HIPAA-sensitive buyer shows when asked to prove the packet was complete at submission.
- **Claim-to-source index integration.** The rendered `./packet/packet-index-{case_id}.md` appends the `clinical-claim-evidence-mapper` output so the reviewer can follow every clinical claim in the appeal letter back to a chart excerpt.

## Example conversation

> **You:** The appeal letter and LOMN for case 2026-0417-A are both drafted and the claim-to-source index is clean. Build the packet for me — it's the Anthem inpatient spinal fusion.
>
> **Agent:** Reading `case.json`. Branch `clinical-appeal`, appeal level `1st-internal`, categories `["not-medically-necessary", "lack-of-prior-auth", "drg-level-of-care"]`, service setting `inpatient`, specialty overlay `msk`. Calling `packet_checklist_generator` now.
>
> **Agent:** Checklist returned. Required set has 11 items: appeal letter, denial-letter copy, LOMN, diagnosis confirmation, prior-therapy records, objective findings, FDA label or specialty-society guideline, authorization-attempt timeline, no-auth explanation, InterQual/MCG/Milliman/LSIP criteria mapping, attending physician's clinical summary, and **complete inpatient medical record** (Anthem inpatient rule). Optional set includes peer-reviewed publications and the payer policy excerpt. Excluded: generic medical-necessity prose for the DRG/level-of-care block.
>
> **You:** Uploading what I have now — appeal letter, LOMN, the denial letter, MRI 2026-02-03, PT evaluation 2026-03-10, ED note 2026-03-28, NASS 2024 excerpt, pharmacy fills for gabapentin and duloxetine, and the InterQual LSIP worksheet. The inpatient record upload is coming separately from our HIM team.
>
> **Agent:** Calling `attachment_manifest_writer` with 9 attachments and the checklist. **Result: `isError: true`.** `missing_required` has three items — "Complete inpatient medical record" (inpatient-medical-record), "Attending physician's clinical summary" (attending-clinical-summary), and the H&P + operative note + discharge summary that normally ship inside the complete record. Warnings flag that Anthem's rule expects all three inpatient source documents; a partial record will be read as incomplete. Packet export blocked.
>
> **You:** HIM just dropped the full inpatient record at `./uploads/inpatient-record-2026-03-28-to-2026-03-31.pdf` (208 pages). The attending's summary letter is at `./uploads/attending-summary-dr-shah-2026-04-19.pdf`.
>
> **Agent:** Adding both attachments with categories `inpatient-medical-record` and `attending-clinical-summary`. Re-running `attachment_manifest_writer`. **Result: `ok: true`**, `missing_required: []`, 0 warnings. Manifest written to `./packet/packet-manifest-2026-0417-A.json`.
>
> **Agent:** Rendering `./packet/packet-index-2026-0417-A.md` with the submission-order attachment list grouped by category, page counts, and the claim-to-source index from `clinical-claim-evidence-mapper`. Appending the audit-log entry: packet manifest finalized, 11/11 required items matched, 208-page inpatient record included. Ready for `submission-companion-sheet`.

## Sample output excerpt

The skill produces two artifacts: the structured manifest JSON at `./packet/packet-manifest-{case_id}.json` and the reviewer-first packet index at `./packet/packet-index-{case_id}.md`.

---

```json
{
  "case_id": "2026-0417-A",
  "written_at": "2026-04-21T19:42:08Z",
  "denial_categories": ["not-medically-necessary", "lack-of-prior-auth", "drg-level-of-care"],
  "appeal_branch": "clinical-appeal",
  "service_setting": "inpatient",
  "specialty": "msk",
  "checklist": {
    "required": [
      { "item": "Appeal letter", "category": "appeal-letter", "rationale": "Top letter of the packet; names the denial and the rebuttal." },
      { "item": "Denial letter or EOB copy", "category": "denial-letter-copy", "rationale": "Reviewer must cross-reference the case file by denial date and payer reference number." },
      { "item": "Letter of medical necessity", "category": "lomn", "rationale": "Clinical spine of the appeal; reviewer reads this after the top letter." },
      { "item": "Prior-therapy records", "category": "prior-therapy-records", "rationale": "Progress notes or pharmacy fills supporting each prior-therapy entry in the LOMN." },
      { "item": "Objective findings (labs, imaging, disease scores)", "category": "objective-findings", "rationale": "Backs the specific findings the LOMN cites." },
      { "item": "Authorization-attempt timeline", "category": "auth-attempt-timeline", "rationale": "Call records, portal screenshots, fax receipts showing the PA request was initiated." },
      { "item": "Complete inpatient medical record", "category": "inpatient-medical-record", "rationale": "Anthem and most commercial payers require the full record for DRG / level-of-care appeals." },
      { "item": "InterQual / MCG / Milliman / LSIP criteria mapping", "category": "level-of-care-criteria", "rationale": "Maps severity-of-illness + intensity-of-service to the acute-inpatient criteria." },
      { "item": "Attending physician's clinical summary", "category": "attending-clinical-summary", "rationale": "Supports acute inpatient over observation." }
    ],
    "optional": [
      { "item": "Peer-reviewed publication excerpts", "category": "peer-reviewed-publications", "rationale": "Strengthens off-label or emerging-indication use." },
      { "item": "Payer policy / coverage-criteria excerpt", "category": "payer-policy-excerpt", "rationale": "Maps the LOMN against the payer's own definition." },
      { "item": "Peer-to-peer review transcript", "category": "peer-to-peer-transcript", "rationale": "Include when a P2P was held before the formal appeal." }
    ],
    "excluded": [
      { "item": "Entire chart dump", "reason": "Reviewers skip over padding; attach focused excerpts the LOMN cites." },
      { "item": "Generic medical-necessity prose", "reason": "Level-of-care disputes require specific criteria-mapping language (InterQual/MCG/Milliman/LSIP), not general necessity language." }
    ]
  },
  "attachments": [
    { "label": "Appeal letter — case 2026-0417-A", "doc_path": "drafts/appeal-2026-0417-A.md", "category": "appeal-letter", "pages": "1-3", "date": "2026-04-21" },
    { "label": "Letter of medical necessity", "doc_path": "drafts/lomn-2026-0417-A.md", "category": "lomn", "pages": "1-4", "date": "2026-04-20" },
    { "label": "Anthem denial letter 2026-04-12", "doc_path": "denials/anthem_20260412.pdf", "category": "denial-letter-copy", "pages": "1-3", "date": "2026-04-12" },
    { "label": "Complete inpatient record 2026-03-28 to 2026-03-31", "doc_path": "uploads/inpatient-record-2026-03-28-to-2026-03-31.pdf", "category": "inpatient-medical-record", "pages": "1-208", "date": "2026-03-31" },
    { "label": "Attending clinical summary — Dr. P. Shah", "doc_path": "uploads/attending-summary-dr-shah-2026-04-19.pdf", "category": "attending-clinical-summary", "pages": "1-2", "date": "2026-04-19" },
    { "label": "InterQual LSIP 2026.1 worksheet", "doc_path": "uploads/interqual-lsip-worksheet-2026-03-28.pdf", "category": "level-of-care-criteria", "pages": "1-6", "date": "2026-03-28" },
    { "label": "MRI lumbar spine 2026-02-03", "doc_path": "inputs/mri-2026-02-03.pdf", "category": "objective-findings", "pages": "1-2", "date": "2026-02-03" },
    { "label": "PT evaluation 2026-03-10 (ODI 56%)", "doc_path": "inputs/pt-eval-2026-03-10.pdf", "category": "objective-findings", "pages": "1-2", "date": "2026-03-10" },
    { "label": "Gabapentin + duloxetine pharmacy fills", "doc_path": "inputs/pharmacy-fills-2025-08-to-2026-02.pdf", "category": "prior-therapy-records", "pages": "1-4", "date": "2026-02-28" },
    { "label": "NASS 2024 Lumbar Fusion Coverage Criteria", "doc_path": "inputs/nass-2024-lumbar-fusion.pdf", "category": "guideline-or-label", "pages": "12-18", "date": "2024-11-01" },
    { "label": "Authorization-attempt timeline (fax + portal)", "doc_path": "uploads/auth-attempt-timeline-2026-03-28.pdf", "category": "auth-attempt-timeline", "pages": "1-3", "date": "2026-03-28" },
    { "label": "No-auth explanation — emergent admission", "doc_path": "drafts/no-auth-explanation-2026-0417-A.md", "category": "no-auth-explanation", "pages": "1", "date": "2026-04-21" }
  ],
  "missing_required": [],
  "warnings": [],
  "claim_to_source_index_path": "clinical-claims/2026-0417-A.json"
}
```

Rendered packet index (`./packet/packet-index-2026-0417-A.md`):

```markdown
# Appeal packet — case 2026-0417-A

**RE:** Level 1 internal appeal — medical-necessity + retroactive-authorization + DRG / level-of-care
Member: Jane D. | Member ID: YRK8827461 | DOB: 1968-05-14
Claim: C-9918274461 | Dates of service: 2026-03-28 to 2026-03-31
Denial date: 2026-04-12 | Payer reference: CA-2026-0412-88174
Payer: Anthem Blue Cross Blue Shield — Anthem Clinical Appeals

Packet manifest: `packet/packet-manifest-2026-0417-A.json`
Attachments: 12 documents, 238 pages total.

## Attachments (submission order)

### Denial correspondence
1. Anthem denial letter 2026-04-12 — 3 pages — `denials/anthem_20260412.pdf`

### Appeal + clinical spine
2. Appeal letter — case 2026-0417-A — 3 pages — 2026-04-21 — `drafts/appeal-2026-0417-A.md`
3. Letter of medical necessity — 4 pages — 2026-04-20 — `drafts/lomn-2026-0417-A.md`
4. Attending clinical summary — Dr. P. Shah — 2 pages — 2026-04-19

### Clinical records
5. Complete inpatient record 2026-03-28 to 2026-03-31 — 208 pages
6. MRI lumbar spine 2026-02-03 — 2 pages
7. PT evaluation 2026-03-10 (ODI 56%) — 2 pages
8. Gabapentin + duloxetine pharmacy fills — 4 pages

### Payer forms
9. Authorization-attempt timeline (fax + portal) — 3 pages — 2026-03-28
10. No-auth explanation — emergent admission — 1 page — 2026-04-21

### Evidence
11. InterQual LSIP 2026.1 worksheet — 6 pages — 2026-03-28
12. NASS 2024 Lumbar Fusion Coverage Criteria — pages 12-18

## Claim-to-source index

(Appended from `clinical-claims/2026-0417-A.json` — 12 of 12 clinical claims cited, 0 orphans.)

| # | Claim | Type | Source document | Page |
|---|---|---|---|---|
| 1 | The patient carries a diagnosis of chronic low back pain (M54.16). | diagnosis | inputs/chart-note-2026-02-12.pdf | 2 |
| 2 | The patient failed a 12-week trial of gabapentin at 900 mg TID. | prior-therapy | inputs/chart-note-2025-11-03.pdf | 1 |
| 3 | MRI lumbar spine (2026-02-03) demonstrated L4-L5 disc extrusion with right S1 nerve-root impingement. | lab-or-imaging | inputs/mri-2026-02-03.pdf | 2 |
| 4 | ODI score was 56% on 2026-03-10, indicating severe functional limitation. | clinical-score | inputs/pt-eval-2026-03-10.pdf | 1 |
```

<!-- /excerpt -->

## Extension tools and validations

The skill registers two deterministic tools. Both key off `case_id` and are workspace-scoped — paths resolving outside the project root are rejected.

### `packet_checklist_generator`

- **Inputs:** `denial_categories[]` (from `denial_classifier`; pass `[]` for PA requests with no denial yet), `appeal_branch` (`clinical-appeal`, `claim-reconsideration`, `nomnc-expedited-determination`, or `pa-request`), `service_setting` (`inpatient`, `outpatient`, `post-service`), optional `specialty` (`msk`, `oncology`, `gi-biologics`, `dermatology`, `rheumatology`, `behavioral-health`, `pulmonary`, `dmepos`).
- **What it produces:** a `{ required, optional, excluded }` object with one entry per item. Each `required` and `optional` item carries `{ item, category, rationale }`; each `excluded` item carries `{ item, reason }`. The required set is the union of the branch's cross-cutting items (appeal letter + denial-letter copy for clinical appeals; claim-reconsideration form + PRA for reconsiderations; BFCC-QIO form + NOMNC/DENC + plan of care + progress notes + functional-status docs for NOMNC; PA request form for PA requests), the denial-category-driven items (13 categories covering medical necessity, experimental/investigational, step-therapy, off-formulary, DRG/level-of-care, coding-edit, COB, timely-filing, and others), the inpatient overlay (complete inpatient medical record when `service_setting='inpatient'`), and the specialty overlay (DMEPOS face-to-face + DWO + proof of delivery + LCD/NCD when `specialty='dmepos'`). Deduplicated by category.
- **`isError`:** does not error; it is pure computation. Downstream gating happens in the manifest writer.

### `attachment_manifest_writer`

- **Inputs:** `case_id`, `attachments[]` (each with `label`, `doc_path`, `category`, optional `pages` and `date`), the `checklist` from `packet_checklist_generator`, and optional pass-through `denial_categories`, `appeal_branch`, `service_setting`, `specialty`.
- **What it does:** writes `./packet/packet-manifest-{case_id}.json` with the full manifest (checklist + attachments + missing_required + warnings). Matches each required item against the supplied attachments by exact category match or case-insensitive label substring. Emits warnings for off-checklist categories (possible typos), missing-on-disk doc_paths, inpatient records under 20KB (likely incomplete), and commonly-expected-but-absent items (e.g., a step-therapy appeal without the payer's step-therapy policy excerpt).
- **`isError: true`:** when `missing_required[]` is non-empty. The drafting workflow must close the gap before rendering the packet index or calling `submission-companion-sheet`.

### Validation invariants

- **Required items by denial category cannot be silently skipped.** The checklist is deterministic and deduplicated by category; the manifest writer matches exact categories or label substrings and surfaces every unmatched required item in `missing_required[]`. There is no "override" flag.
- **Anthem inpatient appeals require the complete inpatient medical record unless `already_submitted` is flagged.** When `service_setting='inpatient'`, the `inpatient-medical-record` item is added to the required set. A < 20KB attachment at that category triggers a warning that reviewers expect the complete record (admission H&P through discharge summary).
- **DMEPOS PA packets require the face-to-face encounter note and the detailed written order.** When `specialty='dmepos'`, both are added to the required set along with proof of delivery (post-delivery packets) and the LCD/NCD excerpt for the HCPCS code.
- **Path-traversal outside workspace rejected.** `case_id` must match `^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$`; both the manifest output path and every attachment `doc_path` are resolved and required to sit under the workspace root.
- **Every attachment must declare its category from the controlled vocabulary.** Attachments with an unknown category are accepted but raise a warning so a typo cannot mask a missing required item. The vocabulary is the union of categories used by `packet_checklist_generator` across all branches and overlays.

## Getting started

1. Run `denial-intake-normalizer` first. The packet checklist is driven off `case.denial.classified_categories`, `case.branch`, `case.service.inpatient_vs_outpatient`, and the service codes — without the normalized case record the checklist has no category to drive off and the generator rejects the call.
2. Draft the appeal letter with `appeal-letter-builder` and the letter of medical necessity with `letter-of-medical-necessity-builder`. Both drafts must exist before the packet is assembled — the checklist treats them as required top-of-packet items.
3. Gather the supporting exhibits into the workspace: chart excerpts cited in the LOMN, imaging and lab reports, prior-therapy records (pharmacy fills or progress notes), the payer policy excerpt naming the plan-preferred agents or coverage criteria, and the prior-auth attempt history (call logs, portal screenshots, fax receipts).
4. Invoke the skill with the denial categories and the service setting — "build the packet for case 2026-0417-A, inpatient spinal fusion" or "generate the checklist for this step-therapy denial." The skill calls `packet_checklist_generator` and walks the required set with you, collecting each attachment's label, path, and category.
5. Address every entry `attachment_manifest_writer` returns in `missing_required[]`. The manifest writer returns `isError: true` until the list is empty; the packet cannot be exported with a gap.
6. Pair with `clinical-claim-evidence-mapper` before export — `clinical_claim_check_draft` must return `export_ready: true` for the appeal letter and LOMN, and `clinical_claim_render_index` produces the claim-to-source table appended to the packet index.

The skill does not draft letters and does not submit the packet. It is the assembly and completeness gate that makes every packet defensible to a payer reviewer — no missing required attachment leaves the workspace.



---

Back to [Skill Library](https://rakenne.app/skills/index.md)
