# Peer-to-peer prep

> Build a one-page pre-call briefing document for a scheduled peer-to-peer conversation between the clinic's physician and the payer's medical director. Renders the opening line, denial reason quoted verbatim, 60-second clinical story, prior-therapy table, contraindications to preferred alternatives, specialty-society guideline citation, a specific ask, and likely reviewer questions with prepared answer frames. Grounded in Patient Advocate Foundation peer-to-peer guidance and common denial-category-specific reviewer-question patterns.



Tags: Healthcare, Prior Authorization, Denial Appeals, Peer to Peer, Physician Tools


## Example Prompts

- Build a peer-to-peer brief for the attending — the P2P is scheduled for tomorrow morning
- Generate the likely reviewer questions for a step-therapy peer-to-peer
- Check my P2P brief has the denial reason verbatim and a specific ask before the call
- Render a one-page pre-call brief from this normalized case record

URL: https://rakenne.app/skills/peer-to-peer-prep/index.md

Try this skill: https://rakenne.app/a/?skill=peer-to-peer-prep



## Overview

A peer-to-peer review is a scheduled phone call — typically 10 to 15 minutes — between the clinic's prescribing physician and the payer's medical director. It is the single cheapest path to overturn a denial: many denials are reversed on the P2P without ever becoming a formal appeal packet. The deciding factor is not the strength of the clinical case; it is whether the attending walks in prepared.

Most P2P calls fail for predictable reasons. The attending cannot quote the denial reason back verbatim, so the conversation drifts into generic medical-necessity prose that the reviewer has already rejected on paper. The prior-therapy history is in the chart but not at the attending's fingertips — which agent, what dose, how long, what outcome, why discontinued. The ask at the end is "please reconsider," which gives the reviewer nothing to approve. And the two or three patterned questions the medical director will ask — "what failed on the preferred agent?", "why can't the patient try X first?", "what criteria were met at admission?" — arrive cold.

This skill sits between `denial-intake-normalizer` (which produces the structured `case.json`) and `appeal-letter-builder` (which drafts the formal rebuttal). A P2P that flips the denial short-circuits the appeal entirely — no letter, no packet, no submission window. The brief is a physician-facing script the attending reads off during the 8-to-12 minute call: denial reason verbatim, 60-second clinical story, prior-therapy table, contraindications to plan-preferred alternatives, specialty-society citation, a specific ask, and the reviewer's likely questions with prepared answer frames.

## What it covers

- **Opening line.** A single sentence with physician name, denial date, member name and ID, the requested therapy, and the ICD-10 — so the first 15 seconds establish who, what, and why.
- **Denial reason quoted verbatim.** The payer's exact language from the denial letter. The attending must be able to say "you denied this because…" using the medical director's own words; generic medical-necessity rebuttals lose.
- **Sixty-second clinical story.** Three to five sentences: disease activity, most recent objective score (with date and interpretation), and why the requested therapy is indicated now.
- **Prior-therapy table.** Name, class, dose, duration, outcome, discontinuation reason — one row per agent tried. Pulled from the case record; the tool does not invent trials.
- **Contraindications to plan-preferred alternatives.** For every agent the payer policy names as preferred, match against the prior-therapy list and the contraindication list. Each preferred agent gets either a tried-and-failed line or a documented contraindication; unmatched agents are flagged so the attending can confirm the chart before the call.
- **Specialty-society guideline citation.** One line naming the society, year, section, and the specific recommendation that supports the request.
- **A specific ask.** "Overturn the denial and approve adalimumab 40 mg every other week for 12 weeks" — not "please reconsider."
- **Likely reviewer questions with answer frames.** Two to four patterned questions per denial category, drawn from a catalog covering not-medically-necessary, experimental-investigational, step-therapy, off-formulary, DRG/level-of-care, out-of-network, lack-of-prior-auth, timely-filing, coding-edit, coordination-of-benefits, and service-termination. Each question carries a fill-in-the-blanks answer frame the attending can work from live.
- **Physician contact block.** Name, credentials, NPI, phone, fax — at the bottom of the brief so the medical director can follow up if the call is escalated.

## Example conversation

