Checking admin access…
Not redirected automatically? Go to the main Admin Panel to log in first.
Expected columns (any missing column just comes through blank — nothing is required): Question English/Hindi, Option A–D English/Hindi, Correct Answer, Explanation English/Hindi, Subject, Question Type, Year, Source, Source File, Size, Chapter Number, Chapter Name, Part Number, Part Name, Act / Law, Section / Provision, Citation / Code Reference, Case Law, GK Category, GK Topic 1–3 / GK Sub-topic 1–3, PYQ 1–10 Exam Name / PYQ 1–10 Exam Year, Question Tags, Option Tags, Impact/Review Tags (each semicolon-separated), Question Status, Question Quality, Difficulty, Exam Relevance. Optional: Question ID — fill this in only to update an already-saved question by its exact Smart Question ID (never creates a new question, never changes the ID). Leave it blank for a normal new-question import.
Download this template, fill your questions, then upload the Excel file.
Select one chapter file or several at once (e.g. all 22). For files already in the extraction JSON schema (questionEn/questionHi/optionAEn.../correctAnswer/pyq[]/explanationEn/explanationHi/gkTopic1/gkSubTopic1/status per question). Every question is imported — "needs_review" ones are tagged with Question Status "Needs Review" (not skipped), so you can filter to them afterward in Search Master Bank, select them, and download/edit them there.
For a question paper that already has printed MCQs — reads real page images one page at a time (bilingual English/Hindi captured exactly as printed, never translated). Does not generate new questions from a bare Act or notes. Every extracted question is tagged "Needs Review" — an AI transcription still needs a human check before it's trusted. A question whose printed number doesn't match anything in the Answer Key still lands in Needs Review rather than a guessed answer.
Reads the pasted text directly — no PDF/image, no AI vision needed. Same rules as the PDF tool: extracts real MCQs exactly as written, never generates new ones, never guesses a correct answer that isn't explicitly marked in the text. Long pastes are sent in chunks automatically. Every extracted question is tagged "Needs Review".
Generates strictly from a Source's already-chunked, section-labeled text — every labeled chunk is submitted as ONE background batch (Anthropic Message Batches API), 50% cheaper than a live call, never asks you to stay on the page. Unlabeled chunks (title page, preamble) are skipped — nothing to attach a section number to. Every question, its options, and its answer are grounded in that chunk's text alone — see "🧩 View Chunks" in Source Manager to check a source's chunking before generating from it. A batch is checked automatically every 10 minutes in the background (page can be closed) — come back anytime and pull a ready batch's results into Review below.
Loading…
Paste, save, then create and publish a test — one place, three steps.
| ID | Question (English) | Source File | Subject/Chapter or GK | Type | 📖 | 🔗 | Added On | Actions |
|---|
Auto-generated from the Smart Question ID registry — every code is assigned automatically the first time a Subject/Chapter/GK Category is used. Nothing here is typed manually. Codes are permanent and never change, even after a rename — use Manage Taxonomy below for current names.
Loading…
Each of these 7 fields lives in its own mqbTaxonomy/pool_<field> document (split 2026-09-25 — the shared mqbTaxonomy/values doc hit Firestore's hard per-document index-entry limit and stopped accepting new values). Every field now has its own budget; a warning here means that specific field is approaching its own ceiling, not the whole taxonomy system.
Loading…
Every Excel file uploaded through the Upload & Review tab is preserved here exactly as uploaded — nothing here is ever regenerated or altered. Files are grouped by Subject → Chapter so you can see status without opening each one. 🟨 Needs Attention · 🟦 Unpublished · 🟩 Published.
A separate library of source/reference material (PDF, image, DOCX, or pasted text) used to verify questions against — completely independent from Uploaded Files (which are Excel question imports). Mapping to Subject/Chapter/etc. is optional and can be added anytime.
| Name | Type | Status | Chunks | Mapping | Actions | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Open an Act to read EN | HI side by side, edit a chunk, review flagged sections, download, or paste a new version. This was the "Subject Library" page in the admin panel.
Every Act imported from legalom-sources — EN/HI availability, review status, and how much practice content is linked to it so far.
New/edited content does not show in search (MCQ from Source, RAG) until "Re-embed" runs — run it once after Paste & Parse or Edit.
File-wide once: @@ACT/@@YEAR (both English-only — never write "||" on these two lines). Structural, write only when it changes: @@PART/@@CHAPTER/@@HEADING (each English || Hindi, persists until you write it again). Per section: @@SEC N, @@TITLE, then any of @@TEXT/@@SUB/@@CLAUSE/@@SUBCLAUSE/@@ITEM/@@EXPL/@@ILLUS/@@PROV/@@EXCEPTION/@@NOTE, each followed by its own English || Hindi text line(s), then @@END. @@EXCEPTION is for an Act's own numbered "Exception 1"/"Exception 2" clauses (e.g. BSA Sec 94, and it can be given with no number too) — different from @@EXPL, which is unnumbered explanatory text. @@ITEM is a roman-numeral list sitting directly under a @@SUB/@@TEXT, not nested inside any lettered @@CLAUSE. @@NOTE is for a sub-section not yet in force. Hindi not yet confirmed? End that line with [VERIFY] — flagged below, filterable, never silently imported as final. Re-pasting the same Act + Section overwrites it in place — never creates a duplicate. Completely separate from any older Firestore Bare Act source — nothing here is read from or written to that.
Schedule-only (used inside a @@SEC block that IS a Schedule, e.g. @@SEC First Schedule): @@PART PART A || भाग क — a Schedule's own internal Part heading, unrelated to the file-wide @@PART above (that one only applies outside a @@SEC block; used again inside one, @@PART switches meaning to this). @@SUBHEAD/@@SUBHEADING (same tag, either name) — a standalone heading/instruction line, e.g. "(To be filled by the Party)". @@FIELD — a form's blank/checkbox line.
@@TABLE / @@TABLEHEADER / @@TROW / @@TABLEEND — a small table LOCAL to one section (e.g. a compoundable-offences table inside one Section). One @@TABLEHEADER line, then one @@TROW + its one data line per row, then @@TABLEEND. Columns are separated by a single |; the whole line's English and Hindi are separated by || — e.g. @@TABLEHEADER Offence | Compoundable by || अपराध | शमन कर्ता, then @@TROW followed by Causing hurt | The injured person || उपहति कारित करना | उपहत व्यक्ति.
@@ROW / @@ENDROW — a classification-table row (e.g. BNSS First Schedule's 440+ rows: Section/Offence/Punishment/Cognizable/Bailable/Court). Each row is @@FIELD Label || Hindi then its value line, repeated for every column — the FIRST field must be labelled "Section" (its value is what a question's cited Section links back to). Deliberately NEVER shown as one giant list — a question citing that Section shows only its own one-line classification strip, never the whole table. If an already-imported Section has no matching row after you import a batch of these, the import result tells you which ones.
@@FORM / @@ENDFORM — one of a Schedule's numbered forms (e.g. BNSS Second Schedule's 58 notices/warrants/summonses). @@FORM 1 || प्ररूप 1, then that form's own @@TITLE/@@TEXT/@@FIELD lines (FIELD here needs no value line — it's just a blank/signature line), then @@ENDFORM. Forms never auto-link to any question (no Section number of their own) — find one later via "🔍 Find a Form" below.
For splitting one huge Act across several paste-and-import rounds: only the FIRST chunk needs @@ACT — later chunks that start straight at @@SEC use whatever Act name you type here instead. An explicit @@ACT line in the paste always wins over this. Leave blank for a normal, self-contained paste.
| Act | Location | Section | Title | Parts | Verified | Notes | Actions | |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
Forms (e.g. Second Schedule's numbered notices/warrants/summonses) never auto-link to any question — search by number or name to jump straight to the Schedule that holds it.
Paste one or more @@CASE ... @@END blocks. A case can link several sections at once (@@SECTION 368, 13). Re-pasting the same Citation overwrites that case in place — never creates a duplicate.
| Name | Citation | Court / Year | Act | Sections | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
File-wide, once at the top: @@MAPPING_TABLE/@@SOURCES_USED/@@NOTE_ON_SCOPE/@@NOTE_ON_SCHEDULE/@@PROGRESS — each one plain text, saved once per import (not repeated per mapping). Then one or more @@MAP ... @@ENDMAP blocks: @@OLD Act | Section and @@NEW Act | Section (repeatable — several @@OLD lines for a MERGED mapping, several @@NEW lines for a SPLIT one; DROPPED needs no @@NEW; NEW needs no @@OLD), @@TYPE — 6 values: EXACT/RENUMBERED/MERGED/SPLIT/DROPPED/NEW — @@OLDTITLE/@@NEWTITLE/@@CHANGED (all bilingual, English || Hindi), and @@CONFIRMED_BY (free text, inside each @@MAP — this one is NOT file-wide). Act names can be typed as a short form ("IEA") or the full name, with or without "The"/year — matched against whatever's already in the Bare Act library; anything that doesn't resolve is reported after import, never guessed.
@@DROPPED_LIST/@@NEW_IN_<ACT>_LIST — usually at the file's end: a quick summary list, no @@ENDMAP needed. The NEW side's tag name can be anything ending in "_LIST" (@@NEW_IN_BSA_LIST, @@NEW_IN_BNSS_LIST, @@NEW_IN_BNS_LIST, ...) — the Act name in the middle is never checked, it's just there for readability; @@DROPPED_LIST's own name never changes. An optional bilingual description can follow either tag on the same line (English || Hindi, saved onto the batch record). Inside one, each @@DROPPED_ITEM Act | Section or @@NEW_ITEM Act | Section line becomes its own DROPPED/NEW mapping (same effect as a full @@MAP block with just @@OLD or @@NEW given — no title/changed/confirmed-by on these, since they're a summary, not the detailed entry).
| Old | New | Type | Changed | Confirmed By | Actions | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
One row per @@MAPPING_TABLE import — the file-wide scope/sources/progress notes, kept separately from the individual mappings above. Deleting a batch record only removes this summary row — it never touches the mappings it produced.
| Mapping Table | Sources Used | Note on Scope | Note on Schedule | Dropped List Note | Dropped Items | New List Note | New Items | Progress | Mappings | Imported | Actions | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
Soft-deleted Master Question Bank questions — hidden from Search Master Bank and every Test Maker pool, but fully recoverable here. Permanent deletion is only available from this tab and cannot be undone.
| ID | Question (English) | Source/File | Deleted Date | Deleted By | Actions | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Soft-deleted tests — hidden from Manage Tests and every student view, fully recoverable here.
| ID | Name | Questions | Deleted Date | Deleted By | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
Soft-deleted folders (Test Maker's Manage screen) — hidden from the folder tree and every student view, fully recoverable here. Restoring never touches the tests that were inside it — they moved to "No Folder" when the folder was deleted and stay there until manually re-filed.
| ID | Name | Deleted Date | Deleted By | Actions |
|---|---|---|---|---|
| Loading… | ||||
Soft-deleted Bare Act sections — hidden from the Bare Act tab and skipped when linking a question's Act + Section to its text, fully recoverable here. Any question that already had this section's text saved onto it keeps exactly what it had — that copy was fixed at the moment it was linked, it's never a live pointer back to this collection.
| Act | Section | Deleted Date | Deleted By | Actions |
|---|---|---|---|---|
| Loading… | ||||
Act → Section → Enter = Save & Next — no mouse needed for the normal case. Suggested rows (🟡) come pre-filled from the Round-1 auto-tag pass; press Enter to accept, or type over them. "No Act (GK)" skips a row immediately with no other field required.
A whole paper — 100 questions — in one click: pick Subject (or Source), pick its value, fill Exam/Year/Paper, Apply. Only fills whatever fields you actually type — leaving one blank leaves that field untouched. This never marks a row "tagged" by itself (Act/Section still needs the per-row flow, or "No Act (GK)") — it only fills in the shared metadata.
| Question (English) | Act | Section | Year | Exam | Paper | Actions |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Fewer than 2 real options in a language, or no valid A–D answer — these are held out of every test/practice pool (questionStatus:"Incomplete") until fixed here. Fill in what's missing and Save — a row only leaves this list once it passes the same bar in both languages.
| Question | Options (English) | Options (Hindi) | Answer | Action |
|---|---|---|---|---|
| Loading… | ||||
The full list of LAW Acts and GK Categories in one place — see questions that fit none of them here and move them to the right place in one click. Every Fix uses the same "Move Question(s)" flow — the count is shown first, and undo is always available in "🕐 Move History" (Search tab).
Loading…
| Act | Live questions |
|---|---|
| Loading… | |
| Category | Live questions |
|---|---|
| Loading… | |