ReceiptOcrReviewModal displays all extracted fields with confidence indicators
User can edit all fields before accepting
Accepted fields populate fuel log form correctly
Works on mobile (camera capture) and desktop (file upload)
Tests
Test files: backend/src/core/config/feature-tiers.test.ts (extend existing)
Test type: unit
Scenarios:
Normal: Pro user accesses fuelLog.receiptScan
Edge: Free user denied access with correct upgrade prompt
Normal: Enterprise user inherits Pro access
Relates to #129
## Milestone 2: Tier Gating and Frontend Receipt OCR Flow
Add fuelLog.receiptScan tier gating and update frontend receipt OCR to use the dedicated receipt endpoint.
**Flags**: needs conformance check (mobile + desktop)
### Files
- `backend/src/core/config/feature-tiers.ts`
- `frontend/src/features/fuel-logs/hooks/useReceiptOcr.ts`
- `frontend/src/features/fuel-logs/components/FuelLogForm.tsx`
- `frontend/src/features/fuel-logs/components/ReceiptCameraButton.tsx`
### Requirements
- Add `fuelLog.receiptScan` to FEATURE_TIERS with minTier `pro`
- Update `useReceiptOcr.ts` to call `/ocr/extract/receipt` instead of `/ocr/extract`
- Add tier gating check in FuelLogForm before showing ReceiptCameraButton
- Show UpgradeRequiredDialog when non-Pro user taps receipt scan button
- Ensure receipt camera button works on both mobile and desktop
### Acceptance Criteria
- [ ] Free tier users see disabled/locked receipt scan button with upgrade prompt
- [ ] Pro+ users can capture receipt photo and see extraction results
- [ ] Receipt extraction calls /ocr/extract/receipt (not generic /ocr/extract)
- [ ] ReceiptOcrReviewModal displays all extracted fields with confidence indicators
- [ ] User can edit all fields before accepting
- [ ] Accepted fields populate fuel log form correctly
- [ ] Works on mobile (camera capture) and desktop (file upload)
### Tests
- **Test files**: `backend/src/core/config/feature-tiers.test.ts` (extend existing)
- **Test type**: unit
- **Scenarios**:
- Normal: Pro user accesses fuelLog.receiptScan
- Edge: Free user denied access with correct upgrade prompt
- Normal: Enterprise user inherits Pro access
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Relates to #129
Milestone 2: Tier Gating and Frontend Receipt OCR Flow
Add fuelLog.receiptScan tier gating and update frontend receipt OCR to use the dedicated receipt endpoint.
Flags: needs conformance check (mobile + desktop)
Files
backend/src/core/config/feature-tiers.tsfrontend/src/features/fuel-logs/hooks/useReceiptOcr.tsfrontend/src/features/fuel-logs/components/FuelLogForm.tsxfrontend/src/features/fuel-logs/components/ReceiptCameraButton.tsxRequirements
fuelLog.receiptScanto FEATURE_TIERS with minTierprouseReceiptOcr.tsto call/ocr/extract/receiptinstead of/ocr/extractAcceptance Criteria
Tests
backend/src/core/config/feature-tiers.test.ts(extend existing)Milestone: Tier Gating and Frontend Receipt OCR Flow
Phase: Execution | Agent: Developer | Status: PASS
Completed Work
1. Backend: fuelLog.receiptScan tier config
fuelLog.receiptScantoFEATURE_TIERSinfeature-tiers.tswithminTier: 'pro'dfc39242. Frontend: useReceiptOcr endpoint update
/ocr/extractto/ocr/extract/receipt399313e3. Frontend: Tier gating in FuelLogForm
useTierAccesshook check forfuelLog.receiptScanUpgradeRequiredDialog(same pattern as VIN decode in VehicleForm)bc91fba4. Frontend: ReceiptCameraButton locked state
lockedprop toReceiptCameraButtoncomponentValidation
Acceptance Criteria Status
Verdict: PASS | Next: Quality review