> **You:** The Aetna step-therapy denial for the adalimumab request on case 2026-0418-44210 is normalized. P2P is in two hours — build the brief.
>
> **Agent:** Reading `./case.json`. Denial categories `["step-therapy", "not-medically-necessary"]`, requested therapy adalimumab 40 mg SQ q2w, diagnosis moderate-to-severe plaque psoriasis (L40.0), PASI 18 on 2026-04-10 (severe). Plan-preferred agents named in the policy: methotrexate, apremilast, etanercept.
>
> **Agent:** Calling `p2p_brief_builder` with `case_json_path: "./case.json"`, `physician_style: "terse"`, `p2p_scheduled_time: "2026-04-22T14:00:00-05:00"`. Rendered to `./drafts/p2p-brief-2026-0418-44210.md`. Sections set: 9/9. Two warnings: (1) `guideline_citation` was present on the case record, good; (2) one plan-preferred agent — apremilast — has no prior-therapy row and no contraindication. The contraindications block flags it with `source_ref: null` so the attending can confirm the chart before the call.
>
> **Agent:** Calling `p2p_likely_questions_generator` with `denial_categories: ["step-therapy", "not-medically-necessary"]`. Catalog returned 8 questions (4 per category, capped at 10). Top three by expected frequency: "Why can't the patient try methotrexate first?", "What specifically failed on the plan's preferred therapy?", "What objective evidence shows the disease is active?". Each has an answer frame with `{preferred_agent}`, `{dose}`, `{duration}`, `{outcome}`, `{score_instrument}`, `{score_value}` slots the attending fills from the prior-therapy table and the PASI score.
>
> **Agent:** Calling `p2p_completeness_check` with the rendered brief record and `denial_categories: ["step-therapy", "not-medically-necessary"]`. Result: `ok: true`, 0 missing, 2 warnings — (a) apremilast has no tried-and-failed or contraindication record, (b) consider naming the specific AAD 2023 guideline section rather than citing the guideline at document level.
>
> **You:** The apremilast warning — we tried it for 10 weeks last year and stopped for GI intolerance. It just wasn't in case.json because the prior EHR export missed it.
>
> **Agent:** Update the case record with the apremilast row (name, class PDE4-inhibitor, 30 mg BID, 10 weeks, partial response, discontinuation "intolerable diarrhea") and I will re-render. Once `case.json` is updated I will re-run `p2p_brief_builder` and `p2p_completeness_check`; the warning will clear and the contraindications block will read "apremilast — previously trialed 30 mg BID for 10 weeks: partial response, discontinued for intolerable diarrhea."
>
> **You:** Done — apremilast row added. Re-render.
>
> **Agent:** Re-ran `p2p_brief_builder`. All three plan-preferred agents now have tried-and-failed rows. Re-ran `p2p_completeness_check`: `ok: true`, 0 missing, 0 warnings. Brief is at `./drafts/p2p-brief-2026-0418-44210.md`, fits on one printed page. The attending is ready for the 14:00 call.

## Sample output excerpt

The skill produces a single markdown file at `./drafts/p2p-brief-{case_id}.md`. Excerpt from the Aetna plaque-psoriasis case after the conversation above (condensed for display — the real brief fits on one printed page):

---

