# PRD: Claims Review Automation — Evidence-Backed Intake Intelligence

> **Version:** v1
> **Generated:** 2026-05-14
> **Direction:** insurance-claims-automation
> **Top Score:** 30/40 — BUILD

---

## 1. Problem & User

**Target User:** Insurance claims adjusters and SIU (Special Investigation Unit) managers at small-to-mid-size carriers, TPAs (Third-Party Administrators), and MGAs (Managing General Agents) — teams of 2–15 users who manually review claim intake files.

**Core Problem:** Adjusters manually read through dense claim packets (police reports, medical records, policy documents, photos) looking for inconsistencies, fraud indicators, and missing data. A single complex claim file takes 1–3 hours to review. Enterprise fraud platforms (FRISS, SAS, Shift) require lengthy enterprise procurement and deep system integration — inaccessible to smaller teams. The gap is a lightweight, explainability-first tool that can be adopted in one day without touching the core claims system.

**User Quote:** "Fraud detection — manual fraud review is slow and expensive"

---

## 2. Target Outcome & KPIs

- Time from file upload to structured summary: **< 3 minutes**
- Adjuster review time per claim reduced: **> 50%** (from 2h+ to <45 min)
- Aha Moment: structured claim summary with evidence flags visible **within 3 minutes of first upload**
- SIU triage accuracy: flagged claims confirmed suspicious by senior adjuster **> 60%**
- Free-to-paid conversion: **> 6%** within trial period

---

## 3. MVP Scope (In)

- Web app: upload claim packet (PDF, ZIP of PDFs/images)
- OCR + text extraction via third-party API (AWS Textract or Google Document AI)
- LLM prompt generates structured claim summary: claimant, policy dates, incident details, injuries, providers, timeline, missing fields
- Inconsistency flags: date mismatches, late reporting, policy inactive on loss date, provider name repetition, conflicting injury descriptions
- Evidence citations: every extracted fact includes the source sentence from the document
- SIU triage status: Green / Yellow / Red (rule-based + LLM assessment)
- Dashboard: claims list, search/filter by status and date
- Free plan: 5 claim reviews; paid: $149/mo for 3 users + 100 reviews/mo

---

## 4. Out of Scope

- Direct integration with Guidewire, Duck Creek, or other core claims systems
- Custom ML model training
- Real-time data feeds (policy database lookups, external fraud consortiums)
- Workers' comp-specific workflows (v2)
- Native mobile app
- Appeal letter generation (consumer-facing use case, DISCARD per scoring)
- Automated denial decisions (adjuster-assist only, not autonomous)

---

## 5. User Flow (Happy Path)

1. Adjuster registers → onboarding: "Upload your first claim packet to see what we find"
2. Uploads PDF (or ZIP) of claim documents → system shows progress bar: Extracting → Analyzing → Done
3. Claim Summary page loads with:
   - Structured header: Claimant, Policy #, Loss Date, Reported Date, Incident Type
   - Timeline of events extracted from documents
   - Inconsistency Panel: list of flags with quoted evidence (e.g., "Incident date: Jan 3 [Page 2] vs. Report date: Feb 28 [Page 5] — 56 days gap")
   - SIU Triage Badge: 🟢 Low / 🟡 Moderate / 🔴 High Risk
   - Missing Fields checklist (e.g., "No police report found")
4. Adjuster reviews, edits notes, marks claim for SIU or standard processing
5. After 5th claim upload → paywall: "Upgrade to continue reviewing claims"

**Aha Moment:** Within 3 minutes of first upload, adjuster sees a structured, cited summary that would have taken 90 minutes to compile manually — and immediately wants to try it on a real suspicious case.

**Paywall Trigger:** 6th claim upload → upgrade modal with $149/mo option.

---

## 6. Functional Requirements (P0 Only)

### Auth & Onboarding
- Email/password registration (Supabase Auth)
- Onboarding: prompt immediate first upload, no setup wizard needed
- Free plan: 5 claim reviews, no credit card

### File Upload & Extraction
- Upload: PDF single file or ZIP (up to 50MB)
- Store files in Supabase Storage
- Extract text: call AWS Textract or Google Document AI via server-side API route
- Store extracted text per document page in `claim_documents` table

### LLM Analysis
- Single LLM prompt (GPT-4o or Claude Sonnet) receives full extracted text
- Output JSON: `{ claimant, policy_number, loss_date, report_date, incident_type, injuries[], providers[], timeline[], inconsistencies[], missing_fields[], risk_level }`
- Each `inconsistency` includes: `type`, `description`, `evidence_quotes[]` with page references
- Rule-based checks in code (pre-LLM): date math (loss-to-report gap > 30 days), policy status field match, repeated provider name across claims in same workspace

### Summary UI
- Structured claim header
- Collapsible timeline of events
- Inconsistency list: each item expandable to show quoted source text
- SIU badge + adjuster notes field (editable)
- Status selector: Standard / Refer to SIU / Closed
- Per-claim edit saved to `claims.notes` + `claims.status`

