Promote a whole school in one afternoon. Per-student class, roll, registration. Skip-on-error for messy data.
Inkwelly's Promotion screen carries every active student from your current academic session into the next — `2025-26` to `2026-27` — with per-student target class, new roll number, fresh registration number and a skip-on-error toggle for messy edge cases. Built for the April promotion week every Indian school office dreads, and the year-end batch closing every CBSE / ICSE / state-board affiliation requires.

Why April promotion week breaks every school office
The last week of March, every Indian school office turns into a paperwork war zone. Class 5's annual results are out. The principal has signed the promotion list — 250 students moving from Class 5 to Class 6, 195 from Class 4 to Class 5, 220 from Class 3 to Class 4. Multiply by every grade and the school has 1,200 students who all need to be carried into next year's session — 2026-27 — with new section assignments, fresh roll numbers in their target sections, and clean registration numbers for the upcoming CBSE board exam batch.
In most school ERPs this becomes 1,200 separate operations. Open the student profile in 2025-26. Note the current class. Switch to 2026-27. Re-enter the student. Pick their new class. Pick their new roll number. Hope you got the section right (was she in Class 5 A or Class 5 B?). Hope you didn't accidentally promote a student who was actually held back. Hope the fee ledger for the new year is created. Hope the parent app reflects the correct class. The work takes a single office assistant 12 working days at a school of 1,200 students. The principal is still chasing pending entries on April 25th when the new session has already started. Three weeks lost.
We built Promotion as a dedicated screen that carries the entire school across the year boundary in a single afternoon. Pick the target session. The screen shows every active student in the current session. Filter to a class, tick the rows, set their target class and new roll numbers in an inline table, save. Inkwelly creates the next-session academic record for each student, opens their fee ledger for the new year, transfers their attendance baseline, and writes a per-student promotion entry to the audit log — all in one bulk save. A 1,200-student school can finish promotion in an afternoon, not a fortnight.

How Promotion works — one screen, two sessions, one save
Open Students → Promotion in the session sidebar. The page loads with up to 100 active students from the current session, sorted alphabetically. The header shows the cohort breakdown — total students, boys, girls — so the office assistant immediately knows the scope she's working with.
Step 1 — Pick the target session. A card at the top of the page asks for the target academic session — typically the next year, 2026-27 if you're currently in 2025-26. The dropdown lists every active session for your school, with the current one disabled (you can't promote to the same year). When you pick a target, Inkwelly lazy-loads that year's class list — Class 1 A, Class 1 B, all the way up to Class 12 Commerce for the new year, exactly as your school configured it. A small green pill confirms 'Classes available for 2026-27' once the load completes.
Step 2 — Filter to the cohort. Three filters across the top: free-text search by name, current-session class dropdown, gender. The grid only shows active students by default — students already marked inactive (transferred out, withdrawn) don't accidentally get promoted. Filter to Class 5 A to promote that section to Class 6; filter to all girls in Class 8 to promote them as a cohort; or leave the filter open to act on the entire active student body.
Step 3 — Tick the students and configure per-student. Tick the row checkboxes for the students promoting. The selection bar shows the count, the target session, and a 'Promote' button. Clicking 'Promote' opens the configuration dialog. For bulk selections, Inkwelly shows a sticky-header table — one row per selected student — with three editable columns: target class (dropdown of next-session classes), new roll number, new registration number. Use the Quick apply dropdown at the top of the table to set the same target class for every selected student in one click — typical when promoting an entire Class 5 A to Class 6 A.
Step 4 — Set effective date, remarks, save. A shared effective date applies to every student in this batch — typically April 1st of the new session. Optional shared remarks for context. For bulk runs, a skipErrors checkbox lets you choose: continue past failed rows (keeping the successes) or stop at the first failure. Save. Inkwelly creates the new-session academic record per student, links them to the target class, assigns roll and registration numbers, opens their fee ledger for the new year, and writes a per-student promotion entry to the audit log. The dialog closes with a count of successful and failed promotions — successful: 38, failed: 0 for a clean run.
What you configure per student in a single bulk run
- Target class — the new
Class 6 Afrom your2026-27class list, picked from the per-row dropdown or set globally via Quick apply. - New roll number — typed per student, or left blank to let Inkwelly auto-assign sequentially in the target class.
- New registration number — free text per student, useful for CBSE registration where every student gets a fresh registration in the new academic year.
- Effective date (shared) — applies to all students in this batch; defaults to today, typically set to April 1st of the new session.
- Remarks (shared) — optional context that applies to the whole batch, e.g., 'Annual promotion 2025-26 → 2026-27, signed by Principal on 2026-03-31'.
- Skip-on-error toggle — for bulk runs, decide whether one failed row stops everything or whether the rest of the batch saves anyway.
- Quick apply — one-click bulk-set the same target class across every selected student (most common case: promoting an entire section).
- Per-row outcome — every student returns success or specific failure reason; the batch reports
successful: 38, failed: 2with the failures itemised. - Active-only by default — inactive students (transferred out, withdrawn, suspended) are excluded from the grid so they don't get promoted by mistake.
- Linked records carried — the new academic record carries the student's profile, parent contacts, address, photo, blood group, religion, RTE flag and every other profile field; only class, roll and registration change.
Walkthrough — four screens, end to end