```markdown
# Peer-to-peer briefing — case 2026-0418-44210

*Call scheduled: 2026-04-22T14:00:00-05:00*

## 1. Opening

I'm Dr. Okafor, calling about the 2026-04-18 denial for my patient
Marcus R. (AET-3391827), requesting adalimumab 40 mg SQ every two weeks
for moderate-to-severe plaque psoriasis (L40.0).

## 2. Denial reason (verbatim)

> Requested agent does not meet the plan's step-therapy criteria.
> Documentation of trial and failure of at least two plan-preferred
> agents (methotrexate, apremilast, etanercept) is required prior to
> coverage of adalimumab.

## 3. Clinical story (60 seconds)

Moderate-to-severe plaque psoriasis has been active for 3 years with
progressive BSA involvement. Most recent PASI on 2026-04-10 was 18
(severe, >10 indicates moderate-to-severe disease). Adalimumab is
clinically indicated now given the documented trajectory and the
three-agent prior-therapy history below.

## 4. Prior therapies

| Therapy | Class | Dose | Duration | Outcome | Discontinuation reason |
|---|---|---|---|---|---|
| Methotrexate | antimetabolite | 15 mg PO weekly | 16 weeks | PASI 50 not achieved (PASI 18 → 15) | Elevated AST/ALT (2.5× ULN) on 2025-08-12 |
| Apremilast | PDE4 inhibitor | 30 mg PO BID | 10 weeks | Partial response (PASI 18 → 14) | Intolerable diarrhea, ≥4 loose stools/day |
| Etanercept | TNF-α inhibitor | 50 mg SQ weekly | 14 weeks | Primary non-response (PASI unchanged) | Loss of response; switched per AAD guidance |

## 5. Contraindications to preferred alternatives

- **methotrexate** — Previously trialed (15 mg weekly, 16 weeks):
  PASI 50 not achieved — discontinued due to hepatotoxicity
  (AST/ALT 2.5× ULN). _(prior_therapies[0])_
- **apremilast** — Previously trialed (30 mg BID, 10 weeks):
  partial response — discontinued for intolerable diarrhea.
  _(prior_therapies[1])_
- **etanercept** — Previously trialed (50 mg SQ weekly, 14 weeks):
  primary non-response — switched per AAD guidance.
  _(prior_therapies[2])_

## 6. Guideline citation

AAD-NPF 2023 Joint Guidelines on the Management of Psoriasis with
Biologics, Section 4.2: after failure of a TNF-α inhibitor in
moderate-to-severe disease, a second TNF-α inhibitor or a switch to
an IL-17 or IL-23 inhibitor is recommended.

## 7. The ask

Overturn the denial and approve adalimumab 40 mg SQ every two weeks
for 12 weeks with reassessment at week 16.

## 8. Likely reviewer questions

- **Why can't the patient try methotrexate first?** _(step-therapy)_
  - Answer frame: Methotrexate was tried at 15 mg weekly for 16 weeks;
    PASI 50 was not achieved and the patient developed hepatotoxicity
    (AST/ALT 2.5× ULN on 2025-08-12). Requiring a retrial would expose
    the patient to further hepatic risk without clinical justification.
- **What specifically failed on the plan's preferred therapy?**
  _(not-medically-necessary)_
  - Answer frame: On apremilast 30 mg BID for 10 weeks, the patient had
    a partial response (PASI 18 → 14) and intolerable diarrhea. We
    documented ≥4 loose stools/day on the 2025-11-03 visit.
- **What objective evidence shows the patient's disease is active?**
  _(not-medically-necessary)_
  - Answer frame: The most recent PASI on 2026-04-10 was 18, which
    corresponds to severe disease (>10 is moderate-to-severe).
    The chart shows BSA 22% with plaque involvement of scalp and
    lower extremities.
- **How many plan-preferred agents has the patient tried?**
  _(step-therapy)_
  - Answer frame: 3 preferred agents — methotrexate, apremilast,
    etanercept — with documented outcomes and discontinuation reasons
    on file.

## 9. Physician contact

- **Name:** Adaeze Okafor, MD
- **NPI:** 1730559281
- **Phone:** (512) 555-0147 — Fax: (512) 555-0148
```

<!-- /excerpt -->

## Extension tools and validations

The skill registers three deterministic tools. Tool one renders the brief, tool two generates likely reviewer questions from a catalog (no LLM invention), tool three gates completeness.

### `p2p_brief_builder`

- **Inputs:** `case_json_path` (workspace-relative path to `case.json` from `denial-intake-normalizer`) **or** `case_record` (inline object — for cases not yet persisted); `physician_style` (`terse` default, `detailed` for a longer clinical story); `p2p_scheduled_time` (ISO-8601, rendered at the top of the brief).
- **What it produces:** the nine brief sections — opening line, denial reason verbatim, clinical story, prior-therapy table, contraindications to plan-preferred alternatives, guideline citation, specific ask, likely reviewer questions, physician contact. Writes to `./drafts/p2p-brief-{case_id}.md`.
- **How the contraindications block is computed:** for every agent in `denial.plan_preferred_agents`, match against `prior_therapies[]` by normalized name. If found, emit a tried-and-failed line with dose, duration, outcome, and discontinuation reason. If not, match against `contraindications[]` by agent name in the detail/reason text. If still not matched, emit a placeholder with `source_ref: null` so the attending is warned to confirm the chart before the call.
- **Returns:** `{path, sections_set[], warnings[]}`. Warns (but does not error) on empty `prior_therapies[]`, very short `denial_reason_text`, and missing `guideline_citation`. Path-traversal guard prevents writes outside the workspace.

### `p2p_likely_questions_generator`

