# Scholarships module — PRD coverage & architectural decision

The PRD lists Scholarships as a separate RIMS module alongside Grants, Finance,
Operations, and Projects. The implementation realises this as **two
data shapes glued together**:

1. **Scholarship programmes** (`Scholarship`, `Scholar`) — programme-level
   records and individual scholar enrolments live in this app.
2. **Scholarship calls** — `GrantCall.call_type = SCHOLARSHIP` rows in the
   grants module. The full lifecycle (draft → publish → review → award →
   close-out) is reused from grants. This module exposes thin pass-through
   views (`ScholarshipCallListView`, `ScholarshipCallDetailView`) so users do
   not leave the Scholarships section to manage them.

## Why this split

Scholarship calls share the application, review, and award workflows defined
in PRD §5.1 (Fund Administration). Forking the data model would duplicate
review queues, blind-review logic, scoring, conflict resolution, awards, and
audit. Instead, scholarships extend `GrantCall` with type-specific fields
(`scholarship_university_required`, etc. — see `apps/rims/grants/models.py`)
and reuse the rest.

## Single seam for future split

If a future PRD revision forces a separate `ScholarshipCall` model, only one
seam needs to change: the `scholarship_calls()` queryset method on
`apps.rims.grants.models.GrantCallQuerySet`. Pass-through views call this
method exclusively — no inline `filter(call_type=...)` should be added in
this app.

## PRD coverage map

| PRD area | Implementation |
| --- | --- |
| Scholarship programmes | `apps.rims.scholarships.models.Scholarship` |
| Scholar enrolment | `apps.rims.scholarships.models.Scholar`, `views.ScholarEnrolView` |
| Scholarship call setup | `apps.rims.grants.models.GrantCall` (with `call_type = SCHOLARSHIP`); creation via `rims_grants:call_create?call_type=scholarship` |
| Scholarship call browsing | `views.ScholarshipCallListView` (this app) |
| Scholarship call review/award | reused from `apps.rims.grants` (`ReviewerAccessMixin`, award flow) |
| Permissions | `ScholarshipsStaffMixin` (`MANAGE_SCHOLARSHIPS`, `MANAGE_CALLS`) |

## Authoritative URL names

- `rims_scholarships:call_list` — pass-through call browser
- `rims_scholarships:call_detail` — read-only scholarship-context call view
- `rims_grants:call_detail_manage` — full call management (linked from the
  pass-through views for users with grants permissions)