Pick target session first — the rest unlocks
The top card on the Promotion screen asks for one decision: which session are you promoting to? Inkwelly shows every active session your school has configured — typically 2025-26, 2026-27, sometimes a future 2027-28 if you've already set it up for early planning. The current session you're viewing is disabled in the dropdown — you can't promote students to the same year they're already in.
The moment you pick 2026-27, Inkwelly fires a background load for that year's class list. Within a second, the next-year classes are available — Class 1 A, Class 1 B, ..., Class 12 Science, Class 12 Commerce, Class 12 Arts. A small green pill on the card confirms 'Classes available for 2026-27'. If you accidentally pick a session that has no classes set up yet, a yellow warning surfaces — 'Set up the class list for 2026-27 first.' — with a link to the academic year setup screen.


Quick apply — one click for whole-section promotions
The most common Indian-school promotion pattern is moving an entire section as a group. Class 5 A becomes Class 6 A. Class 5 B becomes Class 6 B. The principal already drew up the section assignments. The office assistant just needs to apply them.
The Promotion dialog has a Quick apply dropdown above the per-student table. Pick Class 6 A from the dropdown and every selected student in the table gets Class 6 A set as their target in one click — no need to click 38 individual dropdowns. From there, the office assistant types sequential roll numbers in the inline number column — 1, 2, 3, 4... in the order the principal wants them — or leaves them blank for Inkwelly to auto-assign. For mixed-section promotions — some students moving to Class 6 A, some to Class 6 B — set the majority via Quick apply, then change individual rows that are exceptions. The flow handles the 80/20 case in seconds and the 20% in a few extra clicks.
Per-student class, roll number, registration number
Indian schools care about all three. Class assignment determines the next year's section. Roll number determines the morning assembly call order, exam seating, attendance register sequence. Registration number is what the CBSE / ICSE / state board registers for the new year's exam roster — for Class 9 promoting to Class 10 (board year), this is the number that appears on the admit card.
The Promotion bulk table has all three columns inline. Target class is a dropdown of next-year classes, new roll number is a numeric input (with min: 1 validation), new registration number is a free-text input — you can paste from a pre-prepared spreadsheet of board registration numbers if your school issues them externally. Each row also shows the student's photo, current name, and current section, so the office assistant has the context she needs to fill the right values without opening individual profiles. The single-student version of the dialog has the same three fields but laid out vertically for one-record clarity.


