# Special Awards ## Overview Special awards run alongside the main competition flow, typically activating during or after the Jury 2 evaluation round (R5). Each award has its own jury, document requirements, review window, and selection process. Awards do NOT use the deliberation model — they are decided by their own jury/judge mechanism. --- ## Award Routing Modes Every special award operates in one of two configurable modes: ### Mode A: SEPARATE_POOL (Pull-Out) Projects are filtered into a dedicated award pool. The award may: - **Pull projects out** of the main competition pool, OR - **Keep projects in both** the main pool and the award pool Pull-out requires **admin confirmation** (`routingConfirmationMode: ADMIN_CONFIRMED`). The admin reviews which projects are pulled out and approves before the pull-out takes effect. ``` Main Pool ──┬──→ continues in main competition └──→ [admin confirms] ──→ Award Pool ──→ Award Review ──→ Award Winner ``` ### Mode B: STAY_IN_MAIN (Dual Track) Projects remain in the main competition but are flagged as "eligible for award." The award evaluation runs in parallel with the main flow. ``` Main Pool ──→ continues in main competition │ └──→ flagged "eligible" ──→ Award Review ──→ Award Winner ``` --- ## Award Mini-Pipeline Each special award has its own mini-pipeline: 1. **Filtering** → AI screens eligible projects based on award criteria 2. **Review** → Award jury evaluates eligible projects 3. **Selection** → Winner(s) selected by jury vote or single-judge decision This mini-pipeline is independent of the main competition rounds. It has its own: - **Jury** (or reuses judges from main juries, with overlap allowed) - **Document requirements** (if the award needs specific docs beyond main submissions) - **Review window** (own start/end dates) - **Selection process** (jury vote or single-judge) --- ## Data Model ### SpecialAward ```prisma model SpecialAward { id String @id @default(cuid()) competitionId String name String description String? // Routing routingMode AwardRoutingMode // STAY_IN_MAIN | SEPARATE_POOL pullOutBehavior PullOutBehavior? // REMOVE_FROM_MAIN | KEEP_IN_BOTH (only for SEPARATE_POOL) routingConfirmationMode RoutingConfirmation @default(ADMIN_CONFIRMED) // Eligibility eligibilityMode AwardEligibilityMode // AI_SUGGESTED | MANUAL | ALL_ELIGIBLE | ROUND_BASED eligibilityCriteria Json? // AI screening criteria (if AI_SUGGESTED) eligibilityRoundId String? // filter from this round's output (if ROUND_BASED) // Jury juryGroupId String? // dedicated jury group (null = single judge) // Single judge mode winnerDecisionMode WinnerDecisionMode @default(JURY_VOTE) singleJudgeUserId String? // only if winnerDecisionMode = SINGLE_JUDGE // Doc requirements requiresAdditionalDocs Boolean @default(false) docRequirements Json? // additional file slot definitions // Review window reviewWindowStart DateTime? reviewWindowEnd DateTime? // Audience voting audienceVotingEnabled Boolean @default(false) sortOrder Int @default(0) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt competition Competition @relation(...) juryGroup JuryGroup? @relation(...) winners AwardWinner[] @@index([competitionId]) } ``` ### AwardWinner ```prisma model AwardWinner { id String @id @default(cuid()) awardId String projectId String rank Int @default(1) // 1 = winner, 2+ = runner-up decidedById String // judge or admin who confirmed decisionMode WinnerDecisionMode reason String? createdAt DateTime @default(now()) award SpecialAward @relation(...) project Project @relation(...) @@unique([awardId, projectId]) } ``` ### Supporting Enums ```prisma enum AwardRoutingMode { STAY_IN_MAIN // Mode B: projects stay in main pool SEPARATE_POOL // Mode A: projects enter dedicated pool } enum PullOutBehavior { REMOVE_FROM_MAIN // pulled out of main competition KEEP_IN_BOTH // in both main and award pools } enum RoutingConfirmation { ADMIN_CONFIRMED // admin must approve pull-out AUTOMATIC // pull-out happens automatically on eligibility } enum AwardEligibilityMode { AI_SUGGESTED // AI screens projects against criteria MANUAL // admin manually selects eligible projects ALL_ELIGIBLE // all projects in the competition are eligible ROUND_BASED // projects that passed a specific round are eligible } enum WinnerDecisionMode { JURY_VOTE // jury evaluates and votes SINGLE_JUDGE // one designated judge decides } ``` --- ## Eligibility & Filtering Award eligibility is determined by the `eligibilityMode`: | Mode | How Projects Become Eligible | |------|------------------------------| | `AI_SUGGESTED` | AI screens all projects against the award's `eligibilityCriteria`. Uses the existing AI screening system. | | `MANUAL` | Admin manually flags projects as eligible for this award. | | `ALL_ELIGIBLE` | Every project in the competition is automatically eligible. | | `ROUND_BASED` | Projects that passed a specific round (e.g., filtering, Jury 1) are eligible. | For `AI_SUGGESTED`, the filtering uses the same AI screening infrastructure as the main R2 filtering round, just with award-specific criteria. --- ## Per-Award Jury Each award can have its own `JuryGroup`: - Members can overlap with main juries (same judge on Jury 2 and Innovation Award jury) - Independent cap and assignment configuration - Own scoring rubric if needed For simpler awards, `SINGLE_JUDGE` mode allows one designated judge to make the decision directly. --- ## Per-Award Document Requirements If `requiresAdditionalDocs` is true, the award defines additional file slots that eligible projects must submit: ```typescript type AwardDocRequirement = { slotKey: string // e.g., "innovation_statement" label: string // "Innovation Impact Statement" required: boolean maxFileSize: number // bytes acceptedTypes: string[] // ["application/pdf", "video/mp4"] } ``` These are separate from the main submission windows. Award docs are uploaded through the applicant's award-specific section. --- ## Award Review Window Each award has its own review window (start/end dates) that is independent of the main competition schedule. The review window: - Can overlap with Jury 2 evaluation or run after it - Shows countdown on the award jury's dashboard - Triggers email reminders as the deadline approaches --- ## No Deliberation for Awards Special awards are decided by their own jury/judge mechanism: - **JURY_VOTE**: Award jury members evaluate and vote. Simple majority or highest score wins. - **SINGLE_JUDGE**: Designated judge reviews and selects the winner(s). There is no `DeliberationSession` for awards. The award winner is confirmed by the deciding jury/judge and recorded as an `AwardWinner`. --- ## Audience Voting for Awards If `audienceVotingEnabled` is true on an award: - Audience can vote for their preferred project within the award pool - Audience vote can influence the award decision (configurable weight) - Audience vote results are visible to the award jury during their review --- ## Admin Controls - **Create/edit awards**: name, mode, eligibility, jury, doc requirements, review window - **Confirm pull-out**: for SEPARATE_POOL mode, admin reviews and approves which projects are pulled - **Override eligibility**: admin can add/remove projects from award eligibility at any time - **Override winner**: admin can override the jury/judge decision with audit trail - **View award status**: see all awards, their eligible projects, jury progress, and winners All admin actions on awards are logged to `DecisionAuditLog`. --- ## Integration Points - **R5 (Jury 2)**: Awards typically activate during or after Jury 2. Award filtering runs alongside Jury 2 evaluation. - **Live Finals (R7)**: Award winners may be announced during the live finals ceremony. - **Reports**: Award selections, jury decisions, and audit trails are included in competition reports. See [03-competition-flow.md](./03-competition-flow.md) for how awards fit into the overall competition flow.