- **Inputs:** `denial_categories[]` (from `denial_classifier`); `specialty` and `requested_therapy_class` (reserved — catalog is currently category-indexed, specialty/class slots are present for future extension).
- **What it produces:** 2 to 4 questions per matched category, capped at 10 total. Each question carries an answer frame with template slots (`{preferred_agent}`, `{dose}`, `{duration}`, `{outcome}`, `{score_instrument}`, `{score_value}`, `{fda_indication}`, `{criterion_set}`, etc.) the attending fills from the prior-therapy table, the scores array, and the guideline citation.
- **Catalog coverage:** `not-medically-necessary`, `experimental-investigational`, `step-therapy`, `off-formulary`, `drg-level-of-care`, `out-of-network`, `lack-of-prior-auth`, `timely-filing`, `coding-edit`, `coordination-of-benefits`, `service-termination`. When no category matches, returns a single generic fallback.
- **Deterministic.** The tool is a lookup, not an LLM generator — it cannot invent questions outside the catalog. This is the point: reviewers ask patterned questions, and the brief should prepare the attending for the patterns that actually occur.

### `p2p_completeness_check`

- **Inputs:** the normalized brief `record`; `denial_categories[]` (optional, used to target warning rules).
- **Required blocks (missing → `isError: true`):** `opening_line`, `denial_reason_verbatim`, `clinical_story` (minimum 120 characters — a 60-second story cannot be one sentence), at least one entry in `prior_therapies[]`, `ask`, and `physician_contact` (name, NPI, phone).
- **Warning blocks (never block):** `denial_reason_verbatim` shorter than 20 characters (confirm it is the full denial reason); generic `ask` ("please reconsider"); missing `guideline_citation`; empty `contraindications_to_preferred` when the denial involves step-therapy, off-formulary, or not-medically-necessary; fewer than 3 likely questions.
- **Returns:** `{ok, missing[], warnings[]}` with `isError: true` when `missing[]` is non-empty.

### Validation invariants

- **The brief is a single page.** The nine-section template is sized for one printed page. If the rendered brief runs long (usually because the prior-therapy table has many rows or the clinical story is too detailed), the attending will lose the reviewer's attention — the tool warns when the structure pushes past one page.
- **The denial reason is quoted verbatim.** The completeness check requires a non-empty `denial_reason_verbatim`. A paraphrased denial reason is rejected — the attending must be able to say "you denied this because…" using the payer's exact language.
- **The ask is specific.** Generic "please reconsider" asks trigger a warning. The ask should name the therapy, dose, and duration (or the specific resolution — "approve the inpatient admission," "grant a formulary exception") so the reviewer has something concrete to approve on the call.
- **Nothing is invented.** The tool does not fabricate prior therapies, scores, guideline citations, or contraindications. If the case record is missing a plan-preferred agent's trial, the contraindications block flags the gap with `source_ref: null` — the attending confirms the chart, not the tool.
- **The catalog is the only source of likely questions.** `p2p_likely_questions_generator` cannot invent questions. When the denial categories are unknown or unmatched, the tool returns the generic fallback rather than inventing payer-specific content.

## Getting started

1. Run `denial-intake-normalizer` first. The P2P prep skill reads `case.json` at the project root and needs `denial.denial_reason_text` (verbatim), `denial.categories[]`, `denial.plan_preferred_agents[]` (when the policy names them), `prior_therapies[]`, and `physician` contact. The tool will still render with gaps, but the completeness check will flag them.
2. Confirm the P2P is actually scheduled. This skill produces pre-call material — if the user wants to request a P2P, that is a different workflow. Pass the scheduled time as `p2p_scheduled_time` (ISO-8601) so it renders at the top of the brief.
3. Tell the skill to build the brief — "build the P2P brief for the denial I just normalized" or "the peer-to-peer is in two hours, render the one-pager." The skill calls `p2p_brief_builder`, then `p2p_likely_questions_generator`, then `p2p_completeness_check` in sequence.
4. Resolve every entry in `missing[]` before the call. Warnings do not block, but each one is a concrete risk on the P2P — an empty contraindications-to-preferred section in a step-therapy case, for example, is the single most common reason P2Ps fail.
5. Hand the brief to the attending. The rendered one-pager at `./drafts/p2p-brief-{case_id}.md` is the script. The attending reads from it during the 8-to-12 minute call.

**Sidestream to the appeal.** A successful P2P flips the denial on the call and short-circuits the formal appeal — no `appeal-letter-builder`, no `clinical-claim-evidence-mapper`, no submission window. If the P2P fails or the reviewer defers to written review, return to the appeal workflow: `letter-of-medical-necessity-builder` for the clinical narrative, `appeal-letter-builder` for the top document, `clinical-claim-evidence-mapper` for citations. After the call, record the outcome (approved / denied / escalated) in the case record — that is outside this skill.



---

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