Skip-on-error — messy data doesn't break the run
Real Indian-school data is rarely clean on March 31st. A handful of students were marked inactive last week. Two duplicate roll numbers exist in Class 5 A from a manual edit nobody fixed. One student's profile has a missing date of birth that fails validation in the new session. In a strict ERP, any single one of those problems aborts the whole bulk promotion — the office assistant fixes the row, retries, hits the next problem, retries, hits the next, and the 90-minute job becomes 4 hours of stop-start.
The Promotion dialog has a skipErrors checkbox for bulk runs. Tick it, and Inkwelly continues past every per-row failure — saving the 36 students that promote cleanly, then returning a result envelope of successful: 36, failed: 2 with the specific reason per failure. The 2 failures stay editable in the source list, the office assistant fixes them at her own pace, and re-runs just those two. No retry-the-whole-batch churn. For the rare case where you want strict-mode (e.g., promoting board-year Class 10 students where partial promotion is unacceptable), leave skipErrors off — the bulk save halts at the first failure with a single error toast.
“April mein 1,150 students ka promotion ek session se doosre mein le jaane mein pehle 11 din lagte the. Ab Promotion screen pe class-wise filter karke, Quick apply se target class set karke, roll numbers paste karke — saara school ek doopahar mein ho gaya. Skip-errors ne 7 missing-DOB students ko side mein rakha, baaki 1,143 saaf chal gaye. Naya session 1 April ko ready tha.”
A typical April promotion week with Inkwelly
March 28th — Pre-flight check. The principal's signed promotion list arrives in the office. Office assistant logs into Inkwelly, opens the academic year setup, and confirms 2026-27 has its class list ready — Class 1 A through Class 12 Commerce, with the right intake counts, the right teacher-in-charge per section. If anything is missing, she sets it up first — a 30-minute task per session, one-time per year.
March 30th — Class 1 to Class 5 promotions. The bulk of the school. She filters Promotion screen to Class 1, ticks all 90 students with the master checkbox, picks 2026-27 as the target session, opens the dialog, uses Quick apply to set Class 2 A for the first 45 (which the principal has assigned to that section), saves with skipErrors on. Result: successful: 44, failed: 1. The one failure is a student whose profile has a missing date of birth — she fixes it in the profile screen, re-runs Promotion for just that student, success. Repeats for Class 1 → Class 2 B, then for every grade through Class 5. By 4 PM, primary-school promotion is done.
March 31st — Class 6 to Class 12 promotions, plus held-back exclusions. Middle school and senior school. The principal's list flagged 14 students who failed to meet the promotion criteria — they stay in the same grade. Office assistant works class-by-class, ticking only the students on the principal's promotion list (skipping the held-back ones), and runs each section's promotion. The Class 9 → Class 10 batch needs special handling — every student gets a fresh CBSE registration number that the office prepared in a spreadsheet last week. She pastes the registration numbers into the inline column. Result: successful: 78, failed: 0. By 6 PM, the entire school is on 2026-27.
April 1st — New session opens cleanly. Class teachers log in to find their new sections fully populated. Fee invoices for 2026-27 are auto-generated based on the new fee structure. Parents see their child's new section in the parent app from day one. The morning assembly reads out the new roll lists from a printed PDF the office generated from the class roster screen. The principal's secretary doesn't have a single 'pending promotion' email to chase down. The new academic year has already started, on time.
Edge cases the Promotion screen handles cleanly
- Held-back students — simply don't tick them in the bulk selection; they stay in their current section in the new session is opened separately.
- Section reshuffle on promotion — some
Class 5 Astudents go toClass 6 A, others toClass 6 B; use Quick apply for the majority, override individual rows for exceptions. - Stream choice at Class 11 —
Class 10students promoting intoClass 11 Science,Class 11 Commerce,Class 11 Arts; pick the target stream per student. - Board-year fresh registration —
Class 9 → 10andClass 11 → 12get fresh CBSE/ICSE/state-board registration numbers; paste them into the registration column. - Skipped students from inactive list — transferred-out and withdrawn students are excluded from the grid by default; they cannot be accidentally promoted.
- Mid-session entries — students who admitted after April 1st of the current year still get promoted at year-end, with their full profile and fee ledger carrying forward.
- Hostel-block re-mapping — residential schools where hostel-block-class assignments change yearly; promote students into target sections that match the new hostel layout.
- Forward-dated promotions — set effective date to April 1st of the new session even if you run the batch on March 28th; reports honour the effective date.
- Multi-school trust — a trust running 6 schools runs Promotion per-school independently, no cross-tenant leak.
- RTE 25% reservation continuity — RTE-flagged students retain the flag in the new session; reservation status carries forward without re-classification.
- Skip-on-error for messy data — failed rows itemised, batch continues; office fixes the failures separately and re-runs just those.
- Audit log per student — every promotion writes an audit entry with source class, target class, effective date, actor, and timestamp; trails are full for CBSE renewal, ICSE inspection and state-board RTE compliance.
See Promotion live on your school's data
Bring last year's promotion list. We'll set up your school's two sessions during the demo, run the promotion of an entire grade live, and show you how 12 days of work becomes one afternoon.
Limits, safety, and the small print
Cross-session by design. Promotion is the only screen for moving students from one academic session to another. For within-session moves between sections — Class 6 A to Class 6 B in the same year — use the dedicated Class Change screen. Trying to use Class Change for year-end migration loses the fee-ledger creation, attendance baseline transfer and audit-log linkage that Promotion handles automatically.
100 students per page. The grid loads up to 100 active students at once — enough for an entire class section, or a filtered cohort. Schools with 1,000+ students promote class-by-class — filter to Class 1, run the promotion batch, filter to Class 2, run the next batch, and so on. Each batch is its own atomic save with its own per-row outcomes. The whole school is typically done in 90 minutes of focused work.
Active-only by default. Inactive students (transferred out, withdrawn, suspended, deceased) are excluded from the grid. This is intentional safety — the office assistant cannot accidentally promote a student who has already left. To promote a previously-inactive student (rare — e.g., a transfer back from a sister school), reactivate them in the student profile first, then run Promotion.
Per-row atomicity with skip-on-error. Each student is processed as its own transaction. With skipErrors on, the bulk save commits every successful row and reports the failures separately — no all-or-nothing rollback. With skipErrors off (strict mode), the bulk save halts at the first failure. Default is off for safety; turn it on for messy bulk runs where partial-success is acceptable.
Effective date drives reports. Reports across years honour the effective date. A Class 5 A attendance summary for March will show the student as 5 A; the April summary in the new session will show her as 6 A, automatically — no manual report regeneration. Back-dated promotions (recording a March 28th decision on April 5th) and forward-dated promotions (running the batch in late February for April 1st) both work the same way.
Audit log per student. Every promotion writes a per-student audit entry — actor, timestamp, IP address, source session, source class, target session, target class, new roll number, new registration number, effective date, remarks, source ('Promotion'). The audit log is exportable from the school admin panel and stands up to CBSE renewal, ICSE inspection and state-board RTE compliance.
Role-based access. Promotion is gated to school admin and principal roles by default. Class teachers see individual student profile edits in their assigned section but not the bulk promotion screen. Most schools keep it admin-only because the impact of a bad promotion run touches the fee ledger, attendance register and exam roster across two years. Configure permissions per role from the school IAM settings.
Multi-tenant isolation. Like every Inkwelly module, your school's Promotion operates strictly on your school's records. Multi-school trusts run Promotion per-school independently with no cross-school access. A single trust admin can run all 6 schools' promotions in succession from the same login.
Class list must exist in the target session. Promotion validates that the target session has a configured class list before allowing saves. If 2026-27 has no classes set up yet, the page surfaces a yellow warning with a link to the academic year setup screen — set up the class list once per year, then run promotions against it.
किस मॉड्यूल का हिस्सा
1 moduleअक्सर पूछे गए सवाल
9 सवालWhat's the difference between Promotion and Class Change?
Promotion moves students from the CURRENT academic session to the NEXT (e.g., Class 5 in 2025-26 → Class 6 in 2026-27). Class Change moves a student between sections inside the SAME session (e.g., Class 6 A → Class 6 B in 2025-26). Promotion is a year-end cross-session migration with new fee ledgers and audit linkage; Class Change is a within-session reshuffle for July rebalancing, RTE corrections and parent requests. Use Promotion for the annual April lift, Class Change for everything mid-year.
Can I promote 1,000 students in one click?
The grid loads up to 100 students per page, so for a 1,000-student school you'll run 10 bulk batches — typically class-by-class. Filter to Class 1, tick the master checkbox, configure with Quick apply, save. Filter to Class 2, repeat. Each batch is its own atomic save with its own per-row outcomes. The whole school is typically done in 90 minutes of focused work — vs. 10–12 days of one-by-one promotion in legacy ERPs.
What happens if some students fail to promote?
Turn on the skipErrors checkbox in the bulk dialog. Inkwelly continues past every per-row failure — saving the students that promote cleanly, returning a result envelope of `{ successful: 36, failed: 2 }` with the specific reason per failure (e.g., 'date of birth missing', 'duplicate registration number', 'target class no longer active'). The 2 failures stay editable; you fix them and re-run just those. No all-or-nothing rollback. With skipErrors off (strict mode), the batch halts at the first failure.
Do I have to manually pick a class for each student?
No — use the Quick apply dropdown at the top of the bulk dialog table. Pick `Class 6 A` once and every selected student in the batch gets `Class 6 A` as their target. From there, change individual rows for exceptions (e.g., 3 students moving to `Class 6 B` instead). Most whole-section promotions take one Quick apply click plus zero overrides. Mixed-section promotions take one Quick apply click plus a few row edits.
Will the new session's fee ledger be created automatically?
Yes. When a student is promoted, Inkwelly creates a new academic record in the target session linked to the same student profile. The fee ledger for `2026-27` opens automatically based on your configured fee structure for the new class. Attendance baselines, exam records and parent-app dashboards all open cleanly for the new session. The previous-session records are preserved (not deleted), so historical reports remain accurate.
What about students who got held back? Will they be promoted by mistake?
Only the students you tick in the grid are promoted. Held-back students simply aren't ticked — they stay in their current section. To make this even safer, you can set the held-back students' status to a custom flag in the [student profile](/modules/student-information) and filter the Promotion grid to exclude them. The active-only filter on the grid by default also protects against accidentally promoting transferred-out or withdrawn students.
Are inactive students (transferred out, withdrawn) excluded from promotion?
Yes — the grid shows only active students by default. Transferred-out, withdrawn, suspended and deceased students are excluded so they cannot accidentally be promoted. To promote a previously-inactive student in the rare case (e.g., a transfer back from a sister school), reactivate them in the student profile first, then run Promotion. The default protects the common case.
Does it support stream choice at Class 11 and board-year registration numbers?
Yes. For `Class 10 → Class 11` promotions, the target class dropdown shows all configured streams — `Class 11 Science`, `Class 11 Commerce`, `Class 11 Arts`, and any others your school has set up (`Class 11 Vocational`, `Class 11 Humanities`). Pick per student. For board-year fresh registration (`Class 9 → 10` and `Class 11 → 12`), the inline registration number column accepts pasted values from a CBSE/ICSE/state-board registration spreadsheet.
Is the promotion audit-logged?
Yes. Every promotion writes a per-student audit-log entry — actor, timestamp, IP address, source session, source class, target session, target class, new roll number, new registration number, effective date, remarks, source ('Promotion'). The audit log is exportable from the school admin panel and is what stands up to a CBSE renewal, ICSE inspection, or state-board RTE compliance audit. The previous-session academic record stays preserved — never deleted — so cross-year reports remain accurate.
आपको ये भी पसंद आ सकता है
3 लेखInkwelly आपके स्कूल पर — खुद देखें
30 मिनट का डेमो। आपके मौजूदा ERP को आपके साथ खोलकर, कॉल पर ही आपका डेटा Inkwelly में लोड करते हैं। कॉल ख़त्म होते-होते एक तय तारीख़ का गो-लाइव प्लान आपके हाथ में।