Reservation System
MH-701Prisma model: Reservation (id, reservationId, fundType, startDate, endDate, fundLifespan, status, partnerId, createdBy)
MH-702Reservation statuses enum: DRAFT, SUBMITTED, APPROVED, REJECTED, EDITED_PENDING, CANCELLED, EXPIRED
MH-703Reservation CRUD API + service
MH-704Business rule: Activity CANNOT start without APPROVED Reservation
MH-705Business rule: Activity dates MUST fall within Reservation start/end
MH-706Reservation expiry cron (auto-expire past end date)
MH-707Reservation ID generation (unique, trackable)
MH-708Reservation UI: create, edit, cancel flow
MH-709Reservation link to Activity Report + MDF Claim
MH-710Dashboard widget: Reservations status (active/expiring/expired)
Claim Validity & Timeline
MH-711Claim Validity Period calculation: 6 months after quarter end
MH-712Business rule: block claim submission after validity period
MH-713Warning: "X days left to submit claim" on Activity detail
MH-714Auto-reject cron: mark expired claims as REJECTED_LATE
MH-715Dashboard: claims approaching validity deadline
Invoice Validation
MH-716Invoice model fields: billTo, billFrom, invoiceDate, invoiceRef, itemizedDetails, currency, taxAmount, totalAmount, reservationId, vatNumber
MH-717Invoice validation checklist (11 required fields from MOG)
MH-718Invoice upload UI with field-by-field validation
MH-719Non-editable format check (PDF only, no pro-forma)
MH-720Invoice ↔ Reservation ID cross-reference validation
Country Exclusions
MH-721Seed: excluded countries list (Russia, Belarus, Cuba, Iran, North Korea, Syria, Crimea, Donetsk, Luhansk)
MH-722Business rule: block plan/activity creation for excluded countries
MH-723UI warning when selecting excluded country
MH-724Admin page: manage excluded countries list
Exchange Rate & Currency
MH-725Currency field on BudgetEntry, PartnerPlan, MdfClaim, Invoice
MH-726Exchange rate service: fetch rates (invoice date OR avg execution period)
MH-727Auto-convert to USD for dashboard aggregation
MH-728Exchange rate display on claim review page
MH-729Currency selector on forms (EUR, GBP, SEK, NOK, PLN, CZK, CHF, AED, SAR)
LOA (Letter of Authorization)
MH-730LOA model: id, partnerId, thirdPartyPayee, reason, approvalDate, documents
MH-731LOA upload + approval flow
MH-732Business rule: third-party payment requires approved LOA
MH-733LOA reference on Claim when payee ≠ partner
AMD Benefit & PoP Validation
MH-734PoP validation checklist per Activity Type (from POP PDF)
MH-735Checklist UI on claim review: "✅ AMD logo present" / "✅ URL visible" / "✅ Dates visible"
MH-736Reviewer must complete checklist before approving claim
MH-737Ineligible expenses reference list (travel, personal taxes, finance charges, cancelled events)
MH-738Warning when claim includes potentially ineligible expense
Payment Tracking
MH-739Payment status on Claim: PENDING → SCHEDULED → PAID → FAILED
MH-740Payment due date calculation (from verified claim receipt)
MH-741Payment tracking on Dashboard ($ pending payment, $ paid this quarter)
MH-742Payment confirmation upload (proof of payment)
Requested vs Allocated
MH-743requestedAmount field on PartnerPlan (Ivana's ask from screenshot)
MH-744Requested vs Allocated comparison on Plan detail
MH-745Dashboard: total requested vs total allocated gap
Tests
MH-746E2E: Reservation → Activity → Claim full flow
MH-747E2E: claim blocked without Reservation
MH-748E2E: claim blocked after validity period
MH-749E2E: excluded country blocked
MH-750QA Gate: all compliance rules enforced