### Dashboard
- Claims list: claimant name, upload date, risk level, status
- Search by claimant name; filter by risk level and status

### Subscription
- Stripe Checkout ($149/mo, 3-user seat)
- Block 6th upload with paywall modal
- Webhook: activate plan on `checkout.session.completed`

---

## 7. Data Model (Minimal)

```
users (id, email, plan, workspace_id, stripe_customer_id)
workspaces (id, name, plan, claim_count, created_at)
claims (id, workspace_id, uploaded_by, file_path, status, risk_level, notes, created_at)
claim_documents (id, claim_id, file_name, raw_text, page_count)
claim_summaries (id, claim_id, structured_json jsonb, inconsistencies jsonb, missing_fields jsonb, generated_at)
```

---

## 8. API / Integration Notes

- **Supabase**: Auth, Postgres, Storage (file uploads)
- **AWS Textract** or **Google Document AI**: PDF OCR — use whichever has active credits; abstract behind `lib/ocr.ts`
- **OpenAI GPT-4o** or **Anthropic Claude Sonnet**: structured JSON extraction via single prompt; use file-based caching to avoid re-processing same document
- **Stripe**: one-time Checkout for subscription; webhook for activation
- **Email (Resend)**: registration confirmation only in v1

---

## 9. Acceptance Criteria

- [ ] `POST /api/claims` with PDF upload returns 201 + claim ID; file stored in Supabase Storage
- [ ] OCR pipeline completes for a 10-page PDF in < 60 seconds
- [ ] LLM summary JSON contains all required fields: claimant, loss_date, inconsistencies[], risk_level
- [ ] Inconsistency items include at least one `evidence_quote` with page reference
- [ ] Rule-based check: claim with loss_date + 35 days = report_date is flagged as "Late Reporting"
- [ ] Dashboard lists all claims with correct risk badge
- [ ] 6th upload blocked with paywall modal for free-plan workspaces
- [ ] Stripe purchase activates plan; 6th upload proceeds successfully

---

## 10. Delivery Plan

### Milestone 1 — Auth + Upload + OCR (Day 1–2)
**Files to create:**
- `app/api/claims/route.ts` — upload handler, store to Supabase Storage
- `lib/ocr.ts` — Textract/Document AI wrapper
- `app/api/claims/[id]/extract/route.ts` — trigger OCR, store raw text
- `prisma/schema.prisma` — all tables
- `app/upload/page.tsx` — drag-drop upload UI

**Exit criteria:** `POST /api/claims` stores file; extract route returns extracted text from 5-page test PDF in < 60s.

### Milestone 2 — LLM Analysis + Summary UI (Day 3–4)
**Files to create:**
- `lib/analyze.ts` — LLM prompt + JSON parser + rule-based checks
- `app/api/claims/[id]/analyze/route.ts` — run analysis, store to `claim_summaries`
- `app/claims/[id]/page.tsx` — summary page: header, timeline, inconsistency panel, SIU badge
- `lib/rules.ts` — date gap check, policy inactive check, provider repetition check

**Exit criteria:** Uploaded test PDF returns structured summary with ≥1 inconsistency flag and evidence quote; SIU badge renders correctly.

### Milestone 3 — Dashboard + Paywall + Deploy (Day 5–6)
**Files to create:**
- `app/dashboard/page.tsx` — claims list with search + filter
- `app/upgrade/page.tsx` — Stripe Checkout
- `app/api/webhooks/stripe/route.ts` — plan activation
- `app/api/claims/route.ts` (update) — free-plan gate at 6th upload
- `vercel.json` — deploy config

**Exit criteria:** Dashboard shows all claims with risk badges; 6th upload blocked; Stripe subscription purchase enables upload; end-to-end upload → summary flow works on Vercel production.

---

## 11. Risks & Mitigations

| Risk | Mitigation |
|------|-----------|
| OCR quality on scanned/handwritten documents | Show "low confidence" warning if Textract returns < 80% confidence; prompt user to upload clearer scan |
| LLM hallucination on claim facts | Every claim fact in summary must include `evidence_quote` from source; adjuster edits are always possible |
| Large file processing timeout (>50MB ZIP) | Set 50MB limit + async processing with status polling; show progress bar |
| HIPAA / data sensitivity concerns | Do not train on uploaded data; add data deletion flow; note in ToS (v1 disclaimer) |

---

## 12. Chargeability Rationale

This product charges because it replaces 1–2 hours of adjuster time per claim review — at an adjuster fully-loaded cost of $50–80/hr, 10 claims/month = $500–800 in time saved, making the $149/month subscription a 3–5x ROI proposition with no procurement pain.

**Free tier:** 5 claim reviews — enough for an adjuster to process real files and experience the citation-backed inconsistency flags on actual claim data.
**Paid tier:** 100 claims/month for a 3-person team. Paywall triggers at the 6th claim, when the user already has evidence of time saved.
**PLG flywheel:** Adjusters who see the tool demo it to their SIU colleagues — every summary shared internally is a referral touchpoint within the same organization.
