Overview
Draft a structured letter of medical necessity (LOMN) from a normalized case record and chart excerpts, using the Genentech/Novartis field model: patient identifiers, diagnosis and ICD-10, severity, prior therapies with outcomes, clinical rationale, treatment plan and dosing, supporting guidelines, and enclosure manifest. Enforces completeness, ICD-10 specificity, prior-therapy history structure, and disease-score capture before handing the draft to the clinical-claim-evidence-mapper for citation and export gating.
The LOMN is the clinical spine of almost every specialty-drug prior authorization, formulary exception, step-therapy override, and medical-necessity appeal. Payer reviewers do not read it as prose — they scan it section by section looking for the field they need to confirm or deny coverage. A missing discontinuation reason, a non-specific ICD-10, an absent severity score, or a rationale that does not tie back to a prior therapy or contraindication is the single most common reason a preventable denial stays denied. This skill drafts the LOMN against a fixed field model, runs four deterministic validators against the draft, and hands the finished document to clinical-claim-evidence-mapper so every clinical claim the letter asserts is cited back to a chart excerpt before export.
What it covers
- Field-model enforcement. Provider and payer header, RE line with member identifiers, diagnosis with ICD-10, clinical history, structured prior therapies, contraindications, objective findings (labs, imaging, disease scores), requested therapy with dose/frequency/route/duration and rationale, supporting guidelines, treatment goals, monitoring plan, signature block, and enclosure manifest.
- ICD-10 specificity. Format check, rejection of category-only placeholders (
M54,K50,L40used alone), and refinement prompts for known non-specific codes (M54.9,M25.50,R10.9,F32.9,J45.909,K50.90,L40.9,G43.909). - Prior-therapy history structure. Each entry must carry name, class, dose, frequency, duration, outcome (from a controlled vocabulary:
no-response,partial-response,response-then-loss-of-effect,intolerance,adverse-event), and discontinuation reason. Bare lists (“tried gabapentin, tried duloxetine”) are rejected. - Disease-score capture. 22 validated instruments across MSK (ODI, NDI, VAS-pain), rheumatology (DAS28, BASDAI, HAQ-DI, RAPID3), dermatology (PASI, DLQI, UAS7), GI (CDAI, HBI, Mayo), oncology (ECOG, KPS), behavioral health (PHQ-9, GAD-7, HAM-D), pulmonary (FEV1% predicted, 6MWT), and cognition (MMSE, MoCA). Range, staleness (>180 days), and specialty-recommended instrument checks.
- Rationale binding.
lomn_completeness_checkrejects drafts where the requested-therapy rationale does not reference at least one prior therapy or contraindication — the single most common failure mode in clinician-authored LOMNs. - Claim-citation handoff. The draft is not exported until
clinical-claim-evidence-mapperreturnsexport_ready: truefor every clinical claim in the letter.
Example conversation
You:
case.jsonis ready for the L4-L5 fusion — case 2026-0412-88174. Draft the letter of medical necessity so I can enclose it with the Anthem appeal.Agent: Reading
case.json. Branch isclinical-appeal, ICD-10s are M51.16 and M48.06, requested service is posterior lumbar fusion at L4-L5 (CPT 22633 + 22840). Reading the uploaded chart notes, MRI report, and PT evaluation withread_document. I’ll draft the LOMN as an enclosure to the appeal packet.Agent: Running
icd10_validatoron["M51.16", "M48.06"]. Both valid format, both specific.ok: true. No refinement needed.Agent: Assembling the prior-therapy section from the chart. Running
prior_therapy_history_validatoron four entries: gabapentin, duloxetine, supervised PT, and a right L4-L5 transforaminal ESI. One error: the duloxetine entry is missingclassand the PT entry is missingdiscontinuation_reason— the chart says PT was “completed” rather than discontinued. ReturningisError: true.You: Duloxetine is an SNRI. PT wasn’t stopped for a reason — the patient finished the 14-week course with no change in ODI.
Agent: Updated duloxetine to
class: "SNRI". For the PT entry I setoutcome: "no-response"anddiscontinuation_reason: "course completed at 14 weeks with no change in ODI (56% pre, 56% post)". Re-ran the validator —ok: true, total: 4.Agent: Running
disease_score_capturewithspecialty: "msk"and the ODI and VAS-pain values from the 2026-03-10 PT evaluation. ODI 56% interprets assevere, VAS-pain 8/10 interprets assevere. Both in range, both dated within 180 days.ok: true, missing_recommended: [].Agent: Drafting the requested-therapy block. Name: posterior lumbar fusion with instrumentation at L4-L5; rationale cites the four failed conservative measures by name with durations and outcomes, plus the MRI finding and the NASS 2024 coverage criteria. Running
lomn_completeness_checkon the assembled record.ok: true, 0 missing, 1 warning (guidelines list has only NASS — ACR or AAOS would strengthen it, but NASS is the specialty-society guideline payers expect for lumbar fusion, so I’m leaving it as-is).Agent: Handing the draft to
clinical-claim-evidence-mapper.clinical_claim_extract_candidatesreturned 12 candidate claims (2 diagnoses, 4 prior therapies, 1 imaging, 2 scores, 1 outcome, 1 guideline, 1 coverage-criterion). Citing each one against the uploaded chart notes, MRI report, and PT evaluation.Agent:
clinical_claim_check_draftreturnedexport_ready: true, 12/12 cited, 0 orphans. Rendering the LOMN todrafts/lomn-2026-0412-88174.mdand appending the claim-to-source index. Audit log entry written. Theappeal-letter-buildercan now enclose this LOMN by reference — the enclosure manifest on the appeal already points at the path.
Sample output excerpt
The skill produces two artifacts: the normalized LOMN draft record the validators run against, and the rendered LOMN at ./drafts/lomn-{case_id}.md. Excerpts from the L4-L5 fusion case above.
{
"case_id": "8f3c2a1e-4b9d-4f7c-9e1a-2b6d8c4f1a7b",
"header": {
"provider": {
"name": "Mountain Ridge Orthopedics",
"npi": "1659321488",
"phone": "(208) 555-0144",
"fax": "(208) 555-0145",
"address": "500 Alpine Way, Boise, ID 83702"
},
"payer": { "name": "Anthem Blue Cross Blue Shield", "plan": "Anthem PPO" },
"date_of_letter": "2026-04-21",
"re_line": { "member_name": "Jane D.", "member_id": "YRK8827461", "dob": "1968-05-14" }
},
"request": {
"therapy_or_service": "Posterior lumbar fusion with instrumentation at L4-L5 (CPT 22633, 22840)",
"purpose": "Medical-necessity support for the enclosed Level 1 internal appeal of Anthem's 2026-04-12 adverse benefit determination."
},
"diagnosis": [
{ "description": "Intervertebral disc disorder with radiculopathy, lumbar region", "icd10": "M51.16" },
{ "description": "Spondylosis without myelopathy or radiculopathy, lumbar region", "icd10": "M48.06" }
],
"prior_therapies": [
{
"name": "gabapentin",
"class": "gabapentinoid",
"dose": "900 mg",
"frequency": "TID",
"route": "PO",
"duration": "12 weeks",
"outcome": "no-response",
"discontinuation_reason": "no reduction in VAS or ODI; persistent daytime somnolence limiting work"
},
{
"name": "duloxetine",
"class": "SNRI",
"dose": "60 mg",
"frequency": "QD",
"route": "PO",
"duration": "8 weeks",
"outcome": "intolerance",
"discontinuation_reason": "intolerable nausea"
},
{
"name": "supervised physical therapy",
"class": "non-pharmacologic",
"dose": "2x/week",
"frequency": "twice weekly",
"duration": "14 weeks",
"outcome": "no-response",
"discontinuation_reason": "course completed at 14 weeks with no change in ODI (56% pre, 56% post)"
},
{
"name": "right L4-L5 transforaminal epidural steroid injection",
"class": "interventional pain",
"dose": "triamcinolone 40 mg + 0.5% bupivacaine 2 mL",
"frequency": "single injection",
"route": "transforaminal",
"duration": "one dose (2026-01-18)",
"outcome": "partial-response",
"discontinuation_reason": "less than two weeks of relief; ESI protocol does not support repeat at this interval"
}
],
"contraindications": [],
"objective_findings": {
"imaging": [
{ "study": "MRI lumbar spine", "date": "2026-02-03", "impression": "L4-L5 disc extrusion with effacement of the right S1 nerve root" }
],
"scores": [
{ "instrument": "ODI", "value": 56, "date": "2026-03-10", "interpretation": "severe", "chart_reference": "inputs/pt-eval-2026-03-10.pdf p.1" },
{ "instrument": "VAS-pain", "value": 8, "date": "2026-03-10", "interpretation": "severe", "chart_reference": "inputs/pt-eval-2026-03-10.pdf p.1" }
]
},
"requested_therapy": {
"name": "Posterior lumbar fusion with instrumentation at L4-L5",
"dose": "n/a (surgical)",
"frequency": "single procedure",
"route": "open posterior approach",
"duration": "inpatient admission, estimated 3 days",
"rationale": "After failure of gabapentin 900 mg TID x 12 weeks, duloxetine 60 mg QD x 8 weeks (discontinued for intolerable nausea), 14 weeks of supervised PT with no change in ODI, and a right L4-L5 transforaminal ESI with less than two weeks of relief, and with MRI demonstrating L4-L5 disc extrusion with right S1 nerve-root impingement, the patient meets the NASS 2024 Lumbar Fusion Coverage Criteria for surgical intervention."
},
"guidelines": [
{ "source": "NASS", "section": "2024 Lumbar Fusion Coverage Criteria", "recommendation": "Fusion indicated for persistent radiculopathy with imaging-confirmed neural compression after documented failure of conservative care." }
],
"treatment_goals": [
"Resolve right-sided radiculopathy and restore L4-L5 segmental stability",
"Reduce ODI to < 40% within 6 months of surgery",
"Return to full-duty work within 12 weeks"
],
"monitoring_plan": [
"Post-op follow-up at 2, 6, and 12 weeks with ODI and VAS-pain",
"Neurologic exam at each visit with attention to right S1 distribution",
"Imaging at 6 months if clinical course deviates from expected"
],
"signature_block": { "physician_name": "Priya N. Shah, MD", "npi": "1487220913" },
"enclosures": [
{ "label": "Chart note 2026-02-12 (assessment)", "doc_path": "inputs/chart-note-2026-02-12.pdf" },
{ "label": "Chart note 2025-11-03 (gabapentin trial)", "doc_path": "inputs/chart-note-2025-11-03.pdf" },
{ "label": "MRI lumbar spine 2026-02-03", "doc_path": "inputs/mri-2026-02-03.pdf" },
{ "label": "PT evaluation 2026-03-10 (ODI 56%)", "doc_path": "inputs/pt-eval-2026-03-10.pdf" }
]
}
Rendered LOMN excerpt (drafts/lomn-2026-0412-88174.md):
Mountain Ridge Orthopedics
500 Alpine Way, Boise, ID 83702
NPI 1659321488 | Phone (208) 555-0144 | Fax (208) 555-0145
2026-04-21
**RE: Letter of medical necessity — posterior lumbar fusion, L4-L5**
Member: Jane D. | Member ID: YRK8827461 | DOB: 1968-05-14
To the Medical Director,
This letter documents the medical necessity of posterior lumbar fusion with
instrumentation at L4-L5 (CPT 22633, 22840) for the above-named patient and is
enclosed in support of the Level 1 internal appeal of Anthem's 2026-04-12
determination.
**Diagnosis.** Intervertebral disc disorder with radiculopathy, lumbar region
(ICD-10 M51.16); lumbar spondylosis without myelopathy (ICD-10 M48.06).
**Clinical course and conservative care.** The patient completed and failed, in
sequence: gabapentin 900 mg TID over 12 weeks (no reduction in VAS or ODI,
persistent daytime somnolence limiting work); duloxetine 60 mg QD over 8 weeks
(discontinued for intolerable nausea); supervised physical therapy twice weekly
over 14 weeks (ODI unchanged at 56% pre and post); and a right L4-L5
transforaminal epidural steroid injection on 2026-01-18 with less than two
weeks of relief.
**Objective findings.** MRI of the lumbar spine on 2026-02-03 demonstrates
L4-L5 disc extrusion with effacement of the right S1 nerve root. ODI on
2026-03-10 was 56% (severe). VAS-pain was 8/10 (severe).
**Rationale for the requested procedure.** These facts satisfy the NASS 2024
Lumbar Fusion Coverage Criteria: imaging-confirmed neural compression at a
single lumbar level, concordant radicular symptoms, and documented failure of
four conservative measures over more than six months.
**Treatment plan.** Posterior lumbar fusion with instrumentation at L4-L5 under
open posterior approach, inpatient admission estimated at three days.
**Treatment goals.** Resolve right-sided radiculopathy; reduce ODI to < 40%
within 6 months; return to full-duty work within 12 weeks.
**Monitoring plan.** Post-op follow-up at 2, 6, and 12 weeks with ODI and
VAS-pain; neurologic exam at each visit; imaging at 6 months if clinical course
deviates.
Sincerely,
[Signature]
Priya N. Shah, MD
NPI 1487220913
Extension tools and validations
The skill registers four deterministic validators. None of them draft prose — the LLM renders the sentences and the validators gate export.
| Tool | Purpose |
|---|---|
icd10_validator | Validate ICD-10-CM codes against the [A-TV-Z][0-9][0-9A-Z](\.[0-9A-Z]{1,4})? format, reject category-only placeholders (M54, K50, L40, C50, F32, etc.) that require a 4th–7th character to bill, and flag known non-specific codes (M54.9, M25.50, R10.9, F32.9, F33.9, J45.909, K50.90, K51.90, L40.9, G43.909) with a suggestion hint to refine against the chart. Returns per-code findings and isError: true when any code is invalid or imprecise. |
prior_therapy_history_validator | Verify every prior_therapies[] entry carries name, class, dose, frequency, duration, outcome (one of no-response, partial-response, response-then-loss-of-effect, intolerance, adverse-event), and discontinuation_reason. Flags entries where duration is absent but start_date and stop_date are present, and where discontinuation_reason is the literal string “unknown”. Returns per-entry issues and isError: true when any required field is missing or the outcome is outside the controlled vocabulary. |
disease_score_capture | Validate captured severity/functional scores against 22 known instruments (UAS7, PASI, DLQI, DAS28, BASDAI, HAQ-DI, CDAI, HBI, Mayo, ODI, NDI, VAS-pain, ECOG, KPS, PHQ-9, GAD-7, HAM-D, MMSE, MoCA, FEV1-pct-predicted, 6MWT, RAPID3). Checks value range, date presence, staleness (>180 days triggers a warning), and fills a standard interpretation bucket. When specialty is supplied (msk, msk-cervical, rheumatology, dermatology-psoriasis, dermatology-urticaria, gi-crohns, gi-uc, oncology, behavioral-health-depression, behavioral-health-anxiety, pulmonary, neurology-cognition), reports missing_recommended[]. Returns isError: true when any captured score is invalid. |
lomn_completeness_check | Enforce the Genentech/Novartis field model: header (provider name + NPI, provider phone or fax, payer name, date of letter, RE-line member name + ID), request statement (therapy and purpose), at least one diagnosis with ICD-10, at least one structured prior therapy, requested therapy with name + dose + frequency + duration + rationale, treatment goals, monitoring plan, signature block (physician name + NPI), and a non-empty enclosure manifest. Rejects drafts where the requested-therapy rationale does not reference at least one prior therapy or contraindication (keyword heuristic: prior, failed, trial, discontinue, intoleran, refractory, inadequate, contraindic, allergy, adverse, hypersensitivity, angioedema). Returns { ok, missing[], warnings[] } and isError: true while any required block is missing. |
Validation invariants
- The LOMN is unsigned on export. This skill produces a draft for physician review. The physician signs outside the workflow.
- No invented clinical content. Every diagnosis, dose, date, failed therapy, score, and guideline must be traceable to a chart excerpt.
clinical-claim-evidence-mapperis the enforcement point. - ICD-10 specificity is required. Non-specific codes that have a more specific alternative are rejected — the payer would reject them anyway.
- Prior-therapy entries are structured. No bare lists. Each entry carries name, class, dose, frequency, duration, outcome, and discontinuation reason.
- Rationale must bind to evidence. The requested-therapy rationale must name at least one prior therapy failure or contraindication. A generic “medically necessary under the plan” rationale trips
lomn_completeness_check. - Empty enclosure manifests are rejected. A LOMN without supporting records does not survive reviewer scrutiny. A single-item manifest is allowed with a warning.
- Specialty overlays extend, not replace. Overlays like
lomn-msk,lomn-oncology,lomn-gi-biologics, andlomn-dermatologyadd stricter disease-score requirements and specialty-specific guideline tokens; they never relax the core validators.
Getting started
- Run
denial-intake-normalizerfirst (for appeal-attached LOMNs) or start from an equivalent structured case record for a prior-authorization request. The LOMN builder readscase.jsonat the project root and uses itscase_id, diagnosis codes, service details, and provider/payer identifiers as the spine of the draft. For appeal enclosures, the branch must beclinical-appealorpa-request. - Upload the chart excerpts that ground the clinical claims — chart notes documenting the diagnosis and prior therapies, imaging reports, PT evaluations, lab tables, medication lists, and any specialty-society guideline excerpts you intend to cite.
- Tell the skill to draft the LOMN — “draft a letter of medical necessity for the case I just normalized,” “build the LOMN for this Crohn’s infliximab request,” or “validate the prior-therapy history before I send it to the physician.”
- Resolve every issue surfaced by
icd10_validator,prior_therapy_history_validator,disease_score_capture, andlomn_completeness_check. Missing discontinuation reasons and non-specific ICD-10 codes are the two most common blockers at this stage. - Hand the draft to
clinical-claim-evidence-mapper: runclinical_claim_extract_candidates, cite every real claim withclinical_claim_cite, and requireclinical_claim_check_draftto returnexport_ready: truebefore rendering. - On success the skill writes the rendered LOMN to
./drafts/lomn-{case_id}.md, appends the claim-to-source index, and writes an audit-log entry viaaudit_log_writer. The letter is unsigned — the physician signs outside this workflow.
Where this skill fits
- Upstream:
denial-intake-normalizerproduces thecase.jsonthis skill reads. For prior-auth-first workflows (no denial yet), the case record is constructed directly. - Downstream — citation gate:
clinical-claim-evidence-mapperis mandatory before export. Drafts do not leave the workspace withoutexport_ready: true. - Downstream — packet assembly:
appeal-letter-builderencloses the finished LOMN by reference when the appeal is a medical-necessity appeal;packet-checklist-and-index-generatorandsubmission-companion-sheetassemble the outbound packet. - Specialty overlays: install
lomn-msk,lomn-oncology,lomn-gi-biologics,lomn-dermatology,lomn-rheumatology,lomn-behavioral-health, orlomn-dmeposon top of this skill when the pilot case load is concentrated in one specialty. Overlays add required disease scores and specialty-society guideline tokens; they do not replace the core validators.